1. 程式人生 > >selenium通過send_keys方法上傳檔案

selenium通過send_keys方法上傳檔案

測試專案中遇到上傳檔案時開啟windows視窗的問題,為了定位windows視窗,引入了pywin32.

如果利用pywin32需要import win32gui,win32con,win32api,還有比較難懂的程式碼,如下:

handle=win32gui.FindWindow("#32770","開啟")
ComboBoxEx32 = win32gui.FindWindowEx(handle,0,'ComboBoxEx32',None) 
ComboBox = win32gui.FindWindowEx(ComboBoxEx32,0,'ComboBox',None)
Edit = win32gui.FindWindowEx(ComboBox,0,'Edit',None)  # 上面三句依次尋找物件,直到找到輸入框Edit物件的控制代碼
button = win32gui.FindWindowEx(handle,0,'Button',None)  # 確定按鈕B

file_path = 'C:\\Users\\Administrator\\Desktop\\file.txt'

win32gui.SendMessage(Edit,win32con.WM_SETTEXT,None,file_path)  # 往輸入框輸入絕對地址
time.sleep(3)
win32gui.SendMessage(handle,win32con.WM_COMMAND,1,button)

在學習程式碼的過程中,發現上傳檔案方法完全可以簡化為一行程式碼。需要找到上傳檔案對應的input元素,然後使用send_keys()方法進行上傳。

以163郵箱中的“新增附件”功能為例

#coding=utf-8
from selenium import webdriver
from time import sleep

driver=webdriver.Chrome()
sleep(3)

url = "https://mail.163.com/"
driver.get(url)

sleep(3)
iframe=driver.find_element_by_xpath("//div[@id='normalLoginTab']/div[@class='loginWrap']/div[@id='loginDiv']/iframe")
driver.switch_to_frame(iframe)

driver.find_element_by_name("email").click()
driver.find_element_by_name("email").send_keys("emailaddrl")

driver.find_element_by_name("password").click()
driver.find_element_by_name("password").send_keys("password")

driver.find_element_by_id("dologin").click()

sleep(3)

#定位'寫信'按鈕
driver.find_element_by_xpath("//div[@id='dvNavTop']/ul[@id='_mail_component_55_55']/li[@id='_mail_component_59_59']/span[@class='oz0']").click()

#新增附件
file_path="C:\\Users\\Administrator\\Desktop\\2018-11-20_1.jpg"
driver.find_element_by_xpath("//div[@class='by0']//input[@class='O0']").send_keys(file_path)