fqx*_*qxp 4 ruby selenium capybara
我们在页面上有一个快速搜索字段,它通过AJAX调用过滤先前搜索的结果列表.
我们尝试了几种检查更改列表内容的方法.
一开始,有一个列表,例如:
<div class="search-list">
<div class="entry">
<div class="job-title">Manager</div>
...
</div>
<div class="entry">
<div class="job-title">Slave</div>
...
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在快速搜索之后,整个搜索search-list将被AJAX响应替换,第二个entrydiv被删除.
我们试图通过以下语句检查这种情况:
page.find('.search-list .job-title').map(&:text) =~ ['Manager']
Run Code Online (Sandbox Code Playgroud)
但它只能在AJAX请求发出之前看到状态.这可能是由于在不等待完成AJAX请求的情况下立即检查条件.我们尝试了几种方法,比如设置Selenium驱动程序的resynchronize选项.
将睡眠10放在上面的线前确实有效,但这是一个不干净的解决方案.目前我们不知道如何让这个工作,还有其他人吗?
我使用一个帮助方法wait_until来等待ajax完成,然后进行我的测试.
所以可能是这样的:
page.wait_until { page.evaluate_script "jQuery.active == 0" }
page.find('.search-list .job-title').map(&:text) =~ ['Manager']
Run Code Online (Sandbox Code Playgroud)
wait_until等到true块返回(虽然它会在一点点后超时).你也可以传递一个超时值,wait_until(5)在分配的时间后退出.
您也可以提升您的Capybara等待时间.
Capybara.default_wait_time = 10
Run Code Online (Sandbox Code Playgroud)
angular.element.active == 0 以同样的方式工作.
jQuery.active == 0 stil在Angular.js中工作,但不确定是否因为我将jQuery作为我的javascript库的一部分.
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |