box*_*oxx 11 javascript ruby selenium webdriver htmlunit
当我加载页面时,HtmlUnit抛出异常并导致我的测试崩溃
caps = Selenium::WebDriver::Remote::Capabilities.htmlunit(:javascript_enabled => true)
driver = Selenium::WebDriver.for(:remote, :desired_capabilities => caps)
driver.navigate.?? url
Run Code Online (Sandbox Code Playgroud)
ReferenceError:未定义"x".(net.sourceforge.htmlunit.corejs.javascript.EcmaError)
如果我使用Firefox驱动程序,则不会抛出异常.
caps = Selenium::WebDriver::Remote::Capabilities.firefox
Run Code Online (Sandbox Code Playgroud)
或者为HtmlUnit驱动程序禁用JavaScript
caps = Selenium::WebDriver::Remote::Capabilities.htmlunit(:javascript_enabled => false)
Run Code Online (Sandbox Code Playgroud)
我无法更改测试页面上的代码并解决问题,因此我需要忽略它或以任何方式使用Firefox JavaScript Engine而不是标准的HtmlUnit JavaScript引擎.
是否可以在不更改测试页代码的情况下解决我的问题?
更新: 尝试Capybara + WebKit作为Selenium + HtmlUnit的替代品 - 工作正常,没有错误.但我还是想在不改变框架的情况下解决问题.
小智 18
对于Java只有:
在最新的版本WebClient(这是由包装HTMLUnitDriver)client.setThrowExceptionOnScriptError(false)方法已经过时了.在子类化HTMLUnitDriver的情况下,您需要覆盖modifyWebClient方法:
public class MyHtmlUnitDriver extends HtmlUnitDriver {
...
@Override
protected WebClient modifyWebClient(WebClient client) {
//currently does nothing, but may be changed in future versions
WebClient modifiedClient = super.modifyWebClient(client);
modifiedClient.getOptions().setThrowExceptionOnScriptError(false);
return modifiedClient;
}
}
Run Code Online (Sandbox Code Playgroud)
在查看源代码后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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12338 次 |
| 最近记录: |