在对浏览器进行一系列调用后,量角器/ Webdriver失去同步

时间:2015-08-20 03:41:58

标签: angularjs protractor ui-automation karma-jasmine

我正在运行一组测试,用于在网站的许多视图上验证URL和一些HTML / Angular项。基本上,测试会在左侧面板中抓取一个图标(在您悬停时移入和移出),然后出现一个菜单,其中包含您可以单击的按钮。一旦菜单出现并显示第一层按钮,就可以点击另一组按钮(子菜单)。

当我将鼠标悬停在子菜单按钮上并单击这些按钮时,我会被发送到页面/视图,我可以在其中进行断言/验证。

此时菜单将消失,直到我将鼠标悬停在图标上并再次执行上述操作。除了最多有15个子按钮点击之外,我的所有测试都通过了。我试图扭转顺序,因为当时看不到几个按钮,但测试再次失败。

有没有人遇到过在浏览器中重复执行大量操作后测试失败的情况? 我以为我是在装载司机或其他东西......

我收到以下错误:

 Message:
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
  Stack:
    Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

    3 specs, 1 failure
    Finished in 63.217 seconds

ui-platform/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:113
  var template = new Error(this.message);

3 个答案:

答案 0 :(得分:5)

正如Shaunhusain所解释的那样,你必须增加你的默认超时间隔。使用以下标记更新您的conf.js文件,点击link以获取更多信息 -

  jasmineNodeOpts: { 
    defaultTimeoutInterval: 30000 //increase the time to avoid async errors (milliseconds)
  }

另一方面,您还可以更新 onPrepare()函数以包含implicit / pageLoadTimeout等待。这也有帮助。

  onPrepare: function(){
     // implicit and page load timeouts
     browser.manage().timeouts().pageLoadTimeout(60000);
     browser.manage().timeouts().implicitlyWait(35000);
  }

还有另一种延迟的方法。如果您发现任何特定规格的异步错误,那么您只能为该特定规范添加延迟。这是一个例子 -

describe("Test", function(){
  it("First Spec", function(){
    //your code here
  },60000);
});

希望这有帮助。

答案 1 :(得分:3)

您可能需要扩展DEFAULT_TIMEOUT_INTERVAL,或许浏览器使用大量CPU(或等待转换或其他类似的东西)并且无法在默认提供的窗口中完成操作:

http://jasmine.github.io/2.1/introduction.html#section-Asynchronous_Support

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

答案 2 :(得分:-1)

尝试使用

directConnect=true

https://github.com/angular/protractor/blob/master/docs/server-setup.md#connecting-directly-to-browser-drivers

有时在本地使用SeleniumGrid工作效果不佳或稳定......