【问题标题】:How to wait for multiple conditions on invisibility_of_element_located using Selenium through Python如何通过 Python 使用 Selenium 在 invisibility_of_element_located 上等待多个条件
【发布时间】:2019-10-16 09:21:53
【问题描述】:

我想等待元素在 Selenium 上消失,但同时我必须确保所有元素都消失了。现在,它是这样的:

element = WebDriverWait(driver, 30).until(
    expected_conditions.element_to_be_clickable((By.XPATH, xpath))
)
is_clickable = WebDriverWait(driver, 30).until(
    expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0]))
)
is_clickable_2 = WebDriverWait(driver, 30).until(
    expected_conditions.invisibility_of_element_located((By.XPATH, layovers[1]))
)

if is_clickable and is_clickable_2:
    element.click()

layovers 列表中有两个以上的元素,它们将 xpath 存储为 str。

在这种情况下,我是否可以将它们全部变成一个函数来检查元素的不可见性,而不是重复它们? (我的意思是,让 WebDriverWait 只需要一个调用,而不是定义另一个包装函数。)

【问题讨论】:

    标签: python selenium xpath lambda webdriverwait


    【解决方案1】:

    直到_not()

    WebDriverWait 类中的until_not(method, message='') 方法将驱动程序提供的方法作为参数调用,直到返回值为False。


    这个用例

    由于您的用例是在 invisibility_of_element_located() 到 上等待多个条件,因此您可以合并两个预期条件:

    • WebDriverWait(driver, 30).until(expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0])))
    • WebDriverWait(driver, 30).until(expected_conditions.invisibility_of_element_located((By.XPATH, layovers[1])))

    在单个表达式中使用 until_not() 方法通过 lambda 表达式如下:

    WebDriverWait(driver,15).until_not(lambda driver: driver.find_element(By.XPATH,layovers[0]) and driver.find_element(By.XPATH,layovers[1]))
    

    结尾

    您可以在以下位置找到几个类似的相关讨论:

    【讨论】:

      【解决方案2】:

      第一件事:

      在你写WebDriverWait(driver, 30)的那一刻,一个web驱动等待(显式等待)的对象就会被创建。

      相反,您可以这样做:

      wait = WebDriverWait(driver,10) 
      

      您可以在同一个类中多次使用引用变量wait。

      您可以创建一个方法,该方法将采用 webdriverwait 引用,并且您可以根据需要传递 xpath 或定位器。

      def my_method(wait, xpath):
      wait.until(
          expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0]))
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 2022-01-21
        • 2018-11-26
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        相关资源
        最近更新 更多