Почему HtmlUnitDriver не выполняет JavaScript? - PullRequest
14 голосов
/ 28 октября 2011

У меня возникла следующая проблема: Я запускаю 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"), но это не может быть правильным способом сделать это.

Ответы [ 5 ]

21 голосов
/ 30 мая 2012

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

6 голосов
/ 28 октября 2011

Вам нужно инициализировать HtmlUnitDriver с включенным javascript true

new HtmlUnitDriver(true);
4 голосов
/ 15 февраля 2012

Если вы хотите установить BrowserVersion, а также включить Javascript с помощью HtmlUnitDriver, ваша инициализация должна выглядеть следующим образом (поскольку нет способа сделать оба с помощью конструктора):

HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6);
driver.setJavascriptEnabled(true);

Это позволит вам использовать определение браузера по вашему выбору и использовать Javascript.

3 голосов
/ 20 июня 2012

Возможно, вам понадобится сделать это:

WebDriver driver = new HtmlUnitDriver(BrowserVersion.INTERNET_EXPLORER_8);
((HtmlUnitDriver) driver).setJavascriptEnabled(true);
2 голосов
/ 13 сентября 2016

Ну, есть простой способ включить возможности браузера и javascript, вы можете сделать следующее:

Webdriver driver = new HtmlUnitDriver(BrowserVersion.Chrome,true);

True указывает, что должен быть включен javascript.@ Гленн Нельсон,

...