Почему 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(). Хотя я не использую их в эти дни, я не могу подтвердить. Было бы здорово, если кто-то проверит их и обновит этот ответ.

Ответ 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 должен быть включен. @Гленн Нельсон,