python自動(dòng)化測試應(yīng)用-第7篇(WEB測試)--Selenium進(jìn)階篇

1.1概要

大家好收壕!我是lamecho(辣么丑),本篇文章將是我們介紹selenium使用的最后一篇進(jìn)階篇竖伯,會(huì)給大家?guī)硪恍└韶泿椭蠹夷軌蛱幚碓趯?shí)戰(zhàn)中碰到的實(shí)際問題蜡镶。

1.2

selenium繼續(xù)實(shí)戰(zhàn)百度頁面

我們繼續(xù)以百度作為實(shí)戰(zhàn)的對(duì)象。通過上一篇的講解械巡,我們大概知道了網(wǎng)頁元素的基本知識(shí)和對(duì)一些常見元素類型的操作刹淌,比如按鈕,input輸入框讥耗,鏈接等其實(shí)只要大家仔細(xì)分析它的tagname(標(biāo)簽)就能很快的找到并進(jìn)行輸入或點(diǎn)擊操作有勾。那么今天我將進(jìn)一步講解有關(guān)網(wǎng)頁或是瀏覽器的一些操作。比如接下來我們介紹的第一個(gè)新類型Select選擇條古程。

1.Select和option選項(xiàng)

在頁面如果碰到彈出的下拉選項(xiàng)該如何操作蔼卡,如下圖百度主頁的搜索設(shè)置中的紅框位置。

我們首先看看它的頁面源碼

# -*-encoding:utf-8 -*-

from selenium import webdriver

from selenium.webdriver.support.select import

Select

from selenium.webdriver.common.action_chains

import ActionChains

browser=webdriver.Firefox()

browser.maximize_window()

browser.get("https://www.baidu.com/")

browser.implicitly_wait(10)

el=browser.find_element_by_link_text(u'設(shè)置')

ActionChains(browser).move_to_element(el).release().perform()

browser.implicitly_wait(10)

browser.find_element_by_link_text(u'搜索設(shè)置').click()

browser.implicitly_wait(10)

sel=browser.find_element_by_id('nr')

Select(sel).select_by_value('50')

sleep(2)

Select(sel).select_by_index(1)

sleep(10)

browser.quit()

這里主要分析最后幾行腳本挣磨,在開始我們首先要導(dǎo)入Select模塊

from selenium.webdriver.support.select import

Select

sel=browser.find_element_by_id('nr')

#通過id將找到的select賦值給sel

Select(sel).select_by_value('50')

#用Select(sel)轉(zhuǎn)化sel為Select雇逞,然后就可以用Select的方法去做選擇荤懂。常用的方法有兩個(gè)select_by_value和select_by_index。這里要注意value值是標(biāo)簽里的value值不是text喝峦,index下標(biāo)從0開始計(jì)數(shù)势誊。

sleep(2)

Select(sel).select_by_index(1)

2.執(zhí)行腳本命令

有時(shí)候selenium提供給我們的方法不足以完成一些復(fù)雜的操作,這時(shí)候我們可以借助腳本命令去在頁面上完成相應(yīng)的動(dòng)作谣蠢。比如說怎么操作瀏覽器的滾動(dòng)條操作頁面上劃下劃呢粟耻?

我們先來看看腳本執(zhí)行的方法是怎么寫的

js='window.scrollTo(0,document.body.scrollHeight);'#下劃到頁面底部

browser.execute_script(js)

我們要執(zhí)行的js語句放到execute_script里就可以了,這里只是有關(guān)腳本的一個(gè)應(yīng)用展示眉踱,其實(shí)通過腳本命令我們還可以干很多事情挤忙。這里就要大家去多了解一些javascript相關(guān)的一些知識(shí)。比如

‘var

