Как преднамеренно выдать ошибку во введенном коде с помощью Selenium? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть страница с пользовательской логикой window.addEventListener("error", ...). Я хотел бы проверить, что это работает, и единственный реальный способ сделать это - выдать ошибку.

Я пробовал это:

await browser.executeScript("throw new Error();");

... но сама Selenium видела ошибку и считала ее исключением. Хорошо.

JavascriptError: Error

  at Object.throwDecodedError (node_modules/selenium-webdriver/lib/error.js:550:15)
  at parseHttpResponse (node_modules/selenium-webdriver/lib/http.js:542:13)
  at Executor.execute (node_modules/selenium-webdriver/lib/http.js:468:26)

Далее попытался сделать это асинхронно:

await browser.executeScript(() => {
    setTimeout(() => { throw new Error(); }, 1);
});

... но сама страница не заметила ошибку (и да, я проверил, что добавление одного в инструменты dev вызывает ожидаемую обработку).

Затем я попытался использовать асинхронный скрипт, который планирует ошибку, а затем обратный вызов:

await browser.executeAsyncScript((callback) => {
    setTimeout(
        () => {
            setTimeout(callback, 1);

            throw new Error();
        },
        1);
});

... но сама страница все еще не заметила ошибку.

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете легко смоделировать это, используя скрипт ниже

var errorElem = document.createElement("script");
errorElem.textContent = 'throw new Error("simulated error");'
document.body.append(errorElem);

Это должно быть в состоянии смоделировать событие

...