设置元素等待

一、显示等待

  Webdriver等待某个条件成立时继续执行,否则在达到最大时长抛出超时异常

from selenium import webdriver

from selenium.webdriver.common.by import by

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

 

driver=webdriver.Firefox()

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

element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located(By.ID,"kw"))

element.send_kesy('selenium')

driver.quit()

 

WebDriverWait类是有WebDriver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面是否存在,如果超过设置时间检测不到则抛出异常,具体格式如下:

WebDriverWait(driver,timeout,poo_frequency=0.5,ignore_exception=None)

driver:浏览器驱动

timeout:最长超时时间,默认以秒为单位

poll_frequency:检测的间隔(步长)时间,默认为0.2s

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

WebDriverWait()一般由until()或until_not()方法配合。

until(method,message='') //调用该方法提供的驱动程序作为一个参数,直到返回值为True

until_not(method,message='')//调用该方法提供的驱动程序作为一个参数,直到返回值为False

通过as 关键字将expected_conditions重命名为EC,并调用presence_of_element_located()判断元素是否存在

二、隐式等待

通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。WebDriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0.

from selenium import webdriver

from selenium.common.exceptions imports NoSuchElementException

from time import ctime

driver=webdriver.Firefox()

#设置隐式等待为10秒

driver.implicitly_wait(10)

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

try:

  print(ctime())

  drvier.find_element_by_id('kw2').send_keys('selenium')

except NoSucElementException as e:

  print(e)

finally:

  print(ctime())

  driver.quit()

implicitly_wait()默认参数的单位为秒

  

posted @ 2019-03-16 13:53  期待me  阅读(39)  评论(0)    收藏  举报