Geb测试通过Chrome,与PhantomJS失败

时间:2014-02-28 01:22:52

标签: phantomjs functional-testing geb

我注意到一些Geb功能测试通过了Chrome但是没有使用PhantomJS,保持所有其他变量不变。这种情况主要发生在具有某种异步活动的页面上 - 一次调用$(selector).click()会触发更新DOM的事件处理程序,并且在调用$(anotherSelector).click()之前需要完成DOM更新。

我可以通过积极使用waitFor使PhantomJS测试再次通过,但我不明白为什么PhantomJS GhostDriver而不是Chrome驱动程序需要这样做。

不幸的是,我还没有能够构建一个与我的应用程序隔离的最小测试用例。

2 个答案:

答案 0 :(得分:2)

我唯一的建议是始终确保围绕异步活动的测试中的任何操作都受到waitFor语句的保护。在测试尝试访问页面中的新/已修改元素之前,您将避免一个驱动程序足够快以完成异步活动的问题,而其他驱动程序则不会。在开始在CI上运行测试时,不会在异步活动中使用waitFor也会让您感到厌烦,因为它们通常较慢,并且您会在测试页面中看到与异步性相关的更多故障。

我也不会考虑使用waitFor来保护测试中的每个异步活动都具有攻击性。您必须记住,waitFor会定期轮询条件并在条件满足后立即继续 - 因此,如果您的浏览器很快并且页面在waitFor首次轮询之前得到更新,那么您就是根本没有在速度方面受到惩罚,但如果不是,那么你有一个保证会重试,看看异步行动是否已经完成,条件是否已经完成。我觉得很有侵略性的是使用像30s这样可笑的高超时时间,他们绝对不需要它 - 这只是意味着如果你的测试失败,它将需要很长时间才能实现。

答案 1 :(得分:0)

即使使用IE和Firefox,我也有过最近的经历。这是您可以尝试的列表:

  1. 当然,waitFor {} /(timeout :)是你的朋友
  2. 我很确定Chrome和PhantomJS的行为方式并不完全相同。所以,手动尝试并观察有什么不同,然后使用类似的东西:

    if(System.properties["geb.env"]=="chrome") { $(selector).click() } else { // Do something else }