#__author__=Admin #Created time:2021/9/17 18:05 from unittest import mock ''' 顯示等待:WebDriverWait() 1、導包 from selenium.webdriver.support.wait import WebDriverWait eg: WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None) driver:瀏覽器驅動 timeout:最長超時時間,默認以秒為單位 poll_frequency:檢測的時隔步長(在2中表示調用until或until_not中方法的間隔時間),默認是0.5s ignored_exceptions:超時后的拋出的異常信息,默認拋出NoSuchException信息。 2、與until()或者until_not()方法結合使用 WebDriverWait(driver,10).until(methond,message="") 調用該方法提供的驅動程序作為參數,直到返回為True WebDriverWait(driver,10).until_not(methond,message="") 調用該方法提供的驅動程序作為參數,直到返回為False 在設置時間10s內,等待后面的條件發生。如果超時設置時間未發生,則拋出異常。 method:在等待時間,每隔一段時間(__init__中的poll_frequency)調用until或until_not里的方法,知道它返回True或False。 調用message: 如果超時,拋出TimeoutException,將message傳入異常 3、WebDriverWait與excepted_conditions結合使用 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By ''' from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver=webdriver.Chrome() driver.get("http://www.baidu.com") wait = WebDriverWait(driver,10,0.5) element =wait.until(EC.presence_of_element_located((By.ID,"kw")),message="") ''' presence_of_element_located類中__init__()方法取的確實是2個參數(self, locator),其中locator調用的是一個tuple(元組) 該元組(By.ID,“su”)作為一個整體,對應相當於1個參數,加上類實例化代表自身的self參數,正好就是2個參數 因此,執行代碼正確的寫法為:presence_of_element_located((By.ID,“su”)),即需要嵌套兩層英文圓括號 ''' # 此處注意,如果省略message=“”,則By.ID外面是三層() # WebDriverWait(driver, 10).until(driver.find_element_by_id('kw')) # 錯誤用法:TypeError: 'xxx' object is not callable
expected_conditions類提供的預期條件判斷的方法
驗證title,驗證傳入的參數title是否等於或包含於driver.title
title_is 判斷當前頁面的 title 是否完全等於(==)預期字符串,返回布爾值
title_contains 判斷當前頁面的 title 是否包含預期字符串,返回布爾值
驗證元素是否出現,傳入的參數都是元組類型的locator,如(By.ID, ‘kw’)
presence_of_element_located 判斷某個元素是否被加到了 dom 樹里,並不代表該元素一定可見
presence_of_all_elements_located 判斷是否至少有 1 個元素存在於 dom 樹中。舉例:如果頁面上有 n 個元素的 class 都是’wp’,那么只要有 1 個元素存在,這個方法就返回 True
驗證元素是否可見,前兩個傳入參數是元組類型的locator,第三個傳入WebElement,第一個和第三個其實質是一樣
visibility_of_element_located 判斷元素是否可見(可見代表元素非隱藏,並且元素寬和高都不等於 0)
invisibility_of_element_located 判斷某個元素中是否不存在於dom樹或不可見
visibility_of 同上一方法,只是上一方法參數為locator,這個方法參數是 定位后的元素
判斷某段文本是否出現在某元素中,一個判斷元素的text,一個判斷元素的value
text_to_be_present_in_element 判斷某個元素中的 text 是否 包含 了預期的字符串
text_to_be_present_in_element_value 判斷某個元素中的 value 屬性是否包含 了預期的字符串
判斷frame是否可切入,可傳入locator元組或者直接傳入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it 判斷該 frame 是否可以 switch進去,如果可以的話,返回 True 並且 switch 進去,否則返回 False
以下條件判斷元素是否可點擊,傳入locator
element_to_be_clickable 判斷某個元素中是否可見並且可點擊
判斷一個元素是否仍在DOM中,傳入WebElement對象,可以判斷頁面是否刷新了
staleness_of 等某個元素從 dom 樹中移除,注意,這個方法也是返回 True或 False
判斷元素是否被選中,第一個條件傳入WebElement對象,第三個傳入locator元組,第二個傳入WebElement對象以及狀態,相等返回True,否則返回False,第四個傳入locator以及狀態,相等返回True,否則返回False
element_to_be_selected 判斷某個元素是否被選中了,一般用在下拉列表
element_selection_state_to_be 判斷某個元素的選中狀態是否符合預期
element_located_selection_state_to_be 跟上面的方法作用一樣,只是上面的方法傳入定位到的 element,而這個方法傳入 locator
判斷是否有alert出現
alert_is_present 判斷頁面上是否存在 alert