Geb测试通过了Chrome,失败了PhantomJS

Geb测试通过了Chrome,失败了PhantomJS,phantomjs,functional-testing,geb,Phantomjs,Functional Testing,Geb,我注意到一些Geb功能测试通过了Chrome,但失败了PhantomJS,保持了所有其他变量不变。这种情况主要发生在具有某种异步活动的页面上—只需调用一次$(选择器)。单击()会触发一个更新DOM的事件处理程序,DOM更新需要在调用$(另一个选择器)之前完成。单击() 我可以通过积极地使用waitFor使PhantomJS测试再次通过,但我不明白为什么PhantomJS GhostDriver而不是Chrome驱动程序需要这样做 不幸的是,我还不能构造一个与我的应用程序隔离的最小测试用例 即使是

我注意到一些Geb功能测试通过了Chrome,但失败了PhantomJS,保持了所有其他变量不变。这种情况主要发生在具有某种异步活动的页面上—只需调用一次
$(选择器)。单击()
会触发一个更新DOM的事件处理程序,DOM更新需要在调用
$(另一个选择器)之前完成。单击()

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


不幸的是,我还不能构造一个与我的应用程序隔离的最小测试用例

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

  • 当然,waitFor{}/(timeout:)是您的朋友
  • 我很确定Chrome和PhantomJS的行为方式并不完全相同。因此,手动尝试并观察差异,然后使用以下方法:

    if(System.properties[“geb.env”]=“chrome”){
    $(选择器)。单击()
    }否则{
    //做点别的
    }


  • 我能得到的唯一建议是始终确保您的测试中关于异步活动的任何操作都由
    waitFor
    语句保护。您可以避免在测试尝试访问页面中的新/修改元素之前,一个驱动程序能够足够快地完成异步活动,而另一个驱动程序不能。当您开始在CI上运行测试时,如果在异步活动中不使用
    waitFor
    ,也会对您造成不利影响,因为CI上的测试通常比较慢,并且您会在测试页面中看到更多与异步性相关的故障


    <>我也不会考虑使用<代码> WAITOW< /COD>来保护测试中的每一个异步活动都具有攻击性。您必须记住,
    waitFor
    定期轮询条件,并在条件满足时继续轮询-因此,如果您的浏览器很快,并且页面在第一次
    waitFor
    轮询之前得到更新,则您在速度方面不会受到任何处罚,但如果不是,则您可以保证会出现错误重试以查看异步操作是否已完成且条件是否满足。我发现有攻击性的做法是使用高得离谱的超时,比如30秒,而这些超时肯定是不需要的——这只是意味着,如果测试失败,它将需要很长时间才能发生。

    我想问的是,为什么我更需要PhantomJS中的waitFor而不是Chrome。为什么?这是一件有趣的事情!我想geb的提交人应该是最好了解的人!例如,在geb中,Chrome的运行速度甚至比Firefox还要快,Firefox需要比Chrome更多的等待时间,但如果所有浏览器的行为都类似,那就太好了!谢谢@erdi。这就是我所知道的。waitFor()不是一个睡眠类型的函数。我不明白的是,为什么不需要waitFor来通过Chrome中的测试。