selenium frame講解和案例

關(guān)鍵字:python3.6 selenium frame Chrome

selenium自動化測試,frame標(biāo)簽有的時候很令人煩惱。frame類似于在原有主html的基礎(chǔ)上又嵌套一個html,而且嵌套的html是獨(dú)立使用,互不影響。frame的方案經(jīng)常發(fā)生在網(wǎng)頁中的導(dǎo)航赎瞎。
如下:

<!DOCTYPE html>

<html lang="en">
<head>
    <title>FrameTest</title>
</head>
<body>
<iframe src="a.html" id="frame1" name="myframe"></iframe>
</body>
</html>

以上的主html里面嵌套了一個iframe標(biāo)簽,也就是里面還有一個a.html颊咬。如果我們需要定位的元素在a.html里面务甥,就需要切換到iframe標(biāo)簽后再去定位。

frame相關(guān)的標(biāo)簽有frameset,frame,iframe三種喳篇。frameset不需要切換敞临,frame和iframe需要切換。切換的方式是swith_to.frame(reference)麸澜。

reference可以傳入id挺尿、name、index以及selenium的WebElement對象炊邦。


case:從路由器配置頁面抓取到wan口的ip地址编矾。
1)登錄

image.png

Chrome F12,查看元素后馁害,可以看到當(dāng)前用戶名輸入框input標(biāo)簽窄俏,有一個name屬性account,同時它的父節(jié)點(diǎn)有一個id屬性是dl_margin。
css選擇器語法是:#dl_margin input[name='account']


image.png

密碼輸入框處理同用戶輸入框碘菜,css選擇器語法是:#dl_margin input[name='password']

登錄按鈕直接根據(jù)id屬性選擇:longin_button


image.png

2)frame切換

image.png

登錄后首頁凹蜈,點(diǎn)擊基本信息后,顯示當(dāng)前wan口的ip地址
image.png

定位到基本信息后忍啸,注意到前面的父節(jié)點(diǎn)有一個html
image.png

切換過去之后仰坦,的確有一個iframe標(biāo)簽。
image.png

但是就這么結(jié)束了嗎计雌?沒有悄晃,再往前看,還有一個html標(biāo)簽凿滤。
image.png

image.png

目前我們觀察的結(jié)果是妈橄,主html嵌套一個main_screen鼠渺,在main_screen又嵌套了一個main_iframe_0。所以我們先從主html切換到main_screen眷细,再從main_screen切換到main_iframe_0。代碼如下:

driver.switch_to.frame('main_screen')
time.sleep(2) #不加延遲鹃祖,會概率性切換不過去
driver.switch_to.frame('main_iframe_0')

3)元素定位

image.png

基本信息的元素溪椎,onclick屬性包含“arrMaintain”。但是如果這樣定位恬口,會有兩個元素校读,一個是“基本信息”,另一個是“流量統(tǒng)計(jì)”祖能∏革可以根據(jù)元素的文本二次判斷。代碼如下:

eles=driver.find_elements_by_css_selector("a[onclick*='arrMaintain']")
for ele in eles:
   if '基本信息'in ele.text:
       ele.click()
       break

定位到基本信息后养铸,點(diǎn)擊雁芙。
4)再次frame處理
本以為點(diǎn)擊后,繼續(xù)查找ip元素即可钞螟。但是不料竟然需要重新切換frame兔甘。就好像點(diǎn)擊基本元素后,整個driver刷新了一樣鳞滨,這塊是重點(diǎn)洞焙。(如果已經(jīng)切換過frame,driver對象刷新后拯啦,需要重新切換frame澡匪,有興趣的同學(xué)可以試下)

#點(diǎn)擊后,又回到主html
driver.switch_to.frame('main_screen')
time.sleep(2)
driver.switch_to.frame('main_iframe_0')

5)ip元素定位

image.png

ip元素父元素有一個div元素褒链,id是wan_info唁情。而且ip是tbody下第5個tr,當(dāng)前tr下面的第3個td碱蒙。
css選擇器語法是#wan_info tr:nth-of-type(5) td:nth-of-type(3)
代碼如下:

ip=driver.find_element_by_css_selector('#wan_info tr:nth-of-type(5) td:nth-of-type(3)').text

