我正在使用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代码。 非常感谢
答案 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
这可能会让您了解如何编写这样的条件。