我是自动化Web测试的新手,我目前正在从旧的Selenium RC实现迁移到Ruby中的Selenium 2。有没有办法在页面加载之前停止执行命令,类似于Selenium RC中的“wait_for_page_to_load
”?
答案 0 :(得分:4)
我修复了我在该部门启动驱动程序后添加此行的许多问题
driver.manage.timeouts.implicit_wait = 20
这基本上会使每个失败的驱动程序调用你在抛出异常之前重试最多20秒,这通常足以让你的AJAX完成。
答案 1 :(得分:2)
尝试使用Javascript通知您!
我创建了一些方法,通过我们的javascript库进行检查,并等待页面是否已完成加载DOM以及所有ajax请求是否完整。这是一个示例代码段。您需要使用的javascript将取决于您的库。
Selenium::WebDriver::Wait.new(:timeout => 30).until { @driver.execute_script("[use javascript to return true once loaded, false if not]"}
然后我将这些方法包装在一个clickAndWait
方法中,该方法单击该元素并调用waitForDomLoad和waitForAjaxComplete。为了更好地衡量,clickAndWait之后的下一个命令通常是一个waitForVisble
元素命令,以确保我们在正确的页面上。
# Click element and wait for page elements, ajax to complete, and then run whatever else
def clickElementAndWait(type, selector)
@url = @driver.current_url
clickElement(type, selector)
# If the page changed to a different URL, wait for DOM to complete loading
if @driver.current_url != @url
waitForDomLoad
end
waitForAjaxComplete
if block_given?
yield
end
end
答案 2 :(得分:1)
如果你使用的是capybara
,那么每当你测试page.should have_content("foo")
时,如果页面没有内容(但尚未),capybara不会立即失败,但会等待一段时间才能看到ajax调用会改变它。
基本上:在你click
之后,你想立即查看have_content("some content that is a consequence of that click")
。