ruby – 检查capybara中多个文本节点的内容时的时间问题
发布时间:2020-12-17 03:02:05 所属栏目:百科 来源:网络整理
导读:我们在页面上有一个快速搜索字段,它通过 AJAX调用过滤先前搜索的结果列表. 我们尝试了几种检查更改列表内容的方法. 一开始,有一个列表,例如这个: div class="search-list" div class="entry" div class="job-title"Manager/div ... /div div class="entry"
我们在页面上有一个快速搜索字段,它通过
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> 在快速搜索之后,整个搜索搜索列表将被AJAX响应替换,第二个条目div被删除. 我们试图通过以下语句检查这种情况: page.find('.search-list .job-title').map(&:text) =~ ['Manager'] 但它只能在AJAX请求发出之前看到状态.这可能是由于在不等待完成AJAX请求的情况下立即检查条件.我们尝试了几种方法,比如设置Selenium驱动程序的重新同步选项. 将睡眠10放在上面的线前确实有效,但这是一个不干净的解决方案.目前我们不知道如何让这个工作,还有其他人吗? 解决方法
我使用一个帮助方法使用wait_until等待ajax完成,然后进行我的测试.
所以可能是这样的: page.wait_until { page.evaluate_script "jQuery.active == 0" } page.find('.search-list .job-title').map(&:text) =~ ['Manager'] wait_until等待,直到块返回true(尽管稍后会超时).你也可以传递一个超时值wait_until(5),在分配的时间后退出. 您也可以提升您的Capybara等待时间. Capybara.default_wait_time = 10 Angular.js的更新 angular.element.active == 0以相同的方式工作. jQuery.active == 0 stil在Angular.js中工作,但不确定是否因为我将jQuery作为我的javascript库的一部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |