自動化測試(5):設(shè)置等待時間

一、time.sleep(seconds) 固定等待

import time

time.sleep(3) #等待3秒

time.sleep(seconds) seconds參數(shù)為整數(shù),單位(秒)定踱。

它是Python的time提供的休眠方法筷狼。

常用于短時間的等待瓶籽,為了自動測試用例的執(zhí)行效率固定等待的時間需要控制在3秒內(nèi)。在用例中盡量少用固定等待埂材。在爬蟲應(yīng)用中塑顺,為模擬用戶操作瀏覽器,防止過快操作俏险,可使用固定等待严拒。

二、智能隱性的等待implicitly_wait(回應(yīng)超時等待)

driver.implicitly_wait(time_to_wait)

回應(yīng)超時等待竖独,隱性的裤唠,設(shè)置后對應(yīng)的是全局,如查找元素莹痢。

driver.implicitly_wait(10)? # 設(shè)置全局隱性等待時間种蘸,單位秒

每次driver執(zhí)行 找不到元素都會等待設(shè)置的時間,它的值設(shè)置的過長對用例執(zhí)行效率有很大的影響竞膳,必須在執(zhí)行完成之后還原回來航瞭。driver.implicitly_wait() 要慎之又慎的使用。

driver對它的默認(rèn)值為0坦辟,driver.implicitly_wait(0)能還原隱性等待的設(shè)置時間刊侯。

三、智能顯性等待WebDriverWait

from selenium.webdriver.support.wait import WebDriverWait

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

參數(shù)說明:

driver 為webdriver驅(qū)動

timeout 最長超時時間锉走,單位(秒)

poll_frequency 循環(huán)查找元素每次間隔的時間滨彻,默認(rèn)0.5秒

ignored_exceptions 超時后需要輸出的異常信息

WebDriverWait()下面有兩個方法可用until()和until_not()

WebDriverWait(driver, timeout).until(method, message='')

method 函數(shù)或者實例__call__()方法返回True時停止,否則超時后拋出異常挪蹭。

參數(shù)說明:

method 在等待時間內(nèi)調(diào)用的方法或者函數(shù)亭饵,該方法或函數(shù)需要有返回值,并且只接收一個參數(shù)driver嚣潜。

message 超時時拋出TimeoutException冬骚,將message傳入異常顯示出來

WebDriverWait(driver, timeout).until_not(method, message='')

于上面的until() 相反椅贱,until_not 中的method函數(shù)或者實例__call__()方法返回False結(jié)束懂算,否則拋出異常。

until方法使用的method 的函數(shù)或者類__call()__方法詳解:

函數(shù)我們一般采用匿名函數(shù)lambda 庇麦。

lambda driver:driver.find_element(<定位元素>) # 當(dāng)定位的元素時為True计技,無元素時為False。如示例1山橄、2:

WebDriverWait示例1:

WebDriverWait(driver,5).until(lambda driver:driver.find_element_by_id('query'))

5秒內(nèi)等待元素(id='query')出現(xiàn)垮媒,lambda driver:driver.find_element_by_id('query') 為一個匿名函數(shù),只有一個driver參數(shù),返回的是查找的元素對象睡雇。

WebDriverWait示例2:

WebDriverWait(driver, 5).until_not(lambda driver:driver.find_element_by_name('query'))

5秒內(nèi)等待元素消失萌衬,同示例1 until_not 要求無元素返回即元素不存在于該頁面。

四它抱、expected_conditions 類庫

from selenium.webdriver.support import expected_conditions as ec秕豫,它囊括了我們需要使用等待的所有情況。

ec.title_is(‘title’)判斷頁面標(biāo)題等于title

ec.title_contains(‘title’)判斷頁面標(biāo)題包含title

ec.presence_of_element_located(locator)等待locator元素是否出現(xiàn)

ec.presence_of_all_elements_located(locator)等待所有l(wèi)ocator元素是否出現(xiàn)

ec.visibility_of_element_located(locator)等待locator元素可見

ec.invisibility_of_element_located(locator)等待locator元素隱藏

ec.visibility_of(element)等待element元素可見

ec.text_to_be_present_in_element(locator,text)等待locator的元素中包含text文本

ec.text_to_be_present_in_element_value(locator,value)等待locator元素的value屬性為value

ec.frame_to_be_available_and_switch_to_it(locator)等待frame可切入

ec.element_to_be_clickable(locator)等待locator元素可點擊

等待元素被選中观蓄,一般用于復(fù)選框,單選框

ec.element_to_be_selected(element)等待element元素是被選中

ec.element_located_to_be_selected(locator)等待locator元素是被選中ec.element_selection_state_to_be(element, is_selected)等待element元素的值被選中為is_selected(布爾值)

ec.element_located_selection_state_to_be(locator,is_selected)等待locator元素的值是否被選中is_selected(布爾值)

五混移、什么時候使用等待

固定等待sleep與隱性等待implicitly_wait盡量少用,它會對測試用例的執(zhí)行效率有影響侮穿。

顯性的等待WebDriverWait可以靈活運(yùn)用歌径,什么時候需要用到?

1亲茅、頁面加載的時候回铛,確認(rèn)頁面元素是否加載成功可以使用WebDriverWait

2、頁面跳轉(zhuǎn)的時候芯急,等待跳轉(zhuǎn)頁面的元素出現(xiàn)勺届,需要選一個在跳轉(zhuǎn)前的頁面不存在的元素

3、下拉菜單的時候娶耍,如上百度搜索設(shè)置的下拉菜單免姿,需要加上個時間斷的等待元素可點擊

4、頁面刷新的時候

總之榕酒,頁面存在改變的時候胚膊;頁面上本來沒的元素,然后再出現(xiàn)的元素


參考來源:https://zhuanlan.zhihu.com/p/30854637

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末想鹰,一起剝皮案震驚了整個濱河市紊婉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辑舷,老刑警劉巖喻犁,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異何缓,居然都是意外死亡肢础,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門碌廓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來传轰,“玉大人,你說我怎么就攤上這事谷婆】埽” “怎么了辽聊?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長期贫。 經(jīng)常有香客問我跟匆,道長,這世上最難降的妖魔是什么通砍? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任贾铝,我火速辦了婚禮,結(jié)果婚禮上埠帕,老公的妹妹穿的比我還像新娘垢揩。我一直安慰自己,他們只是感情好敛瓷,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布叁巨。 她就那樣靜靜地躺著,像睡著了一般呐籽。 火紅的嫁衣襯著肌膚如雪锋勺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天狡蝶,我揣著相機(jī)與錄音庶橱,去河邊找鬼。 笑死贪惹,一個胖子當(dāng)著我的面吹牛苏章,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奏瞬,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼枫绅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了硼端?” 一聲冷哼從身側(cè)響起并淋,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎珍昨,沒想到半個月后县耽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镣典,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年兔毙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骆撇。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞒御,死狀恐怖父叙,靈堂內(nèi)的尸體忽然破棺而出神郊,到底是詐尸還是另有隱情肴裙,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布涌乳,位于F島的核電站蜻懦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夕晓。R本人自食惡果不足惜宛乃,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒸辆。 院中可真熱鬧征炼,春花似錦、人聲如沸躬贡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拂玻。三九已至酸些,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間檐蚜,已是汗流浹背魄懂。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留闯第,地道東北人市栗。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像咳短,于是被迫代替她去往敵國和親肃廓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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