【问题标题】:Selenium: Using explicit waits in loopSelenium:在循环中使用显式等待
【发布时间】:2021-01-19 02:47:02
【问题描述】:

这是您通常如何实现显式等待元素的方式:

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))

【问题讨论】:

    标签: python-3.x selenium selenium-webdriver


    【解决方案1】:

    最简单的方法就是使用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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2012-05-11
      • 2023-03-11
      • 2021-12-18
      • 2018-01-04
      • 2016-01-02
      相关资源
      最近更新 更多