在web_ui自动化中,经常会碰到要上传文件的功能
一般页面上有两种上传文件方式:
1.直接在页面输入路径
对于这种,只需要通过selenium定位后,直接使用send_keys(文件路径)输入路径即可
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://xxxx")
driver.maximize_window()
# 定位上传文件元素
input_file = driver.find_element_by_id("xxx")
# 上传文件
input_file.send_keys(r"D:\learn\xx.txt")
2.会弹出电脑本地的文件系统,在本地文件中找到文件后,进行传入
对于这种情况,本文章主要就这个问题来进行解决
解决问题的思路:
1.借助第三方工具pyautogui,用程序自动控制鼠标和键盘操作
2.在打开的系统窗口中,借助pyautogui,输入文件路径
3.点击enter,将文件进行上传
pyautogui是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,并且支持多平台(Windows,OS X,Linux)。强烈推荐!
具体操作步骤:
1.安装模块: pip install pyautogui
2.将要上传的文件路径写入到文件名的输入框内;
3.敲回车,相当于点击【打开】按钮,注意回车presses要2次才能生效。
import os
import time
import pyautogui as ui
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(20) # 隐式等待
dir = os.getcwd()
html_dir = os.path.join(dir, 'demo.html')
driver.get(html_dir)
file_elem = driver.find_element_by_name('mfile')
file_elem.click()
# 系统之间要等待
time.sleep(1)
try:
while True:
x,y=ui.position() #返回鼠标的坐标
print('position:(%s,%s)' %(x,y)) #打印坐标
time.sleep(1)
#每隔1s打印一次,并执行清屏
os.system('cls')
expect KeyboardInterrupt:
print('end')
file_dir = os.path.join(dir, 'test.txt') # 要上传的文件路径
# 写入文件
ui.typewrite(file_dir) # 直接调用写入
time.sleep(0.5)
# 输入回车键, presses表示按的次数,按一次不会生效,有可能是执行太快,建议presses=2
ui.press('enter', presses=2)
time.sleep(2)
driver.quit()
注意:在每步操作都要有足够的等待