1. 程式人生 > >Python+selenuim 自動化測試 檔案上傳

Python+selenuim 自動化測試 檔案上傳

轉自:https://blog.csdn.net/huilan_same/article/details/52439546

測試上傳檔案功能時,彈出檔案選擇框來選擇正確的檔案上傳。本次用到的頁面由於沒有注意上傳按鈕的標籤是input,因此查了大量關於非input上傳的材料,在這裡做個記錄。

1.有input標籤

這種比較簡單,定位到元素後,直接sendkeys,輸入要上傳檔案的絕對地址。

driver.find_element_by_xpath('/html/body/form/table/tbody/tr[1]/td[2]/input[1]').send_keys('E:\匯入格式 -優先.xlsx')

2.非input標籤

這種情況沒有辦法在網頁來操作檔案,只能通過os彈窗來處理,最常用的第三方工具是autoIT,藉助外力。還有一種方法可以直接安裝Python pywin32庫,識別對話方塊控制代碼。個人覺得最好還是直接還是不靠第三方軟體,因此選擇安裝pywin32.

dialog = win32gui.FindWindow('#32770',u'開啟')
ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None)
ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None)
Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)  # 上面三句依次尋找物件,直到找到輸入框Edit物件的控制代碼
button = win32gui.FindWindowEx(dialog, 0, 'Button', None)  # 確定按鈕Button
win32gui.SendMessage(Edit, win32con.WM_SETTEXT, 0, r'E:\匯入格式 -優先.xlsx')  # 往輸入框輸入絕對地址
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 按button

這裡需要一個小工具,spy++,百度搜索下載。

使用方法,點選望遠鏡圖示,,然後拖拽到要操作的視窗,查詢對應元素。

拓展:

簡單介紹幾個用到的:

win32gui.FindWindow(lpClassName=None, lpWindowName=None):

自頂層視窗開始尋找匹配條件的視窗,並返回這個視窗的控制代碼。
lpClassName:類名,在Spy++裡能夠看到
lpWindowName:視窗名,標題欄上能看到的名字
程式碼示例裡我們用來尋找上傳視窗,你可以只用其中的一個,用classname定位容易被其他東西干擾,用windowname定位不穩定,不同的上傳對話方塊可能window_name不同,怎麼定位取決於你的情況。
win32gui.FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=None)

搜尋類名和窗體名匹配的窗體,並返回這個窗體的控制代碼。找不到就返回0。
hwndParent:若不為0,則搜尋控制代碼為hwndParent窗體的子窗體。
hwndChildAfter:若不為0,則按照z-index的順序從hwndChildAfter向後開始搜尋子窗體,否則從第一個子窗體開始搜尋。
lpClassName:字元型,是窗體的類名,這個可以在Spy++裡找到。
lpWindowName:字元型,是視窗名,也就是標題欄上你能看見的那個標題。
程式碼示例裡我們用來層層尋找輸入框和尋找確定按鈕
win32gui.SendMessage(hWnd, Msg, wParam, lParam)

hWnd:整型,接收訊息的窗體控制代碼
Msg:整型,要傳送的訊息,這些訊息都是windows預先定義好的,可以參見系統定義訊息(System-Defined Messages)
wParam:整型,訊息的wParam引數
lParam:整型,訊息的lParam引數
程式碼示例裡我們用來向輸入框輸入檔案地址以及點選確定按鈕