2011-12-29 98 views

回答

4

上傳輸入控件會打開一個本地對話框(由瀏覽器完成),因此點擊通過Selenium的控件或瀏覽按鈕將彈出對話框並且測試會掛起。

解決方法是通過JavaScript設置上傳輸入的值(在Java中通過JavascriptExecutor完成),然後提交表單。

this question樣品在C#中,我相信也有一個方法來調用JavaScript在Python,但我從來沒有使用過硒Python綁定

+0

這不是一個有效的解決方案,請參見https://stackoverflow.com/questions/29720794/jquery-select-input-文件並且也設置它到另一個輸入 – Will 2017-04-17 17:11:06

79

我在做什麼是這個(確保DRV是webdriver的實例):

drv.find_element_by_id("IdOfInputTypeFile").send_keys(os.getcwd()+"/image.png") 

然後找到您的提交按鈕並單擊它。

+7

這應該是被接受的答案。 – 2015-11-24 00:27:53

+0

是的這應該是被接受的答案! – 2017-04-30 10:25:24

+0

您能否詳細說明'os.getcwd()'的作用以及您的示例'image.png'在您的文件系統中的位置。 – ChickenFeet 2017-06-29 12:51:18

4

所有這些方法都不適用於olx中的現代圖像上傳器! 替代方法(僅適用於Windows)

1. Automation of windows can be done using Autoit 
2. Install Autoit and SciTe Script editor 
3. Autoit code :(imageupload.au3) 

WinActivate("File Upload"); for chrome use "open" that is the name of the window that pops 
send("D:\images\image1.png"); path of the file 
Send("{ENTER}") 

4. compile it to get an .exe file(imageupload.exe) 
5. Now from python call the .exe file like 

import os 
import os.system('C:\images\imageupload.exe') #path of the .exe file 
+0

你能舉一個明確的例子嗎,你是否導入了exe文件,你如何完全調用它? – 2one2 2015-07-27 03:34:48

+0

不!用我在第三點提供的三條線創建一個新的自動文件。參考這個將它轉換成.exe文件https://www.autoitscript.com/autoit3/docs/intro/compiler.htm,然後你可以使用我在第5點給出的兩條線從python腳本調用exe文件 – saravanan 2015-08-27 04:45:09

0

我用下面的腳本格式上傳圖像。這可能會幫助你。

Imagepath=os.path.abspath('.\\folder1\\subfolder2\file1.jpg') 
    driver.find_element_by_id("Id of the element").clear()    
    driver.find_element_by_id("Id of the element").send_keys(Imagepath) 

如果你沒有對象的ID,那麼你就可以相應地使用XPath或CSS選擇器。

1
import win32com.client 

shell = win32com.client.Dispatch("WScript.Shell") 
shell.Sendkeys("C:\text.txt") 
shell.Sendkeys("~") 

將解決此問題

+0

Hi我需要你的幫助,我正在嘗試上傳圖像文件並使用此代碼,但不適用於選擇file.its不會觸發輸入事件或製表鍵。你能幫我麼? – 2017-04-06 14:41:00

0

我使用fine-uploader,運行Selenium測試與pytest這個工作對我來說:

elm = driver.find_element_by_xpath("//input[@type='file']") 
    elm.send_keys(os.getcwd() + "/tests/sample_files/Figure1.tif") 

沒有提交表單或回車鍵需要在我的情況。

謝謝你所有的答案!它幫助了很多!

0

使用碎片:

browser.attach_file( 'file_chooser_id',fully_qualified_file_path)

1

我添加了一個答案任何人都希望使用處理惱人msofiledialogs。這取決於saravanan提出的解決方案,但更多地充實了Python。

我有一個類似的問題,我正在爲一家公司工作。我試圖爲公司的客戶上傳文件,但由於他們的網站工作方式,我無法利用send_keys直接發送路徑,所以我不得不依靠msofiledialog。

  1. 你只需要安裝的AutoIt https://pypi.python.org/pypi/PyAutoIt/0.3或只是通過命令屏幕

  2. 型 「進口AutoIt的」 腳本頁面

  3. 類型的 「PIP安裝-U pyautoit」 以下在您的腳本彈出文件對話框之前:

    autoit.win_active(「Open」) autoit.control_send(「Open」,「Edit1」,r「C:\ Users \ uu \ Desktop \ TestUplo ad.txt 「) autoit.control_send(」 打開」, 「EDIT1」, 「{} ENTER」)

它會尋找打開文件對話框窗口,並填寫,然後按回車。 「打開」是我的文件對話框的標題。把你的頭銜代替「打開」。有更多創造性的方式來利用AutoIt的功能,但這對初學者來說是一個簡單,直接的方法。

編輯:不。如果可以避免,請不要在大多數情況下使用control_send。它有一個衆所周知的發送錯誤文本的問題。在我的情況下,我的文件路徑中的冒號變成了一個分號。如果您需要發送輸入密鑰,則應該沒問題,但是如果您需要發送文本,請使用control_set_text。它具有相同的語法。

autoit.control_set_text("Open","Edit1",r"C:\Users\uu\Desktop\TestUpload.txt")