Кратко опишите проблему, с которой вы столкнулись (или функцию, которую вы хотите добавить в WebdriverIO). Расскажите нам, что вы пытались сделать и что произошло вместо этого. Помните, это _не_ место, чтобы задавать вопросы. Для этого присоединяйтесь к чату Gitter ( )!
Я пробовал использовать Gitter, но никто не ответил.
При необходимости опишите более подробно проблему, с которой вы столкнулись.
Я бы хотел, чтобы мой тест не прошел, если на странице есть ошибки javascript.
NA? Тесты проходят нормально, вот в чем проблема.
Пожалуйста, запомните это с помощью примера кода; проще воспроизвести ошибку и гораздо быстрее исправить ее.
Может быть, загрузить страницу и onload = function () {throw "провалить этот тест!" }
Затем запустите тест, который просто посещает эту страницу, и увидите, что тест все еще проходит, даже если в консоли будут созданы ошибки javascript.
Мне кажется, что это очень простой вариант использования. Я считаю, что у .Net selenium есть возможность для этого. В PHP и Codeception я прикрепляюсь к каждому «шагу», как и каждая команда в wdio, будь то waitFor *, getText или url (), и каждый шаг я проверяю на наличие ошибок, которые всплывают до window.onerror. Есть ли способ запускать функцию на каждом шаге в wdio?
Полагаю, можно было бы сделать что-то вроде:
window.onerror = function () {
document.write('');
}
Это приведет к тому, что следующий шаг потерпит неудачу. Но это кажется немного ненадежным.
Это, конечно, будет совпадать с командой:
beforeSuite(() => browser.execute(...));
Есть ли способ запускать функцию на каждом шаге в wdio?
Да, у wdio testrunner есть для этого хук
Присоединяйтесь к нашему на подобные вопросы. Это не обязательно проблема.
Отлично спасибо! Я отправлю свое решение, чтобы оно не прошло тест
и, возможно, мы сможем найти пример использования в документации !!
Любые предложения о том, как не пройти тест, если есть ошибки?
Я попробовал поговорить в чате, но меня проигнорировали.
Это проблема, потому что это очень распространенный вариант использования, который полностью недокументирован.
Вот что я придумал для средства проверки ошибок javascript, которое я использовал на другом сайте, и Codeception, теперь работает с Angular и wdio:
beforeCommand: function (commandName, args) {
if (browser.getUrl().indexOf(this.baseUrl) > -1) {
browser.execute(function () {
if (window.wdioErrorHandler !== window.onerror) {
const oldHandler = window.onerror;
window.windowErrors = [];
window.onerror = window.wdioErrorHandler = function (err) {
window.windowErrors.push(err + '');
if (typeof oldHandler === 'function') {
oldHandler.apply(this, arguments);
}
}
}
})
}
},
afterCommand: function (commandName, args, result, error) {
if (browser.getUrl().indexOf(this.baseUrl) > -1) {
const errors = browser.execute(function () {
return window.windowErrors;
});
if (errors.value !== null && errors.value.length > 0) {
throw new Error('Javascript errors! ' + errors.value);
}
}
}
Как я намеренно не выполняю команду из блока afterCommand? Мне нужно, чтобы тест не прошел, но даже с throw
там все равно говорится, что тест пройден.
Есть ли где-нибудь в документации примеры использования хуков? Может в разделе отладки?
Этот поиск действительно не показывает ничего полезного: https://www.google.com/search?q=wdio+hooks+example