Как сделать Protractor browser.wait() более многословным?
В тестах транспортира я звоню много раз browser.wait
метод, например, чтобы подождать, когда конкретный элемент появится на экране или он будет активным.
Во многих случаях тесты проходят на моей локальной машине, но не на другой. Я получаю очень общую информацию о тайм-ауте, которая не помогает мне отладить / найти источник проблемы.
Можно ли сделать browser.wait
более подробный, например:
- если хотя бы
defaultTimeoutInterval
пройдет при ожидании определенного элемента, будет ли возможноconsole.log
информация об элементе, который он пытался дождаться, - сделать снимок экрана при возникновении ошибки тайм-аута,
- обеспечить полный стек вызовов при появлении тайм-аута в
browser.wait
3 ответа
Если основная проблема заключается в том, что вы не знаете, для какого элемента истекло время ожидания, я бы предложил написать вспомогательную функцию для ожидания и использовать ее вместо ожидания, что-то вроде:
wait = function(variable, variableName,waitingTime){
console.log('Waiting for ' + variableName);
browser.wait(protractor.ExpectedConditions.elementToBeClickable(variablename),waitingTime);
console.log('Success');
}
Поскольку транспортир прекращает выполнение теста после первого сбоя, если время ожидания истекло, консоль не напечатает сообщение об успешном завершении после сбоя загрузки определенного элемента.
Для скриншотов предлагаю попробовать protractor-jasmine2-screenshot-reporter
он генерирует легко читаемый HTML-отчет со снимками экрана и отладочной информацией о неудачных тестах (например, в какой строке кода произошел сбой).
Изучите ожидаемое состояние транспортира, вы можете указать, что ждать и как долго его ждать.
Для скриншотов есть модули npm, которые могут сделать скриншот при неудачном тестировании. Это может помочь.
browser.wait возвращает обещание, так что поймайте ошибку и напечатайте / выбросите что-нибудь значимое, например:
await browser.wait(ExpectedConditions.visibilityOf(css), waitingTime).catch((error) =>
{
throw new CustomError(`Could not find ${css} ${error.message}`)
});