首页 > 解决方案 > 如何在使用 Selenium 的注入代码中故意抛出错误?

问题描述

我有一个带有自定义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);
});

...但是页面本身并没有注意到错误(是的,我已经验证在开发工具中抛出一个会触发预期的处理)。

接下来,我尝试使用一个异步脚本来安排错误,然后是回调:

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

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

...但页面本身仍然没有注意到错误。

我在这里错过了什么吗?

标签: seleniumwebdriveronerror

解决方案


您可以使用以下脚本轻松模拟

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

这应该可以模拟事件


推荐阅读