一尘不染

使用WebDriver时是否可以忽略JavaScript异常(HtmlUnit,Ruby绑定)

selenium

当我加载页面时,HtmlUnit引发异常并使测试崩溃

caps = Selenium::WebDriver::Remote::Capabilities.htmlunit(:javascript_enabled => true)
driver = Selenium::WebDriver.for(:remote, :desired_capabilities => caps)
driver.navigate.то url

ReferenceError:未定义“
x”。(net.sourceforge.htmlunit.corejs.javascript.EcmaError)

如果我使用Firefox驱动程序,则不会引发任何异常。

caps = Selenium::WebDriver::Remote::Capabilities.firefox

或为HtmlUnit驱动程序禁用JavaScript

caps = Selenium::WebDriver::Remote::Capabilities.htmlunit(:javascript_enabled => false)

我无法更改测试页上的代码并解决问题,因此我需要忽略它,或者以任何方式使用Firefox JavaScript Engine而不是标准的HtmlUnit
JavaScript Engine。

是否可以在不更改测试页代码的情况下解决我的问题?

更新: 尝试将Capybara + WebKit替换为Selenium + HtmlUnit的替代方法-
正常运行,没有错误。但是我仍然想在不更改框架的情况下解决问题。


阅读 286

收藏
2020-06-26

共1个答案

一尘不染

查看的来源后HtmlUnitDriver,似乎无法自定义要更改的行为。解决此问题最简单的方法是修补并重新编译Selenium服务器(可能是,也可能不是)。您需要添加以下行:

--- HtmlUnitDriver.java 2012-01-05 17:45:22.779579136 +0100
+++ HtmlUnitDriver.java 2012-01-05 18:14:51.415106195 +0100
@@ -255,6 +255,7 @@
     WebClient client = newWebClient(version);
     client.setHomePage(WebClient.URL_ABOUT_BLANK.toString());
     client.setThrowExceptionOnFailingStatusCode(false);
+    client.setThrowExceptionOnScriptError(false);
     client.setPrintContentOnFailingStatusCode(false);
     client.setJavaScriptEnabled(enableJavascript);
     client.setRedirectEnabled(true);
2020-06-26