我们正在使用带有Capybara和Selenium的Chrome无头进行三次js功能测试。
当一个特定的js测试(使用xhr)跟随另一个也使用xhr时,我们有一个可预测的(仅在CI上)失败(请参阅https://github.com/thredded/thredded/tree/separate-out-js-from-non-js-in-ci代码或https://travis-ci.org/thredded/thredded/jobs/302376004代表样品运行)。
服务器错误总是在下一个规范中出现"用户创建带有标题和内容的新主题"但网址显然与之前的规范不同;用户回复某个主题会启动引用回复(js)"。
显而易见的是,在规范结束之后的请求与DatabaseCleaner.clean
之后发生竞争条件。但是,我的理解是,Capybara 2.7+ [1] after_each
应该在reset_session!
之后发生,这应该可以防止这个精确的问题。在任何情况下,我都非常确定页面中没有任何内容可以创建此请求(我们有一个特定的wait/test for the completion of this ajax request)。
3个不同的数据库和3个不同的rails版本(4.2,5.0,5.1)正在发生这种情况。 我们已升级到最新的Capybara。
尝试禁用turbolinks,在违规规范结束时加入大量(10s)睡眠......尝试过手动重置会话。
一定是遗漏了什么。有什么指针吗?
[1] https://github.com/teamcapybara/capybara/pull/1637引自https://bibwild.wordpress.com/2016/02/18/struggling-towards-reliable-capybara-javascript-testing/
更新:添加了对xhr的引用,因为另一个(新的)js规范存在问题,并且它不是出现错误的前两个请求(登录表单和发布到登录),但是第一个表示错误的xhr请求。在新的情况下,获得请求的xhr正在后续规范中通过POST请求,即使它是通过GET原始请求的
答案 0 :(得分:0)
看起来这是一个chromedriver bug。
我们通过将chromedriver(在travis上)升级到v2.33(linux)来解决这个问题。 https://travis-ci.org/thredded/thredded/builds/302431113
之前的版本是v2.31。奇怪的是,我们无法用2.31(mac)在本地打破这个。