UI文件上传
1、文件上传:文件上传是自动化中比较麻烦棘手的部分。
有些场景我们需要上传本地文件到项目里。这种比较麻烦,因为需要点开文件上传的窗口后,打开的是windows的文件选择窗口,
而selenium是无法操作这个窗口的。 selenium只能操作html网页。
针对这种上传文件的场景,我们分两种情况来处理:
场景1、上传文件的元素是是input标签 ,并且type属性为file的情况下:
这种比较方便,直接send_keys这个文件的路径就可以了。
场景2、 不是input输入框,点击弹出系统的选择文件的窗口这种 需要借助第三方库实现:- PC 应用程序自动化工
具
通过系统工具实现自动化测试:windows系统自动化测试工具 :pyautogui,AutoIT,Pywinauto。
Pywinauto:只支持windows,Mac和linux不支持,而且不稳定,支持多文件上传,兼容性问题较多;
AutoIT: 兼容性好,并且更加稳定。跨平台支持,但是操作略微麻烦。
pyautogui:跨平台支持:windows、linux、mac,只支持单文件上传,操作也比较简单。
第三方库: pip install pyautogui
通过系统工具实现自动化测试的缺点:
1、不太稳定,兼容性比较差
2、不能同时以其他的任务在执行 – 上传的时候过程 鼠标不能操作
所以尽量优先用send_keys 不能用 再用系统工具。【input】
# input
import timefrom selenium.webdriver.support.ui import Select
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///D:/Project/python_ui01/upload_demo.html')
# 先找到下拉框的元素
ele = driver.find_element(By.ID,"fu")
ele.send_keys(r"D:\download\de6aa5a1745e84de4d43f15ab284b3ca.jpg")
time.sleep(3)
driver.quit()
# 非input
"""
我们学习pyautogui工具,使用的步骤:
* 1)在打开对话框中填写要上传的文件路径: pyautogui.write(r'D:\fk88.png') ,选择要上传的文件 【write不支持中文】
* 2)点击打开按钮-按下回车按钮:pyautogui.press('enter', presses=2) ,库可能有bug,所以尽量点击2次 确保万无一失* 注意:默认文件路径不能有中文: 有中文 直接使用会报错。* 支持中文的做法:先去复制路径->粘贴;
* 但是pyautogui不支持复制操作,所以需要借助 另外一个库:pyperclip,内置库 直接导入即可 :import pyperclip
* 通过热键粘贴路径
* 然后再点击回车按钮确认上传"""
import pyautogui
import pyperclip
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By# 百度案例
driver = webdriver.Chrome()
driver.get('https://caesium.app/')
driver.maximize_window()
#点击浏览按钮 打开windows窗口
driver.find_element(By.XPATH,'//button[contains(text(),"浏览")]').click()
sleep(2)
# 确认上传的窗口弹出来之后 再复制文件路径 最好加一个等待操作#使用pyautogui工具进行write press
# # 第一步: write
pyautogui.write(r"D:\download\de6aa5a1745e84de4d43f15ab284b3ca.jpg")
# # 第二步: 点击打开按钮-按下回车按钮
pyautogui.press('enter', presses=2)
sleep(4)
driver.quit()