WebRat Selenium WebDriver:等待ajax完成
发布时间:2020-12-15 22:51:27 所属栏目:百科 来源:网络整理
导读:我们在我们的应用程序中使用Selenium2.0 aka WebDriver运行Webrat. WebDriver非常好地处理页面重新加载,如果浏览器正在重新加载整个页面,则不会启动后续步骤.问题是这种机制不适用于Ajax请求.当有一些click()或change()后,WebDriver不会执行任何空闲操作. 任
我们在我们的应用程序中使用Selenium2.0 aka WebDriver运行Webrat.
WebDriver非常好地处理页面重新加载,如果浏览器正在重新加载整个页面,则不会启动后续步骤.问题是这种机制不适用于Ajax请求.当有一些click()或change()后,WebDriver不会执行任何空闲操作. 任何人都可以建议如何使webdriver闲置,直到页面上的所有ajax请求结束? 解决方法
我们最终在selenium上编写了一个层,通过在可选循环中包装调用来处理这种情况.所以,当你这样做时:
@browser.click "#my_button_id" 它会做类似于AutomatedTester建议的内容: class Browser def click(locator) wait_for_element(locator,:timeout => PAGE_EVENT_TIMEOUT) @selenium.click(locator) end def wait_for_element(locator,options) timeout = options[:timeout] || PAGE_LOAD_TIMEOUT selenium_locator = locator.clone expression = <<EOF var element; try { element = selenium.browserbot.findElement('#{selenium_locator}'); } catch(e) { element = null; }; element != null; EOF begin selenium.wait_for_condition(expression,timeout) rescue ::Selenium::SeleniumException raise "Couldn't find element with locator '#{locator}' on the page: #{$!}.nThe locator passed to selenium was '#{selenium_locator}'" end end end 包装器也做了其他的事情,比如允许通过按钮/输入标签等进行搜索(因此包装器不仅存在时间问题,这只是我们放在那里的东西之一.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |