这通常是实现显式等待元素的方式:
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://somedomain/url_that_delays_loading")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))
在上面的示例中,它使用元素的ID来搜索元素,然后等待其可单击。
我想使用一个现有的元素对象而不是它的选择器来添加显式等待。
例:
fields = driver.find_elements_by_xpath("//input")
for field in fields:
wait.until(EC.element_to_be_clickable(field))
最简单的方法是使用visibility_of
而不是element_to_be_clickable
。
如果您确实需要element_to_be_clickable
(检查该元素是否可见并启用),则可以执行以下操作:
class enable_of(object):
def __init__(self, element):
self.element = element
def __call__(self, ignored):
return self.element.is_enabled()
fields = driver.find_elements_by_xpath("//input")
wait = WebDriverWait(driver, 10)
for field in fields:
wait.until(EC.visibility_of(field))
wait.until(enable_of(field))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句