web自動(dòng)化(三)

多Frame框處理

在一個(gè)頁(yè)面中可以嵌套另外一個(gè)頁(yè)面,如frame/iframe技術(shù),這是現(xiàn)在很多web應(yīng)用中使用的一種方式,webdriver對(duì)象只能在一個(gè)頁(yè)面(外層是默認(rèn)的)中定位元素,需要一種方式將driver對(duì)象從外層切換給內(nèi)層使用才能對(duì)內(nèi)層的對(duì)象進(jìn)行處理。

webdriver中提供API:driver.switch_to.frame()實(shí)現(xiàn)

1)切入Frame

第一種方式,默認(rèn)是可以給ID或者name的

?? driver.switch_to.frame("login_frame")

第二種方式,可以傳參iframe的元素對(duì)象

?? iframeObj = driver.find_element_by_xpath('//*[@id="login_frame"]')

?? driver.switch_to.frame(iframeObj)

# 切換到目標(biāo)元素所在的frame

dr.switch_to.frame("iframeResult")

2)從Frame切入到主體

dr.switch_to.default_content()

警告框處理

警告框-alter,是一個(gè)模式框,該怎么使用代碼的方式去操作他?

1、driver對(duì)象不在alter上,并且我們沒辦法去定位這個(gè)窗口的元素

2、driver.switch_to.alert:暫時(shí)將瀏覽器對(duì)象driver交給alert用

3、可以對(duì)alter警告框作什么事情:

? ? ?? text:返回(獲?。?alert/confirm/prompt 中的文字信息。

? ? ?? accept():接受現(xiàn)有警告框,就是點(diǎn)他的確定按鈕

? ? ?? dismiss():放棄現(xiàn)有警告框,取消

? ? ?? send_keys(keysToSend):發(fā)送文本至警告框。

元素等待

如今很多web都在使用AJAX技術(shù),運(yùn)用這種技術(shù)的軟件當(dāng)瀏覽器加載頁(yè)面時(shí),頁(yè)面上的元素可能不會(huì)被同步加載完成,如此一來(lái),定位元素時(shí)就會(huì)出現(xiàn)困難。我們可以通過設(shè)置元素等待來(lái)改善這類問題導(dǎo)致的測(cè)試腳本不穩(wěn)定

WebDriver提供了三種種元素等待方式:

1、強(qiáng)制等待:

time.sleep(5),單位是s,休眠,就是直接讓線程休眠,這幾秒啥事也不用干

2、隱式等待:

? 在腳本創(chuàng)建driver對(duì)象之后,給driver設(shè)置一個(gè)全局的等待時(shí)間,對(duì)driver的整個(gè)生命周期(創(chuàng)建到關(guān)閉)都起效。如果在設(shè)置等待時(shí)間(超時(shí)時(shí)間)內(nèi),定位到了頁(yè)面元素,則不再等待,繼續(xù)執(zhí)行下面的代碼如果超出了等待時(shí)間,則拋出異常

? ? driver.implicity_wait(10)

? ? 注意:在使用隱式等待的時(shí)候,實(shí)際上瀏覽器會(huì)在你自己設(shè)定的時(shí)間內(nèi)部不斷的刷新頁(yè)面去尋找我們需要

? ? ? ? ? ? 要求在后續(xù)寫代碼的時(shí)候,全部都要加上這句話

3、顯式等待:

? 顯示等待,就是明確的要等到某個(gè)元素的出現(xiàn)或者是某個(gè)元素的可點(diǎn)擊等條件,等不到,就一直等,除非在規(guī)定的時(shí)間之內(nèi)都沒找到,那么就拋出Exception。(簡(jiǎn)而言之,就是直到元素出現(xiàn)才去操作,如果超時(shí)則報(bào)異常)

需要特別關(guān)注某一個(gè)元素的加載問題,才需要使用涉及到的方法:

#構(gòu)造一個(gè)WebDriverWait的一個(gè)對(duì)象

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

參數(shù)說(shuō)明:

driver:瀏覽器驅(qū)動(dòng)

timeout:最長(zhǎng)超時(shí)時(shí)間,默認(rèn)以秒為單位

poll_frequency:檢測(cè)的間隔步長(zhǎng),默認(rèn)為0.5s

ignored_exceptions:超時(shí)后的拋出的異常信息,默認(rèn)拋出NoSuchElementExeception異常。

util(method,info):直到滿足某一個(gè)條件,返回結(jié)果,等不到就報(bào)錯(cuò)

method->expected_conditions.presence_of_element_located(locator):判斷某個(gè)元素是否定位到了

? ? locator-->(By.Id,"kw")\(By.Name,"wd")

需求:使用顯示等待的方式去等百度首頁(yè)的百度一下按鈕顯示出來(lái),如果出來(lái)就點(diǎn)擊,否則print()

? 注意:若同時(shí)設(shè)置了隱式等待和顯示等待,則以隱式等待為第一優(yōu)先級(jí),也就是說(shuō),若隱式等待時(shí)間大于顯示等待,顯示等待時(shí)間設(shè)置無(wú)效,因?yàn)閐river若找不到元素,會(huì)先等待隱式等待的時(shí)間,對(duì)time.sleep()沒有影響,只要執(zhí)行到這句代碼,就會(huì)等待

頁(yè)面滾動(dòng)條操作

使用JS實(shí)現(xiàn)

? 到底部:js="document.documentElement.scrollTop=10000"

? 到頂部: js="document.documentElement.scrollTop=0"

? 左右移動(dòng):js="window.scrollTo(200,1000)"

? Js代碼的執(zhí)行需要用到的方法:driver.execute_script(js)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容