Python+Seleium+Autolt實(shí)現(xiàn)自動化上傳單個文件

在給web頁面做自動化的時候蔫骂,文件上傳是很常見的操作,例如基本的用戶頭像上傳或者一些涉及到文件傳輸和儲存的地方都需要先進(jìn)行上傳文件的操作,那么惨奕,該如何通過selenium完成文件上傳自動化的實(shí)現(xiàn)呢?

首先馆匿,我們從研發(fā)角度來看一下抑胎,目前實(shí)現(xiàn)文件上傳的幾種方式:

1.利用<input type="file"/>標(biāo)簽實(shí)現(xiàn)的畢竟傳統(tǒng)的上傳方式;

2.利用js+flash或Ajax等插件進(jìn)行上傳甜熔;

基于上面的兩種類別的研發(fā)方式圆恤,selenium也有兩種方式去實(shí)現(xiàn)自動化測試:

send_keys()自動化上傳

簡單的input標(biāo)簽上傳方式要使用自動化上傳不難,先定位到上傳按鈕腔稀,然后send_keys把路徑作為值給傳進(jìn)去就好了盆昙。

例如我們找到那個控制上傳的input標(biāo)簽,例如<input type="file" name="upload">這樣的焊虏,然后對這個按鈕進(jìn)行定位再傳路徑:

driver.find_element_by_name("upload").send_keys('D:\filename.txt')

這種方式很簡單淡喜,只要有input標(biāo)簽一般都可以通過這種方式簡單的一條語句就可以實(shí)現(xiàn)。

Selenium+Autolt實(shí)現(xiàn)文件上傳

有的時候當(dāng)我們發(fā)現(xiàn)網(wǎng)頁實(shí)現(xiàn)上傳的方式比較復(fù)雜诵闭,不能夠通過send_keys()去傳路徑實(shí)現(xiàn)炼团,就可以用到Autolt插件去結(jié)合selenium一起來實(shí)現(xiàn)文件的自動上傳了。

首先在在官網(wǎng)下載Autolt進(jìn)行安裝疏尿,安裝后在win菜單欄下可以看到這個目錄:


25181835-37F4-46e2-8081-18B5F7E0CB07.png

這里面主要包含了這幾個組件瘟芝,我們先了解一下作用:

AutoIt Windows Info 用于識別Windows控件信息

SciTE Script Editor 用于編寫Autolt腳本

Run Script 用于執(zhí)行Autolt腳本

Compile Script to.exe 用于將Autolt腳本文件轉(zhuǎn)化為exe執(zhí)行文件

接下來就要開始實(shí)現(xiàn)自動上傳腳本的編寫了:

1.打開要實(shí)現(xiàn)自動上傳的網(wǎng)頁,點(diǎn)開上傳的按鈕褥琐,待出現(xiàn)選擇文件的windows窗口后锌俱,打開Autolt Windows Info,拖動那個“小風(fēng)扇”至文件名輸入框中敌呈,得到窗口標(biāo)題Title為 文件上傳贸宏,窗口標(biāo)題Class為 #32770,同時得到文件名輸入框的類型為 Edit磕洪,Instance為 1吭练。

20180824145913537.png

2.還是這個操作,把“小風(fēng)扇”拖動到打開按鈕上析显,得到打開按鈕的類型為 Button鲫咽,Instance為 1。需要注意的是谷异,這兩步操作抓取的這幾個屬性是和瀏覽器相關(guān)的浑侥,不同瀏覽器獲取到的窗口標(biāo)題不同,我這里用的是火狐瀏覽器晰绎,標(biāo)題是文件上傳寓落,谷歌的是打開,ie也不一樣荞下,具體要以Autolt Windows Info抓取到的值為準(zhǔn)伶选。


2111111111813.png

3.總結(jié)一下上面獲取到的幾個有用屬性:

title: 文件上傳

title_class: #32770

文件名輸入框的ClassnameNN(類型+Instance): Edit1(類型+Instance)

打開按鈕的ClassnameNN(類型+Instance): Button1

4.打開SciTE Script Editor史飞,開始編寫Autolt腳本:


