我正在将一些测试从Selenium转移到WebDriver。我的问题是我找不到selenium.wait_for_condition的等价物。 Python绑定目前是否具有此功能,还是仍在计划中?
答案 0 :(得分:10)
目前无法在WebDriver中使用wait_for_condition。 python selenium代码确实提供了用于访问旧的selenium方法的DrivenSelenium类,但它不能执行wait_for_condition。 The selenium wiki has some info on that
您最好的选择是使用WebDriverWait类。这是一个辅助类,它定期执行一个等待它返回True的函数。我的一般用法是
driver = webdriver.Firefox()
driver.get('http://example.com')
add = driver.find_element_by_id("ajax_button")
add.click()
source = driver.page_source
def compare_source(driver):
try:
return source != driver.page_source
except WebDriverException:
pass
WebDriverWait(driver, 5).until(compare_source)
# and now do some assertions
这个解决方案绝不是理想的。在页面请求/响应周期延迟等待某些ajax活动完成的情况下,try / except是必需的。如果在请求/响应周期中调用compare_source,则会抛出WebDriverException。
答案 1 :(得分:2)
这是我的Greg Sadetsky的答案版本,放入一个函数:
def click_n_wait(driver, button, timeout=5):
source = driver.page_source
button.click()
def compare_source(driver):
try:
return source != driver.page_source
except WebDriverException:
pass
WebDriverWait(driver, timeout).until(compare_source)
单击按钮,等待DOM更改然后返回。
答案 2 :(得分:0)
Java绑定包括Wait类。该类重复检查条件(在两者之间休眠),直到达到超时。如果您可以使用普通API检测Javascript的完成情况,则可以采用相同的方法。