selenium.wait_for_condition等效于WebDriver的Python绑定

时间:2010-09-12 10:37:19

标签: python selenium webdriver

我正在将一些测试从Selenium转移到WebDriver。我的问题是我找不到selenium.wait_for_condition的等价物。 Python绑定目前是否具有此功能,还是仍在计划中?

3 个答案:

答案 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。

test coverage for WebDriverWait也有助于查看。

答案 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的完成情况,则可以采用相同的方法。