obj=document.getElementsByTagName_r(\"a\");return

obj[3].text=500;’

將找到的a標(biāo)簽的text值修改成500谈喳,那么最后網(wǎng)頁上對(duì)應(yīng)的這個(gè)元素的text值會(huì)變成500册烈。還有這樣js="return

document.readyState",將會(huì)返回當(dāng)前網(wǎng)頁的加載情況婿禽,依據(jù)腳本執(zhí)行的返回值赏僧,我們可以判斷頁面是否加載完成。

3.iframe標(biāo)簽

當(dāng)我們遇到這樣的標(biāo)簽時(shí)扭倾,該怎么辦呢淀零?它類似與頁面內(nèi)嵌了一個(gè)頁面,可以從上面的截圖查看到這是百度地圖的頁面源碼膛壹,在iframe框架中包含的是一個(gè)完整的html頁面驾中,這時(shí)我們要去在嵌套的框架頁面上定位操作元素,其實(shí)也非常簡單模聋,我們只要將browser切換到這個(gè)框架頁面中去就可以了肩民,使用語句browser.switch_to.frame(frame_ID)

frame_ID獲取可以在元素iframe中的源碼中獲取它的id(在selenium的API介紹中可以通過id和name獲取到iframe,但是實(shí)際當(dāng)中name屬性并不好用)。當(dāng)我們在frame中操作完成后链方,要繼續(xù)在原頁面執(zhí)行的話持痰,需要使用語句

browser.switch_to_default_content()

也就是再切換回原頁面內(nèi)容。這里再說一種情況祟蚀,如果我們遇到iframe框架的id是動(dòng)態(tài)的共啃,也就是每次頁面加載都會(huì)動(dòng)態(tài)指定id,我們可以在python中這樣處理:

frame_ID=browser.find_element_by_tag_name('iframe').get_attribute('id')

browser.switch_to.frame(frame_ID)

這樣寫就不需要考慮iframe框架的id問題暂题,因?yàn)槲覀円彩莿?dòng)態(tài)獲取當(dāng)前頁面的id值移剪。

4.讓頁面執(zhí)行鍵盤操作ActionChains

首先我們要導(dǎo)入一些新的包

from selenium.webdriver.common.action_chains importActionChains

from selenium.webdriver.common.keys import Keys

同樣的在百度搜索框中輸入,最后操作鍵盤的回車進(jìn)行檢索薪者。

browser.implicitly_wait(10)

el=browser.find_element_by_id('kw')

ActionChains(browser).send_keys_to_element(el,'lamecho').key_down(Keys.ENTER).key_up(Keys.ENTER).perform()

主要看最后一行send_keys_to_element(el,'lamecho')向el元素中輸入字符纵苛,緊接著key_down和key_up就是操作按下彈起Keys.ENTER(回車)。這樣寫是不是很方便,一行搞定幾個(gè)動(dòng)作攻人。另外它也可以實(shí)現(xiàn)組合鍵的操作取试,只要我們將按鍵的key_down,key_up順序?qū)憣?duì)就ok了怀吻。

5.瀏覽器的新標(biāo)簽

目前瀏覽器都會(huì)支持在一個(gè)窗口中打開多個(gè)頁面瞬浓,也就是我們常說的標(biāo)簽頁。那么當(dāng)我們在執(zhí)行操作時(shí)蓬坡,新的頁面是在新的標(biāo)簽頁中打開的猿棉,我們要怎么樣去在新的頁面中執(zhí)行元素的查找呢?曾經(jīng)在網(wǎng)絡(luò)上看到過有網(wǎng)友是通過鍵盤的物理按鍵Ctrl+tab去切換到新標(biāo)簽屑咳,誠然我們看到頁面是做了切換萨赁,但是這樣我們是無法繼續(xù)在這個(gè)新頁面去做元素查找的,因?yàn)槲覀兊腷rowser還是在原頁面兆龙,這個(gè)和frame切換一個(gè)道理杖爽。只有將我們的browser切換到新新頁面,才能繼續(xù)在新的頁面里去查找元素紫皇。我們看在python腳本中怎么去做這樣的操作慰安。

