国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中selenium實現(xiàn)文件上傳所有方法整理總結(jié)

2020-02-23 04:31:45
字體:
供稿:網(wǎng)友

文件上傳是所有UI自動化測試都要面對的一個頭疼問題,今天博主在這里給大家分享下自己處理文件上傳的經(jīng)驗,希望能夠幫助到廣大被文件上傳坑住的seleniumer。

首先,我們要區(qū)分出上傳按鈕的種類,大體上可以分為兩種,一種是input框,另外一種就比較復(fù)雜,通過js、flash等實現(xiàn),標(biāo)簽非input

我們分別對這兩種進行分析:

1.input標(biāo)簽

眾所周知,input標(biāo)簽是可以直接send_keys的,這里也不例外,來看代碼示例:

代碼:

# -*- coding: utf-8 -*-from selenium import webdriverdriver = webdriver.Firefox()driver.get('http://sahitest.com/demo/php/fileUpload.htm')upload = driver.find_element_by_id('file')upload.send_keys('d://baidu.py') # send_keysprint upload.get_attribute('value') # check valuedriver.quit()

結(jié)果:

baidu.py

很明顯,對于input上傳,直接send_keys是最簡單的解決方案。

2.非input型上傳

接下來難度要升級了,對于那些不是input框?qū)崿F(xiàn)的上傳怎么辦,這種上傳千奇百怪,有用a標(biāo)簽的,有用div的,有用button的,有用object的,我們沒有辦法通過直接在網(wǎng)頁上處理掉這些上傳,唯一的辦法就是打開OS彈框,去處理彈框。

問題又來了,OS彈框涉及的層面已經(jīng)不是selenium能解決的了,怎么辦?很簡單,用OS層面的操作去處理唄,到這里我們基本找到了問題的處理方法。

大體上有以下幾種解決方案:

    autoIT,借助外力,我們?nèi)フ{(diào)用其生成的au3或exe文件。 Python pywin32庫,識別對話框句柄,進而操作 SendKeys庫 keybd_event,跟3類似,不過是模擬按鍵,ctrl+a,ctrl+c, ctrl+v…

目前我只知道以上四種辦法,有其他方法的請留言告訴我,讓我學(xué)習(xí)一下。

我們依次看一下:

1. autoIT

關(guān)于autoIT上傳以及參數(shù)化的方法我已經(jīng)在另一篇博文中講過了,請參見selenium之 autoit命令行參數(shù) 。這里不再贅述。

2.win32gui

廢話不多說,上代碼先:

代碼:

# -*- coding: utf-8 -*-from selenium import webdriverimport win32guiimport win32conimport timedr = webdriver.Firefox()dr.get('http://sahitest.com/demo/php/fileUpload.htm')upload = dr.find_element_by_id('file')upload.click()time.sleep(1)# win32guidialog = 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) # 確定按鈕Buttonwin32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, 'd://baidu.py') # 往輸入框輸入絕對地址win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 按buttonprint upload.get_attribute('value')dr.quit()            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 博客| 聂荣县| 双鸭山市| 荥阳市| 兰考县| 伊金霍洛旗| 汉沽区| 建瓯市| 定州市| 湘乡市| 白朗县| 交城县| 庄浪县| 文化| 万年县| 仁怀市| 平安县| 清水县| 北海市| 台前县| 通州区| 屯昌县| 亳州市| 衢州市| 鹤庆县| 汨罗市| 灵武市| 刚察县| 林周县| 达拉特旗| 甘肃省| 北安市| 营口市| 平和县| 呼玛县| 资中县| 垣曲县| 红安县| 丁青县| 靖远县| 青铜峡市|