等待元素在量角器中可见

时间:2018-09-07 16:08:30

标签: javascript angular promise protractor

我花了几天的时间来使量角器单击元素在单击按钮后出现在页面上可见。但是大多数时候我都有这个错误:

  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.
        at ontimeout (timers.js:498:11)
        at tryOnTimeout (timers.js:323:5)
        at Timer.listOnTimeout (timers.js:290:5)

到目前为止,我尝试了几件事:

  • browser.waitForAngular正在阻止脚本,即使我可以 请参阅第二页。
  • 多个browser.driver.wait实现,如下所示:

    browser.driver.wait(EC.visibilityOf($('li.unsigned')),10000).then(()=> {   element($('li.unsigned'))。click(); })

  • 如上所示,
  • protractor.ExpectedConditions效果不佳。

  • 我还在onPrepare脚本中添加了一个选项来管理隐式等待,如下所示:

    onPrepare:函数(){     browser.manage()。timeouts()。implicitlyWait(15000);

使它起作用的唯一方法是删除所有尝试的内容,并在尝试单击该元素之前使用browser.sleep(10000)。

如果有人对导致问题的原因或我可以尝试的其他方法有所了解,欢迎您!

2 个答案:

答案 0 :(得分:0)

即使我有类似的问题,我也在配置中添加了这些行

 jasmineNodeOpts: {
// Default time to wait in ms before a test fails.
   defaultTimeoutInterval: 250000
},
allScriptsTimeout: 180000

以及我的规格

var originalTimeout;  
beforeEach(function () {
originalTimeout = jasmine.defaultTimeoutInterval;
jasmine.defaultTimeoutInterval = 50000;
});

it("texttobe", function(){
}

afterEach(function () {
jasmine.defaultTimeoutInterval = originalTimeout;
});

答案 1 :(得分:0)

因此,在使用了更多代码之后,我将其与onPrepareprotractor.conf.js的附加内容一起使用:

  onPrepare: function () {
    browser.manage().timeouts().implicitlyWait(30000);
    require('ts-node').register({
      project: './tsconfig.e2e.json'
    });
  }

然后执行browser.driver.findElement(by.css(element)).then()

将ExpectedConditions与hiddenWait结合使用会造成一个导致超时的问题,但我不知道原因。