如何上传文件(图片)与硒,巨蟒

如何使用硒测试工具在 Web 应用程序上传图片? 我使用的是 python。

我试了很多办法,但都没用。

123310 次浏览

上传输入控件打开一个本机对话框(通过浏览器完成) ,因此通过 Selenium 单击控件或浏览按钮将弹出该对话框,测试将挂起。

解决方案是通过 JavaScript 设置上传输入的值(在 Java 中是通过 JavascriptExecator 完成的) ,然后提交表单。

请参阅 这个问题获取 C # 中的示例,我相信在 Python 中也有调用 JavaScript 的方法,但是我从未使用过 Selenium Python 绑定

我要做的是(确保 drv 是 webDriver 的一个实例) :

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

然后找到你的提交按钮,点击它。

所有这些方法不会与现代图像上传在 olx 工作! ! ! 其他方法(只适用于窗口)

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

我已经使用下面的脚本格式上传图片。这可能会帮助你。

   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 选择器。

import win32com.client


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

会解决这个问题

我正在使用 很好的上传者,用 pytest运行硒测试,这对我很有效:

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

在我的情况下,不需要提交表单或输入密钥。

使用碎片:

Att_ file (‘ file _ choser _ id’,full _ fied _ file _ path)

我添加了一个答案,任何人希望使用处理恼人的 msofiledialogs。这是在 Saravanan 提出的解决方案的基础上进行的,但是对于 Python 来说更加充实。

我也有过类似的问题,我为一家公司兼职编写的一个脚本也有类似的问题。我正在尝试为一家公司的客户上传文档,但由于他们网站的工作方式,我不能利用 send _ key 直接发送路径,所以我不得不依赖 msofileDialogue。

  1. 您只需要安装 AutoIt 在 cmd 屏幕上显示“ pip install-U pyautoit”或者只显示“ pip install-U pyautoit”的 https://pypi.python.org/pypi/pyautoit/0.3

  2. 在脚本页面上输入“ import autoit”

  3. 在脚本中弹出文件对话框之前,键入以下内容:

    Win _ active (“ Open”) Control _ send (“ Open”,“ Edit1”,r“ C: Users uu Desktop TestUpload.txt”) Control _ send (“ Open”、“ Edit1”、“{ ENTER }”)

它将查找打开的文件对话框窗口并填写它,然后按回车键。 “打开”是我的文件对话框屏幕的标题。把你的头衔换成“开放”。还有更多创造性的方式来利用 AutoIt 的功能,但这是一个简单,直接的方式为初学者。

编辑: 不要。如果可以避免的话,不要在大多数情况下使用 control _ send。它有一个众所周知的问题,即发送错误的文本。在我的例子中,文件路径中的冒号被转换为分号。如果需要发送输入键,应该没问题,但是如果需要发送文本,则使用 control _ set _ text。它有相同的语法。

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

下面是我使用的代码:

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 驱动程序下工作。

完整的代码,以实现文件上传使用自动化工具。 你可以只是复制粘贴这一点,你可以运行,它将工作,因为它是一个实时演示。

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()

下面是自动代码的内容:

WinWaitActive("File Upload")
Send("D:\SoftwareTestingMaterial\UploadFile.txt")
Send("{ENTER}")

下载 autoIt 和 autoIt SCITE 编辑器工具。 一旦完成安装自动和打开的网站编辑器和粘贴上述代码,并保存与。Au3扩展名,并保存后,右键单击该文件并选择 Compile script (x64) ,现在。创建 exe 文件。

现在使用以下代码:

os.system("C:\\Users\\mallikar\\Desktop\\screenUpload.exe")

控制诸如 Windows 文件选择器(或一般的操作系统)这样的组件的一种非常简单的方法是使用 pyautogui。可以通过 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')
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.example.org")
def upload_file():
upload_file = driver.find_element_by_id("paste here id of file which
is
enter code here`shown in html code...")


upload_file.send_keys("copy the path of file from your pc with name and
paste here...")

如果吐司消息在几秒钟内消失,您可以使用 chrome 中的 Chropath 扩展找到它的 xpath

这是一个纯 Python 代码。

不要使用 control_send,而是使用 control_set_text来解决发送到窗口的字符串中存在的不一致性。请参考以下链接: https://www.autoitscript.com/forum/topic/85929-incorrect-string-being-sent-via-controlsend/

import autoit


autoit.win_wait_active("Open")
autoit.control_set_text("Open", "Edit1", imgPath)
autoit.send("{ENTER}")

如果 sendkey 函数无法在按钮上工作,请使用 PyAutogui。

示例代码:

import pyautogui
driver.find_element_by_xpath("Enter Xpath of File upload button").click()
time.sleep(4) #waiting for window popup to open
pyautogui.write(r"C:\Users\AmarKumar\FilesForUploading\image.jpg") #path of File
pyautogui.press('enter')

您可以很容易地添加这一行代码来解决这个问题:

driver.find_element_by_xpath("your fullpath").send_keys("C://1.png(your file root")

但是请注意,有时你可能在第一场放错了 xpath。按照以下步骤达到合法的 xpath:

  1. 打开检查,点击你想要的方框 上传文件。
  2. 右键单击 html代码并从复制中选择 xpath完整地址 子菜单。
  3. 在代码中粘贴 xpath字段中的根。

enter image description here

如果您正在使用服务,您将得到一个异常

service = Service('driver_path')
service.start()
driver = webdriver.Remote(service.service_url)
choose_image = driver.find_element(By.ID, 'id')
choose_image.send_keys(os.getcwd()+'/image.jpg')

例外:

selenium.common.exceptions.WebDriverException: Message: unknown command: unknown command: session/$sessionId/se/file

工作代码(建议-使用元素的 id 而不是其他)

driver=webdriver.Chrome(executable_path=driver_path)
choose_image=driver.find_element(By.ID, 'id')
choose_image.send_keys(os.path.join(os.getcwd(), 'image.jpg'))