4

我有几个量角器测试,有时我收到一条错误消息:

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、selenium 2.20、量角器 0.20.1

4

5 回答 5

3

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

是的 :) 您可以通过allScriptsTimeoutProtractor 配置中的 (来自Protractor FAQ

您还可以设置defaultTimeoutIntervalinjasmineNodeOpts选项(来自Protractor referenceConf.js

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

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

于 2014-03-31T13:53:27.110 回答
2

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

于 2015-06-22T22:56:11.950 回答
1

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

getPageTimeout : 100000 //in millis, i.e., 100 secs
于 2015-11-03T07:51:27.277 回答
0

我相信 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;
于 2015-08-17T18:56:52.473 回答
0

Jasmine 对每个规范都有超时,即每个it在 jasmine 框架中。因此,如果任何规范 ( 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

有关 超时的更多信息在这里

于 2016-11-05T12:28:43.790 回答