我将 Selenium 2 / WebDriver 与 Python API 一起使用,如下所示:
from selenium.webdriver.support import expected_conditions as EC
# code that causes an ajax query to be run
WebDriverWait(driver, 10).until( EC.presence_of_element_located( \
(By.CSS_SELECTOR, "div.some_result")));
我想等待either要返回的结果(div.some_result
) or“未找到”字符串。那可能吗?有点儿:
WebDriverWait(driver, 10).until( \
EC.presence_of_element_located( \
(By.CSS_SELECTOR, "div.some_result")) \
or
EC.presence_of_element_located( \
(By.CSS_SELECTOR, "div.no_result")) \
);
我意识到我可以使用 CSS 选择器来做到这一点(div.no_result, div.some_result
),但是有没有办法使用 Selenium 预期条件方法来做到这一点?
我是这样做的:
class AnyEc:
""" Use with WebDriverWait to combine expected_conditions
in an OR.
"""
def __init__(self, *args):
self.ecs = args
def __call__(self, driver):
for fn in self.ecs:
try:
res = fn(driver)
if res:
return True
# Or return res if you need the element found
except:
pass
然后称呼它为...
from selenium.webdriver.support import expected_conditions as EC
# ...
WebDriverWait(driver, 10).until( AnyEc(
EC.presence_of_element_located(
(By.CSS_SELECTOR, "div.some_result")),
EC.presence_of_element_located(
(By.CSS_SELECTOR, "div.no_result")) ))
显然,实现一个AllEc
类也一样。
Nb. the try:
块是奇数。我很困惑,因为有些 EC 返回 true/false,而其他 EC 会抛出NoSuchElementException
为假。异常被 WebDriverWait 捕获,所以我的 AnyEc 东西产生了奇怪的结果,因为第一个抛出异常意味着 AnyEc 没有继续进行下一个测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)