python selenium网页上传本地图片_测试-如何使用Selenium,Python上传文件(图片)

测试-如何使用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

你可能感兴趣的:(python)