Python版WebDriver中selenium.wait_for_condition的等效方法
我正在把一些测试从Selenium转移到WebDriver。我的问题是,我找不到selenium.wait_for_condition的对应功能。现在Python的接口里有这个功能吗,还是说还在计划中?
3 个回答
0
Java的绑定里有一个叫做Wait的类。这个类会不断地检查某个条件(中间会有暂停),直到达到设定的超时时间。如果你能通过正常的API检测到你的Javascript完成了,你也可以用同样的方法。
3
这是我根据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)
这个函数会点击按钮,等页面的内容变化后再继续。
11
目前,使用 WebDriver 的 wait_for_condition 功能是不可行的。虽然 Python 的 Selenium 代码提供了一个 DrivenSelenium 类,可以用来访问旧的 Selenium 方法,但它无法使用 wait_for_condition。Selenium 的维基页面上有一些相关信息。
你最好的选择是使用 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
这个解决方案并不是最理想的……使用 try/except 是必要的,因为在页面请求/响应周期延迟等待某些 AJAX 活动完成时,如果在请求/响应周期中调用 compare_source,就会抛出 WebDriverException。
关于 WebDriverWait 的 测试覆盖率 也很值得一看。