为什么HtmlUnitDriver不执行JavaScript?
我遇到了以下问题:我使用HtmlUnitDriver和Browserversion Firefox_3_6运行带有Selenium 2.9的JUnit testCase。 JavaScript已启用。 现在,当它应该调用并执行以下javaScript函数时,它什么都不做:
function openIdsDocument() { var windowBounds = getWindowBounds(); var XMLHTTP = getAjaxRequestObject("XYZ.do?availableWidth="+windowBounds.width+"&availableHeight="+windowBounds.height, "", true); if (XMLHTTP != null) { XMLHTTP.onreadystatechange = function alertAJAXResponse() { if (XMLHTTP.readyState == 4) { window.location.href = getContextPath() + "ABC.do"; } }; XMLHTTP.send("timestamp=" + ); } getLoadingState(); }
我想去ABC.do
如果我使用FirefoxDriver执行我的测试,它可以工作。
有没有办法让这个使用HtmlUnitDriver? 如果我手动调用driver.get(“ http://host/ABC.do ”),我的测试工作,但这不是正确的方法。
您可以通过执行任一操作来启用JavaScript
-
new HtmlUnitDriver(true);
-
driver.setJavascriptEnabled(true);
你需要做的是等到get(url)
之后执行JavaScript。
您可以使用Thread.sleep()
方法添加一些延迟。
HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6); driver.setJavascriptEnabled(true); driver.get(url); Thread.sleep(100); runTest();
更新
正如@Corey在评论中指出的那样,使用Explicit和Implicit Waits而不是Thread.sleep()
可能更好。 因为我现在不使用它们,但我无法证实。 如果有人测试它们并更新这个答案会很棒。
您需要使用enable javascript true
初始化HtmlUnitDriver
new HtmlUnitDriver(true);
如果您希望设置BrowserVersion
以及使用HtmlUnitDriver启用Javascript,您的初始化需要如下所示(因为没有办法通过构造函数执行):
HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6); driver.setJavascriptEnabled(true);
这将允许您使用您选择的浏览器定义并使用Javascript。
您可能需要这样做:
WebDriver driver = new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER_8); ((HtmlUnitDriver) driver).setJavascriptEnabled(true);
好吧,有一种简单的方法来启用浏览器function和javascript,您可以执行以下操作:
Webdriver driver = new HtmlUnitDriver(BrowserVersion.Chrome,true);
True指定应启用javascript。 @Glenn Nelson,