在作UI自動化的過程當中,咱們有時候爲了等待元素的出現,須要加一些等待時間來幫助,可是有時候時間加的過多或者過少,這個沒有辦法判斷,今天介紹幾種等待時間,咱們看看那種適合咱們 ,咱們就用哪種web
看到名稱就應該知道,強制等待,就是設置多少秒,就必須等待多少秒,才能繼續往下面操做session
time.sleep()app
def sleep(seconds): # real signature unknown; restored from __doc__ """ sleep(seconds) 延遲指定的秒數 """ pass
使用方法async
# 直接在須要等待的地方添加
time.sleep(10)
隱式等待: implicitly_wait?() 默認參數的單位爲妙,設置一個等待時間,它並不影響腳本的執行速度。當腳本執行到某個元素定位是,若是元素能夠定位,則繼續執行,若是元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設在第六秒定位到了元素則繼續執行,若直到超出設置的時長10秒尚未定位到元素,則拋出異常。ide
def implicitly_wait(self, time_to_wait): """ Sets a sticky timeout to implicitly wait for an element to be found, or a command to complete. This method only needs to be called one time per session. To set the timeout for calls to execute_async_script, see set_script_timeout. :Args: - time_to_wait: Amount of time to wait (in seconds) :Usage: driver.implicitly_wait(30) """ if self.w3c: self.execute(Command.SET_TIMEOUTS, { 'implicit': int(float(time_to_wait) * 1000)}) else: self.execute(Command.IMPLICIT_WAIT, { 'ms': float(time_to_wait) * 1000})
使用方法:ui
# 在須要等待的地方直接添加 driver.implicitly_wait(10)
Activity等待: app特有一種等待,經過Activity的出現來幫助咱們進行判斷是否到達這個頁面而後進行一系列的操做 ,經過wait_activity 進行判斷spa
def wait_activity(self, activity, timeout, interval=1): """等待一個activity,直到在規定時間內activity出現 This is an Android-only method. :Args: - activity - target activity - timeout - max wait time, in seconds - interval - sleep interval between retries, in seconds """ try: WebDriverWait(self, timeout, interval).until( lambda d: d.current_activity == activity) return True except TimeoutException: return False
使用方法:rest
直接在須要等待元素出現的地方添加code
# 添加activity,後面加上等待的時間,超過期間就報錯 driver.wait_activity('com.ali.user.mobile.login.ui.UserLoginActivity',30)
顯示等待原本準備等到寫selenium教程的時候在介紹,可是感受後面會用到,這裏就直接給你們進行介紹了。blog
先看源碼:
def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None): """ driver: 返回一個webdriver實例化 timeout:設置一個超時時長(S) poll_frequency:循環讀取元素的時間,默認是0.5(s) 使用方法 : from selenium.webdriver.support.ui import WebDriverWait \n element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId")) \n is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).\ \n until_not(lambda x: x.find_element_by_id("someId").is_displayed()) """ self._driver = driver self._timeout = timeout self._poll = poll_frequency # avoid the divide by zero if self._poll == 0: self._poll = POLL_FREQUENCY exceptions = list(IGNORED_EXCEPTIONS) if ignored_exceptions is not None: try: exceptions.extend(iter(ignored_exceptions)) except TypeError: # ignored_exceptions is not iterable exceptions.append(ignored_exceptions) self._ignored_exceptions = tuple(exceptions)
從源碼中分許出來三個參數的做用
driver:返回一個webdriver實例化
timeout:設置一個超時時長
poll_frequentcy:循環讀取元素時間
使用方法:
# 導入方法 from selenium.webdriver.support.ui import WebDriverWait element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"))
其中until表示須要執行什麼內容
注:顯示等待和隱式等待不一樣的區別是一個是等待元素的加載,另外一個是等待頁面的加載
等待方法其實不少種,安靜這裏只簡單的介紹這三種,那種方面用哪一種,哪一種簡單用那種,感謝您的閱讀,若是寫的對您有所幫助的話,能夠右下角點個關注。