目录
等待时间
在web中因为代码执行速度很快,但由于服务器请求需要时间和网络延迟等原因,在代码执行时,还未能等待页面元素出现就开始执行,这样会使操作不能找到元素使执行失败报错,定位元素的方法为find_element 时抛出异常,定位元素方法为find_elements时,返回空列表,这时可以通过设置等待时间来解决。由于具体的等待时长不好掌握,所以需要设置显示或隐式等待时长来解决。
显示等待WebDriverWait()
设置显示等待需要导入方法
from selenium.webdriver.support.ui import WebDriverWait
方法参数介绍
class WebDriverWait(object):
def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
'''
:param driver: 传入WebDriver实例
:param timeout:超时时间,等待的最长时间(同时要考虑隐性等待时间)
:param poll_frequency:调用until中的方法的间隔时间,默认是0.5秒
:param ignored_exceptions:忽略的异常,如果在调用until的过程中抛出这个元组中的异常,则不中断代码,继续等待
'''
隐式等待是对指定元素使用的,在使用的时候通过使用WebDriverWait对象的.until方法来指定需要等待加载的对象,until方法中的参数如下
def until(self, method, message=''):
# method:可执行方法
# message='':超时时返回的信息,可以做断言使用
可以用来检查页面元素是否存在或者是否符合预期
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = (By.ID,'uesrname') # 等待加载成功后的元素作为预期条件
WebDriverWait(driver=wd,timeout=10, poll_frequency=0.5).until(EC.presence_of_element_located(element),message="未找到元素")
user = wd.find_element_by_id('username') # 在上面的等待时间范围内等待加载元素出现的时候执行
expected_conditions条件提供了更多的判断方法
ActionChains提供的方法 |
作用 |
title_is title_contains |
这两个条件类验证title,验证传入的参数title是否等于或包含于driver |
presence_of_element_located presence_of_all_elements_located |
这两个条件验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, 'kw')顾名思义,一个只要一个符合条件的元素加载出来就通过;另一个必须所有符合条件的元素都加载出来才行 |
visibility_of_element_located invisibility_of_element_located visibility_of |