Selenium之显式、隐式等待

selenium自动化页面元素存在异常发生的缘由有如下几点:web

     ① 页面加载时间过慢,须要查找的元素程序已经完成,可是页面还未加载成功。此时能够加载页面等待时间。ui

     ② 查找的元素没有在当前的iframe或者frame中。此时须要切换会对应的iframe或者frame中才行。ci

     ③ 元素错误。element

解决页面加载时间所引发的元素找不到,能够为页面设置加载时间。时间的设置分为如下三种:get

     一、显示等待   WebDriverWait()iframe

     二、隐式等待   implicitly_wait()selenium

     三、强制等待  sleep()it

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)自动化

说明: driver   -----  WebDriver的驱动程序io

          timeout  ------ 最长超时时间,以秒为单位

          poll_frequency   ------- 休眠时间的间隔(步长)时间,默认为0.5秒

          ignored_exceptions  -------  超时后的异常信息,默认状况下抛NoSuchElementException异常

例如:

         WebDriverWait(driver, 10).until(lambda driver:driver.findElement(By.Id("someId")));

         每隔0.5秒扫描一次检查是否有id为somdld的元素,10秒后没找到就不找了,抛异常。

 

简单代码实现:

        import  time 

        from selenium import webdriver

        from selenium.webdriver.support.wait import WebDriver

        driver = webdriver.Chrome()

        driver.get("http://www.baidu.com")

        element = WebDriverWait(driver, 10).until(lambda driver:driver.find_element_by_id("kw"))

        element.send_keys("selenium")

        # 添加智能等待

        driver.implicitly_wait(30)

        driver.find_element_by_id('su').click()

        time.sleep()

        driver.quit()        

相关文章
相关标签/搜索