Подождите, пока элемент будет виден в транспортире - PullRequest
0 голосов
/ 07 сентября 2018

Я потратил пару дней, пытаясь заставить элементы 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 (() => { . Элемент ($ ( 'li.unsigned')) нажмите (); })

  • protractor.ExpectedConditions, как вы можете видеть выше, но это тоже не сработало.

  • Я также добавил опцию в моем скрипте onPrepare для управления implicitWait, вот так:

    onPrepare: function () { . Browser.manage () времени ожидания () implicitlyWait (15000);.

Единственный способ заставить его работать, это удалить все, что я пробовал, и использовать browser.sleep (10000), прежде чем пытаться щелкнуть элемент.

Если у кого-то есть представление о том, что может вызвать проблему, или что еще я мог бы попробовать, милости просим!

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Итак, немного поиграв с моим кодом, я заставил его работать только с добавлением к 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().

Наличие ExpectedConditions с implicitWait создало проблему, которая привела к тайм-ауту, но я не знаю причину.

0 голосов
/ 07 сентября 2018

даже у меня была похожая проблема, и я добавил эти строки в свой конфиг

 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;
});
...