我注意到一些Geb功能测试通过了Chrome但是没有使用PhantomJS,保持所有其他变量不变。这种情况主要发生在具有某种异步活动的页面上 - 一次调用$(selector).click()
会触发更新DOM的事件处理程序,并且在调用$(anotherSelector).click()
之前需要完成DOM更新。
我可以通过积极使用waitFor
使PhantomJS测试再次通过,但我不明白为什么PhantomJS GhostDriver而不是Chrome驱动程序需要这样做。
不幸的是,我还没有能够构建一个与我的应用程序隔离的最小测试用例。
答案 0 :(得分:2)
我唯一的建议是始终确保围绕异步活动的测试中的任何操作都受到waitFor
语句的保护。在测试尝试访问页面中的新/已修改元素之前,您将避免一个驱动程序足够快以完成异步活动的问题,而其他驱动程序则不会。在开始在CI上运行测试时,不会在异步活动中使用waitFor
也会让您感到厌烦,因为它们通常较慢,并且您会在测试页面中看到与异步性相关的更多故障。
我也不会考虑使用waitFor
来保护测试中的每个异步活动都具有攻击性。您必须记住,waitFor
会定期轮询条件并在条件满足后立即继续 - 因此,如果您的浏览器很快并且页面在waitFor
首次轮询之前得到更新,那么您就是根本没有在速度方面受到惩罚,但如果不是,那么你有一个保证会重试,看看异步行动是否已经完成,条件是否已经完成。我觉得很有侵略性的是使用像30s这样可笑的高超时时间,他们绝对不需要它 - 这只是意味着如果你的测试失败,它将需要很长时间才能实现。
答案 1 :(得分:0)
即使使用IE和Firefox,我也有过最近的经历。这是您可以尝试的列表:
我很确定Chrome和PhantomJS的行为方式并不完全相同。所以,手动尝试并观察有什么不同,然后使用类似的东西:
if(System.properties["geb.env"]=="chrome") {
$(selector).click()
} else {
// Do something else
}