jac*_*118 8 python selenium selenium-webdriver
我尝试在Python中创建一个具有自定义等待条件的函数.但是,我收到一个错误:
TypeError:'bool'对象不可调用
def waittest(driver, locator, attr, value):
element = driver.find_element_by_xpath(locator)
if element.get_attribute(attr) == value:
return element
else:
return False
wait = WebDriverWait(driver, 10)
element = wait.until(waittest(driver, '//div[@id="text"]', "myCSSClass", "false"))
Run Code Online (Sandbox Code Playgroud)
我最终要做的是使用 lambda
self.wait.until(lambda x: waittest(driver, "//div[@id="text"]", "myCSSClass", "false"))
Run Code Online (Sandbox Code Playgroud)
WebDriverWait(driver, 10).until()接受一个可调用对象,该对象将接受一个webdriver实例(driver作为我们的示例)作为参数。最简单的自定义等待,希望看到2个元素,看起来像
WebDriverWait(driver, 10).until(
lambda wd: len(wd.find_elements(By.XPATH, 'an xpath')) == 2
)
Run Code Online (Sandbox Code Playgroud)
该waittest函数必须重写为:
class waittest:
def __init__(self, locator, attr, value):
self._locator = locator
self._attribute = attr
self._attribute_value = value
def __call__(self, driver):
element = driver.find_element_by_xpath(self._locator)
if element.get_attribute(self._attribute) == self._attribute_value:
return element
else:
return False
Run Code Online (Sandbox Code Playgroud)
然后可以用作
element = WebDriverWait(driver, 10).until(
waittest('//div[@id="text"]', "myCSSClass", "false")
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2779 次 |
| 最近记录: |