测试-如何使用Selenium,Python上传文件(图片)
如何使用硒测试工具在Web应用程序上上传图片? 我正在使用python。
我尝试了很多事情,但没有任何效果。
11个解决方案
144 votes
我正在做什么(确保drv是webdriver的实例):
drv.find_element_by_id("IdOfInputTypeFile").send_keys(os.getcwd()+"/image.png")
然后找到您的提交按钮,然后单击它。
karloskar answered 2020-02-08T12:07:43Z
7 votes
所有这些方法都不适用于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
saravanan answered 2020-02-08T12:08:03Z
7 votes
我为任何想使用烦人的msofiledialog的人添加了答案。 这是在saravanan提出的解决方案的基础上进行的,但是对于Python来说更为充实。
我正在为一家公司工作的脚本遇到类似的问题。 我正在尝试为公司客户上传文档,但是由于其网站的工作方式,我无法利用send_keys直接发送路径,因此我不得不依靠msofiledialog。
您只需要安装AutoIt[https://pypi.python.org/pypi/PyAutoIt/0.3]或仅通过cmd屏幕“ pip install -U pyautoit”
在脚本页面上输入“ import autoit”
在文件对话框弹出之前,输入以下命令:
autoit.win_active(“打开”)autoit.control_send(“打开”,“ Edit1”,r“ C:\ Users \ uu \ Desktop \ TestUpload.txt”)autoit.control_send(“打开”,“ Edit1”,“ {ENTER}”)
它将查找打开的文件对话框窗口并填写它,然后按Enter。“打开”是我的文件对话框屏幕的标题。 将您的标题替换为“打开”。 有更多创造性的方法来利用AutoIt的功能,但这对初学者来说是一种简单,直接的方法。
编辑:不要。 如果可以避免,请勿在大多数情况下使用control_send。 它有一个发送错误文本的众所周知的问题。 就我而言,文件路径中的冒号被变成了半冒号。 如果需要发送输入键,那应该没问题,但是,如果需要发送文本,请使用control_set_text。 它具有相同的语法。
autoit.control_set_text("Open","Edit1",r"C:\Users\uu\Desktop\TestUpload.txt")
Noctsol answered 2020-02-08T12:08:56Z
5 votes
上载输入控件将打开一个本机对话框(由浏览器完成),因此通过Selenium单击控件或浏览按钮将仅弹出对话框,并且测试将挂起。
解决方法是通过JavaScript设置上载输入的值(在Java中是通过JavascriptExecutor完成),然后提交表单。
请参阅C#中的示例问题,我确定还有一种在Python中调用JavaScript的方法,但我从未使用过Selenium Python绑定
Sergii Pozharov answered 2020-02-08T12:07:19Z
5 votes
我正在使用fine-uploader,使用pytest运行硒测试,这对我有用:
elm = driver.find_element_by_xpath("//input[@type='file']")
elm.send_keys(os.getcwd() + "/tests/sample_files/Figure1.tif")
在我的情况下,无需提交表单或Enter键。
感谢您的所有答案! 很有帮助!
AnaPana answered 2020-02-08T12:09:25Z
3 votes
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.Sendkeys("C:\text.txt")
shell.Sendkeys("~")
将解决问题
user1859723 answered 2020-02-08T12:09:45Z
0 votes
我已使用以下脚本格式上传图像。 这可能对您有帮助。
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选择器。
Tester P answered 2020-02-08T12:10:10Z
0 votes
使用碎片:
browser.attach_file('file_chooser_id',fully_qualified_file_path)
Anjan Dash answered 2020-02-08T12:10:36Z
0 votes
这是我使用的代码:
Imagepath = "C:\User\Desktop\image.png"
driver.find_element_by_xpath('//html/body/input').send_keys(Imagepath)
driver.find_element_by_xpath('//html/body/button').click()
我接受karloskar的回答。 注意它不适用于FireFox(59)。 它仅适用于Chrome驱动程序。
Arun K answered 2020-02-08T12:11:04Z
0 votes
完整代码以使用autoit工具实现文件上传。您只需复制粘贴此内容即可运行,因为它是实时演示,因此可以运行。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import os
def fileUploading():
driver = webdriver.Firefox()
driver.implicitly_wait(20)
wait = WebDriverWait(driver, 10)
driver.get("https://demo.actitime.com/login.do");
driver.find_element(By.ID,"username").send_keys("admin")
driver.find_element(By.NAME, "pwd").send_keys("manager")
driver.find_element(By.XPATH, "//div[.='Login ']").click()
wait.until(ec.element_to_be_clickable((By.XPATH, "(//div[@class='popup_menu_icon'])[3]")))
driver.find_element(By.XPATH, "(//div[@class='popup_menu_icon'])[3]").click()
wait.until(ec.element_to_be_clickable((By.XPATH, "//a[contains(text(),'Contact actiTIME Support')]")))
driver.find_element(By.XPATH, "//a[contains(text(),'Contact actiTIME Support')]").click()
wait.until(ec.element_to_be_clickable((By.XPATH,"//div[@class='dz-default dz-message']")))
driver.find_element(By.XPATH,"//div[@class='dz-default dz-message']").click()
os.system("C:\\Users\\mallikar\\Desktop\\screenUpload.exe")
time.sleep(2000)
fileUploading()
以下是autoit代码的内容:
WinWaitActive("File Upload")
Send("D:\SoftwareTestingMaterial\UploadFile.txt")
Send("{ENTER}")
下载autoIt和autoIt SCITE编辑器工具。完成安装autoit并打开scite编辑器后,粘贴上面的代码,并将其保存为.au3扩展名,保存后,右键单击该文件并选择complile script(x64),现在创建了.exe文件。
现在使用以下代码:
os.system("C:\\Users\\mallikar\\Desktop\\screenUpload.exe")
Mallikarjuna B answered 2020-02-08T12:13:25Z
0 votes
控制pyfilegui是控制Windows文件选择器(或一般来说只是操作系统)等组件的一种非常简单的方法。 您可以通过pip安装pyautogui
import pyautogui
... # set the webdriver etc.
...
...
element_present = EC.presence_of_element_located((By.XPATH, "//button[@title='Open file selector']")) # Example xpath
WebDriverWait(self.driver, 10).until(element_present).click() # This opens the windows file selector
pyautogui.write('C:/path_to_file')
pyautogui.press('enter')
Xraycat922 answered 2020-02-08T12:13:45Z