代码之家  ›  专栏  ›  技术社区  ›  Jean-Baptiste

等待元素在量角器中可见

  •  0
  • Jean-Baptiste  · 技术社区  · 7 年前

    我花了几天的时间,试图使量角器点击元素,这些元素在点击按钮后出现在页面上。但大多数时候我都会犯这样的错误:

      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)。然后(()=>{ 元素($('li.unsigned')).click(); })

    • protractor.ExpectedConditions 正如你在上面看到的,这并没有起到很好的作用。

    • 我还在onprepare脚本中添加了一个选项来管理implicitwait,如下所示:

      onprepare:函数(){ browser.manage().timeouts().implicitlywait(15000个);

    我让它工作的唯一方法是删除我尝试的所有内容并使用浏览器。在尝试单击元素之前先睡眠(10000)。

    如果有人知道是什么导致了这个问题,或者我还可以尝试什么,欢迎!

    2 回复  |  直到 7 年前
        1
  •  0
  •   Vin    7 年前

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

     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;
    });
    
        2
  •  0
  •   Jean-Baptiste    7 年前

    所以,在对我的代码做了更多的修改之后,我把它添加到了 onPrepare 在里面 protractor.conf.js 以下内容:

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

    通过做一个 browser.driver.findElement(by.css(element)).then() 是的。

    使用implicitwait的expectedconditions创建了一个导致超时的问题,但是我不知道原因。