Selenium-Webdriver(python)学习笔记(七)
----WebdriverWait类(同步点)
WebdriverWait类共有两个可调用方法:until, until_not
WebdriverWait类__init__和until方法(until_not与之类似)的源码
def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
(略)
def until(self, method, message=''):
"""Calls the method provided with the driver as an argument until the \
return value is not False."""
end_time = time.time() + self._timeout
while(True):
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions:
pass
time.sleep(self._poll)
if(time.time() > end_time):
break
raise TimeoutException(message)
实例化:
wait = WebdriverWait(dr, 10) # 只指定超时时间 wait =WebdriverWait(dr, 10, 1) # 指定检查频率 wait =WebdriverWait(dr, 10, ,1, ValueError) # 指定忽略ValueError异常
调用:
调用method时将self._driver作为第一个参数传入.
所以method需要有一个参数
一般传入一个lambda表达式作为判断方式
代码如下:
import os
from distutils import log
from selenium import webdriver
import selenium.webdriver.support.ui as ui
dr = webdriver.Firefox()
dr.get('file:///%s' % (os.path.abspath('wait.html')) )
# 通过class_name定位到SignIn按钮
signIn = dr.find_element_by_class_name('button')
# 输出SignIn按钮的值
log.warn(signIn.get_attribute('value'))
wait = ui.WebDriverWait(dr, 10, 0.001)
signIn.click()
def waitIt(dr):
theValue = dr.find_element_by_id('theP').text
log.warn(theValue)
return theValue == 'Clicked'
log.warn('wait start')
wait.until(waitIt)
# wait.until(lambda dr:dr.find_element_by_id('theP').text == 'Clicked' )
log.warn('wait end')
dr.close()

浙公网安备 33010602011771号