終于大功告成荠瘪,通過本次實(shí)踐,frame需要注意如下:
1.定位到當(dāng)前元素赛惩,多找找父節(jié)點(diǎn)哀墓,有沒有html標(biāo)簽,再找找有無frame和iframe標(biāo)簽喷兼。
2.連續(xù)frame切換篮绰,如果偶發(fā)性報(bào)錯,可以加入延遲試試季惯。
3.無法定位元素時吠各,如果保證之前已經(jīng)切換過frame臀突,考慮是否需要再次切換frame。

匯總代碼如下:(關(guān)鍵信息使用xxxxxx表示)

from selenium import webdriver
import  time
driver=webdriver.Chrome(r'D:\webdriver\chromedriver.exe')
driver.get('xxxxxxxxxxxxxxxxxxxxx')
driver.implicitly_wait(10)
#router login
driver.find_element_by_css_selector("#dl_margin input[name='account']").send_keys('xxxxx')
driver.find_element_by_css_selector("#dl_margin input[name='password']").send_keys('xxxxx')
driver.find_element_by_id('longin_button').click()

#get ip
driver.switch_to.frame('main_screen')
time.sleep(2)
driver.switch_to.frame('main_iframe_0')
eles=driver.find_elements_by_css_selector("a[onclick*='arrMaintain']")
for ele in eles:
    if '基本信息'in ele.text:
        ele.click()
        break
time.sleep(2)


#點(diǎn)擊后贾漏,又回到主html
driver.switch_to.frame('main_screen')
time.sleep(2)
driver.switch_to.frame('main_iframe_0')

ip=driver.find_element_by_css_selector('#wan_info tr:nth-of-type(5) td:nth-of-type(3)').text
print(f"當(dāng)前wan口ip是:{ip}")
driver.quit()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末候学,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纵散,更是在濱河造成了極大的恐慌梳码,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伍掀,死亡現(xiàn)場離奇詭異掰茶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蜜笤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門濒蒋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人把兔,你說我怎么就攤上這事沪伙。” “怎么了县好?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵焰坪,是天一觀的道長。 經(jīng)常有香客問我聘惦,道長某饰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任善绎,我火速辦了婚禮黔漂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禀酱。我一直安慰自己炬守,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布剂跟。 她就那樣靜靜地躺著减途,像睡著了一般。 火紅的嫁衣襯著肌膚如雪曹洽。 梳的紋絲不亂的頭發(fā)上鳍置,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機(jī)與錄音送淆,去河邊找鬼税产。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辟拷。 我是一名探鬼主播撞羽,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衫冻!你這毒婦竟也來了诀紊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤隅俘,失蹤者是張志新(化名)和其女友劉穎渡紫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體考赛,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年莉测,在試婚紗的時候發(fā)現(xiàn)自己被綠了颜骤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捣卤,死狀恐怖忍抽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情董朝,我是刑警寧澤鸠项,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站子姜,受9級特大地震影響祟绊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哥捕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一牧抽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遥赚,春花似錦扬舒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至愧薛,卻和暖如春晨炕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毫炉。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工府瞄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓遵馆,卻偏偏與公主長得像鲸郊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子货邓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

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

  • 1秆撮、頁面渲染的步驟是什么? 具體分為5步:(1)HTML解析出DOM樹(2)CSS解析出style樣式表(3)將兩...
    貓熊貓熊閱讀 531評論 0 0
  • 廈門藝術(shù)張業(yè)鴻《世界盡頭協(xié)會》展覽進(jìn)行中 奧永廣場AYOUNGPLAZA位于廈門市體育路88號换况,始終以“一座有溫度...
    e0cbc64add1b閱讀 128評論 0 0
  • 知道自己對這段繽紛多彩而又刻骨銘心的生涯缺少一份交代职辨,卻遲遲不肯付諸文字。這些天忙于各種學(xué)前差事的應(yīng)付戈二,心里總斷斷...
    zijing0709閱讀 207評論 0 0
  • anchikou閱讀 118評論 0 0
  • 身無長物而孑然一身舒裤,倦鳥歸途而英雄遲暮。鑄劍無魂而鋒芒未露觉吭,歲月蹉跎而春光不復(fù)腾供。夕陽西下而心已倦顧,四海飄零而此身...
    竇力行閱讀 258評論 0 2