ControlFocus("文件上傳","","Edit1");
WinWait("[CLASS:#32770]","",10)
ControlSetText("文件上傳","","Edit1","D:\picture.PNG");
Sleep(2000);
ControlClick("文件上傳","","Button1");

(* ̄(oo) ̄)諾是chrome瀏覽器則是:‘打開’ 而不是 ‘文件上傳’

ControlFocus()方法用于識別Window窗口。WinWait()設(shè)置10秒鐘用于等待窗口的顯示仰税,其用法與WebDriver所提供的implicitly_wait()類似构资。ControlSetText()用于向“文件名”輸入框內(nèi)輸入本地文件的路徑。這里的 Sleep()方法與 Python 中 time 模塊提供的 Sleep()方法用法一樣陨簇,不過它是以毫秒為單位吐绵,Sleep(2000)表示固定休眠 2000 毫秒。ControlClick()用于點(diǎn)擊上傳窗口中的“打開”按鈕河绽。這是我的腳本己单,涉及到上面的幾個屬性的地方都需要填寫自己獲取的,直接復(fù)制粘貼可是跑不通的哦~

寫好之后耙饰,點(diǎn)擊文件上傳的按鈕纹笼,在出現(xiàn)Windows的文件選擇窗口后,在菜單欄中點(diǎn)擊Tools -> Go苟跪,試運(yùn)行一下廷痘,能夠成功沒有報(bào)錯就可以保存了(保存為.au3格式)。

5.打開Compile Script to.exe件已,選擇之前保存好的au3格式的文件笋额,再為即將生成的.exe文件選擇好保存路徑,點(diǎn)擊Convert生成就好了篷扩。


222222226.png

6.最后一步就是通過selenium調(diào)用這個生成好的exe文件去執(zhí)行自動上傳啦鳞陨。定位到上傳按鈕,然后.click()進(jìn)行點(diǎn)擊瞻惋,接下來就是調(diào)用了,具體語句如下:

import os
upload = driver.find_element_by_xpath("http://div[@id='picker']/div[2]/label")
upload.click()
os.system("C:\\Users\admin\Desktop\Autolt3\ptest.exe")

這樣就完成了文件的自動上傳功能~

從這個例子來看援岩,我們在autolt腳本中寫入了具體要上傳的文件的路徑:"D:\picture.PNG"歼狼,所以在執(zhí)行自動上傳的時候自然就是自動上傳這一個文件,如果需要執(zhí)行批量上傳該如何操作呢享怀?感興趣的可以先自己查資料思考一下羽峰,我會在下篇博客展示具體方法。

轉(zhuǎn)自https://blog.csdn.net/qq_32897143/article/details/82014603

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末添瓷,一起剝皮案震驚了整個濱河市梅屉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳞贷,老刑警劉巖坯汤,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搀愧,居然都是意外死亡惰聂,警方通過查閱死者的電腦和手機(jī)疆偿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搓幌,“玉大人杆故,你說我怎么就攤上這事「瘸睿” “怎么了处铛?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拐揭。 經(jīng)常有香客問我撤蟆,道長,這世上最難降的妖魔是什么投队? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任枫疆,我火速辦了婚禮,結(jié)果婚禮上敷鸦,老公的妹妹穿的比我還像新娘息楔。我一直安慰自己,他們只是感情好扒披,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布值依。 她就那樣靜靜地躺著,像睡著了一般碟案。 火紅的嫁衣襯著肌膚如雪愿险。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天价说,我揣著相機(jī)與錄音辆亏,去河邊找鬼。 笑死鳖目,一個胖子當(dāng)著我的面吹牛扮叨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播领迈,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼彻磁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狸捅?” 一聲冷哼從身側(cè)響起衷蜓,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尘喝,沒想到半個月后磁浇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朽褪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年扯夭,在試婚紗的時候發(fā)現(xiàn)自己被綠了鳍贾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡交洗,死狀恐怖骑科,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情构拳,我是刑警寧澤咆爽,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站置森,受9級特大地震影響斗埂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凫海,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一呛凶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧行贪,春花似錦漾稀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啰脚,卻和暖如春殷蛇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背橄浓。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工粒梦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荸实。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓匀们,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泪勒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359