代码之家  ›  专栏  ›  技术社区  ›  Josh

如何在注入硒的代码中故意抛出错误?

  •  0
  • Josh  · 技术社区  · 6 年前

    我有一个自定义页面 window.addEventListener("error", ...) 逻辑。我想测试一下它是否有效,唯一真正的方法是抛出一个错误。

    我试过这个:

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

    …但硒本身看到了错误,并认为这是一个例外。好的。

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

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

    我是不是错过了什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Josh    6 年前

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

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

    这应该能够模拟事件