browser.implicitly_wait(10)

browser.find_element_by_id('TANGRAM__PSP_8__userName').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__password').send_keys('test')

#browser.find_element_by_id('TANGRAM__PSP_8__submit').click()

browser.find_element_by_link_text(u'立即注冊').click()

while 1:

h=browser.window_handles

iflen(h)==2:

name=h[1]

break

sleep(1)

browser.switch_to_window(name)

browser.implicitly_wait(10)

browser.find_element_by_id('TANGRAM__PSP_3__verifyCode').send_keys('1234')

繼續(xù)我們百度頁面的實(shí)戰(zhàn),當(dāng)我們打開登錄框后聪铺,我們最后一步是點(diǎn)擊的“登錄”按鍵化焕,我們將其注釋掉,改成點(diǎn)擊“立即注冊”按鍵计寇。實(shí)際執(zhí)行是百度頁面是在新的標(biāo)簽頁面中打開的注冊頁面,接著往下看我們的腳本脂倦,使用到了循環(huán)去執(zhí)行browser.window_handles番宁,去查找瀏覽器窗口的handle,當(dāng)新的標(biāo)簽打開后自然我們的窗口會(huì)變成兩個(gè)赖阻,它的長度自然也就會(huì)等于2蝶押,跳出循環(huán),然后我們再通過browser.switch_to_window(name)火欧,將我們的browser切換到新頁面中繼續(xù)我們的元素查找工作棋电。大家執(zhí)行一下效果是不是最后在校驗(yàn)碼的input中輸入了1234。

1.3進(jìn)階篇—結(jié)束

Selenium的進(jìn)階篇終于完稿了苇侵,其實(shí)也就是講述了實(shí)際項(xiàng)目中碰到的一點(diǎn)棘手問題赶盔,操作稍微復(fù)雜一些而已。而我在文章中所能涉及的內(nèi)容其實(shí)在selenium的使用上所能涵蓋的十之只有一二榆浓,大家要多多練習(xí)于未,共勉。

感謝大家耐心讀完,我是lamecho辣么丑烘浦。

原創(chuàng)文章抖坪,轉(zhuǎn)載請注明出處。新浪微博搜索“lamecho好棒” 歡迎大家來撩闷叉。

微博:https://weibo.com/u/6017986584

博客:http://blog.sina.com.cn/u/6017986584

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擦俐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子握侧,更是在濱河造成了極大的恐慌蚯瞧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藕咏,死亡現(xiàn)場離奇詭異状知,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)孽查,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門饥悴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盲再,你說我怎么就攤上這事西设。” “怎么了答朋?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵贷揽,是天一觀的道長。 經(jīng)常有香客問我梦碗,道長禽绪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任洪规,我火速辦了婚禮印屁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斩例。我一直安慰自己雄人,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布念赶。 她就那樣靜靜地躺著础钠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叉谜。 梳的紋絲不亂的頭發(fā)上旗吁,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音停局,去河邊找鬼阵漏。 笑死驻民,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的履怯。 我是一名探鬼主播回还,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叹洲!你這毒婦竟也來了柠硕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤运提,失蹤者是張志新(化名)和其女友劉穎蝗柔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體民泵,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡癣丧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栈妆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胁编。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鳞尔,靈堂內(nèi)的尸體忽然破棺而出嬉橙,到底是詐尸還是另有隱情,我是刑警寧澤寥假,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布市框,位于F島的核電站,受9級(jí)特大地震影響糕韧,放射性物質(zhì)發(fā)生泄漏枫振。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一萤彩、第九天 我趴在偏房一處隱蔽的房頂上張望粪滤。 院中可真熱鬧,春花似錦乒疏、人聲如沸额衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至县踢,卻和暖如春转绷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硼啤。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工议经, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓煞肾,卻偏偏與公主長得像咧织,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子籍救,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容