我有以下问题:我正在使用HtmlUnitDriver与Browserversion Firefox_3_6运行Selenium 2.9的JUnit测试用例。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=" + <%=System.currentTimeMillis()%>);
}
getLoadingState();
}
我想去ABC。
如果我用FirefoxDriver执行我的测试,它可以工作。
是否有办法得到这个工作与HtmlUnitDriver?我的测试工作,如果我手动调用driver.get("http://host/ABC.do"),但这不能是正确的方式来做到这一点。
您可以通过以下方式启用JavaScript
-
new HtmlUnitDriver(true);
-
driver.setJavascriptEnabled(true);
你需要做的是等待,直到JavaScript在get(url)
之后执行。
您可以使用Thread.sleep()
方法来增加一些延迟。
HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6);
driver.setJavascriptEnabled(true);
driver.get(url);
Thread.sleep(100);
runTest();
正如@Corey在评论中指出的那样,使用显式和隐式等待而不是Thread.sleep()
可能会更好。因为我现在不用了,所以我不能确认。如果有人测试他们并更新这个答案就太好了。
您需要初始化HtmlUnitDriver
与启用javascript true
new HtmlUnitDriver(true);
如果您希望设置BrowserVersion
以及启用Javascript与HtmlUnitDriver,您的初始化需要看起来像下面(因为没有办法通过构造函数做到这两点):
HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6);
driver.setJavascriptEnabled(true);
这将允许您使用您选择的浏览器定义并使用Javascript。
您可能需要这样做:
WebDriver driver = new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER_8);
((HtmlUnitDriver) driver).setJavascriptEnabled(true);
嗯,有一个简单的方法来启用浏览器功能和javascript,你可以这样做:
Webdriver driver = new HtmlUnitDriver(BrowserVersion.Chrome,true);
True指定应该启用javascript。@Glenn纳尔逊,