Selenium webdriver python中新的ExpectedCondition类的语法

时间:2014-02-05 15:42:56

标签: python selenium selenium-webdriver

我正在使用pylen的selenium webdriver。 我想创建一个显式等待弹出窗口出现。遗憾的是,EC模块的常用方法不包括针对此问题的现成解决方案。在搜索许多其他帖子时,我认为我必须编写自己的EC条件 .until(new ExpectedCondition() { * the condition and its return arguments *}

我无法找到有关正确编写此文件的确切语法的文档。这里有一个java示例:https://groups.google.com/forum/#!msg/selenium-users/iP174o0ddw4/l83n5C5rcPoJ。有人可以指向相关的文档(不是一般等待,而是创建新的EC),或者只是帮助我编写python版本,如果我刚刚链接到的java代码。 非常感谢

2 个答案:

答案 0 :(得分:5)

如果您想等待任意条件,则根本不必使用ExpectedCondition。您只需将函数传递给until方法:

from selenium.webdriver.support.ui import WebDriverWait

def condition(driver):
    ret = False
    # ...
    # Actual code to check condition goes here and should
    # set `ret` to a truthy value if the condition is true
    # ...
    return ret

WebDriverWait(driver, 10).until(condition)

上面的代码将重复调用condition,直到满足以下任一条件:

  • condition返回一个评估为true的值,

  • 已经过了10秒(在这种情况下会引发异常)。

答案 1 :(得分:0)

我没有尝试过,但我认为你可以使用EC.alert_is_present

import selenium.webdriver.support.expected_conditions as EC
import selenium.webdriver.support.ui as UI

wait = UI.WebDriverWait(driver, 10)
alert = wait.until(EC.alert_is_present())

在webdriver / support / expected_conditions.py中,alert_is_present的定义如下:

class alert_is_present(object):
    """ Expect an alert to be present."""
    def __init__(self):
        pass

    def __call__(self, driver):
        try:
            alert = driver.switch_to_alert()
            alert.text
            return alert
        except NoAlertPresentException:
            return False

您可以将其简单地写为

def alert_is_present(driver):
    try:
        alert = driver.switch_to_alert()
        alert.text
        return alert
    except NoAlertPresentException:
        return False

这可能会让您了解如何编写这样的条件。