Почему HtmlUnitDriver не выполняет JavaScript?
У меня возникла следующая проблема:
Я запускаю JUnit testCase с Selenium 2.9, используя HtmlUnitDriver с Browserversion Firefox_3_6. 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.do
Если я выполняю свой тест с помощью FirefoxDriver, он работает.
Есть ли способ заставить это работать с HtmlUnitDriver?
Мой тест работает, если я вручную вызываю driver.get( " http://host/ABC.do" ), но это не может быть правильным способом для этого.
Ответы
Ответ 1
Вы можете включить 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()
. Хотя я не использую их в эти дни, я не могу подтвердить. Было бы здорово, если кто-то проверит их и обновит этот ответ.
Ответ 2
Вам нужно инициализировать HtmlUnitDriver
с включением javascript true
new HtmlUnitDriver(true);
Ответ 3
Если вы хотите установить BrowserVersion
, а также включить Javascript с HtmlUnitDriver, ваша инициализация должна выглядеть следующим образом (так как нет никакого способа сделать это через конструктор):
HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6);
driver.setJavascriptEnabled(true);
Это позволит вам использовать определение браузера по вашему выбору и использовать Javascript.
Ответ 4
Вам может понадобиться следующее:
WebDriver driver = new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER_8);
((HtmlUnitDriver) driver).setJavascriptEnabled(true);
Ответ 5
Ну, есть простой способ включить возможности браузера и javascript, вы можете сделать следующее:
Webdriver driver = new HtmlUnitDriver(BrowserVersion.Chrome,true);
True указывает, что javascript должен быть включен. @Гленн Нельсон,