我将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")));
我想等 要么 返回一个结果(div.some_result) 或 “未找到”字符串。那可能吗?有点儿:
div.some_result
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预期条件方法来做到这一点?
div.no_result, div.some_result
我这样做是这样的:
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: if fn(driver): return True 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类也是微不足道的。
AllEc
Nb。的try:块为奇数。我很困惑,因为有些EC返回true / false,而另一些EC会为False抛出异常。异常是由WebDriverWait捕获的,所以我的AnyEc事情产生了奇怪的结果,因为第一个抛出异常的事件意味着AnyEc没有继续进行下一个测试。
try: