【问题标题】:Protractor: timed out after 10000 msec waiting for spec to complete量角器:在等待规范完成 10000 毫秒后超时
【发布时间】:2014-05-10 17:58:53
【问题描述】:

我有几个量角器测试,有时我得到一个错误提示:

Message:
     timeout: timed out after 10000 msec waiting for spec to complete
   Stacktrace:
     undefined

它可能在某些测试中随机发生。 我通常在 BrowserStack 上进行测试,它会在 3-5 次构建中显示一次错误。但最近我尝试了 SauceLabs 和几乎每一个(每一个!)但并非所有测试都因该错误而失败。可能,SauceLabs 的速度要慢得多,所以我更经常收到错误...

以下是问题:

  1. Protractor/Selenium 中是否有办法更改测试运行超时?它也需要在 BrowserStack/Saucelabs 上进行更改。
  2. 为什么我经常收到错误消息?我的测试有什么问题吗?大多数似乎并不复杂或长期运行。同样,在本地机器上几乎总是没问题。

示例如下:

   it('should check that login gives error on empty or incorrect email', function () {
      p.get('/#/login');
      p.findElement(protractor.By.css('button[type="submit"]')).click();
      expect(p.findElement(protractor.By.css('.alert-danger')).getText()).toEqual('E-mailadres is niet geldig');
      p.findElement(protractor.By.model('user.email')).sendKeys('test-1xtc.vc');
      p.findElement(protractor.By.css('button[type="submit"]')).click();
      expect(p.findElement(protractor.By.css('.alert-danger')).getText()).toEqual('E-mailadres is niet geldig');
      p.findElement(protractor.By.model('user.email')).clear();
    });

该应用正在使用 AngularJS,硒 2.20,量角器 0.20.1

【问题讨论】:

  • 我在 Sauce Labs 上也经常出现超时,我的设置为 30000 毫秒。它确实降低了测试的有用性。任何建议将不胜感激。

标签: angularjs selenium protractor saucelabs browserstack


【解决方案1】:

Protractor/Selenium 中有没有办法更改测试运行超时?

是的 :) 您可以通过 Protractor 配置中的 allScriptsTimeout 进行操作(来自 Protractor FAQ

您还可以在jasmineNodeOpts 选项中设置defaultTimeoutInterval(来自Protractor referenceConf.js

为什么我经常收到错误消息?我的测试有什么问题吗?大多数似乎并不复杂或长期运行。同样,在本地机器上几乎总是没问题。

没有看到你的测试很难说。您提供的示例对我来说看起来不错。

【讨论】:

  • 更改 allScriptsTimeout 和 defaultTimeoutInterval 对我不起作用
  • 嗨,我也面临同样的问题,有更新吗?你能解决吗?谢谢。
  • 对我来说也是,如何解决这个问题?
【解决方案2】:

你的项目是 angularjs 项目吗?您是否在某处使用任何 $interval 或 $timeout 服务?如果是这样,请尝试使用 $interval 而不是 $timeout 并尝试将可选的 'count' 参数调整为 1,例如 (https://docs.angularjs.org/api/ng/service/$interval#usage)。 我最近遇到了类似的问题,我就是这样解决的。

【讨论】:

  • 我遇到了完全相同的问题,但我使用的是 $timeout,因为我有一个方法可以做到这一点:10 秒后开始打印 hello world 消息 5 秒。如何删除我的 $timeout 以使量角器测试正常运行?
【解决方案3】:

我使用 config 文件的不同属性解决了这个问题,我在上面的答案中没有看到。

getPageTimeout : 100000 //in millis, i.e., 100 secs

【讨论】:

    【解决方案4】:

    我相信 saucelabs 的默认时间是 90 秒。它可以通过您的 conf.js 文件使用 idleTimeout 变量进行更改,该变量的值为秒。例子

    idleTimeout = 90; // equals 90 seconds
    

      exports.config = {
      //Includes test sub-sub-foldersbefore any tests in sub folders 
      specs: ['tests/*/*/*.js', 'tests/*/*.js', ],
    
    
      // use jasmine 2
      framework: 'jasmine2',
      capabilities :  {
                    browserName: "chrome",
                    // this takes seconds so 120 would be 120 seconds.
                    idleTimeout = 120;
                },
    },
    

    现在,如果您需要更改特定规范文件的值,您可以在规范文件中使用它,当然,如果您的 saucelabs idleTimeout 低于此值,它将首先在 saucelabs 上超时。或者如果您的 saucelabs 值较高但 DEFAULT_TIMEOUT_INTERVAL 较低,那么它将超时。

    // this takes in miliseconds so 1000 = 1 second
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 120000;
    

    【讨论】:

      【解决方案5】:

      Jasmine 对每个规范都有超时,即 jasmine 框架中的每个 it。因此,如果任何规范 (it) 超过了 jasmine 规范的默认超时,那么它就会失败该规范。

      解决方案: 要覆盖单个规范的 jasmine 规范超时,请将第三个参数传递给它: it(description, testFn, timeout_in_millis)

      it('description of test case', function() {
         /*your test 
                     steps
                          here*/
      },120000);//120 seconds timeout for this spec
      

      更多关于timeouts is here的信息

      【讨论】:

        猜你喜欢
        • 2019-09-16
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 2017-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多