Компоненты HTMLUnit и Vue - PullRequest
0 голосов
/ 11 октября 2019

Аналогично HTMLUnit не ждет Javascript , но я пытаюсь использовать HTMLUnit 2.36.0 с VueJS для выполнения формы входа.

ОднакоЯ пробовал решения в предыдущем вопросе, но ни один из них не работает, поскольку я могу использовать Vue. Сам код работает в браузере Chrome и Firefox, но не в HtmlUnit. Он никогда не находит форму, вот моя последняя попытка кода.

        try (final WebClient webClient = new WebClient()) {
//            webClient.setAjaxController(new NicelyResynchronizingAjaxController());

            webClient.getOptions().setUseInsecureSSL(true);
            webClient.getOptions().setJavaScriptEnabled(true);
            webClient.getOptions().setCssEnabled(false);
            webClient.getOptions().setThrowExceptionOnScriptError(true);
            webClient.getOptions().setTimeout(0);
            webClient.getOptions().setRedirectEnabled(true);

            HtmlPage page = webClient.getPage("http://localhost:8081/test.html");
            assertNotNull(page);
            webClient.waitForBackgroundJavaScript(1000);
            while (page.getForms().isEmpty()) {
                System.out.println(page.getForms());
                synchronized (page) {
                    page.wait(2000);
                }
            }
        }

test.html https://codepen.io/trajano/pen/mddeXwQ

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title>Learning Jungle China - Log In</title>
  <script src="//cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>
  <script type="text/javascript" src="//js.learningjungle.com/signon/lj-signon.umd.min.js"></script>
  <link rel="stylesheet" href="//js.learningjungle.com/signon/lj-signon.css" type="text/css" />
</head>

<body>
  <div id="lj-signon">
    <lj-header></lj-header>
    <br />
    <br />
    <br />
    <br />
    <lj-login-form action="/Signon.do"></lj-login-form>
  </div>
</body>
<script>
new Vue({ el: '#lj-signon' });
</script>
</html>

Я попытался поместить скрипт в body, а также в onload. Я также пытался Событие загрузки Javascript, не запускаемое в HtmlUnit

. Я могу убедиться, что сценарии выполняются при добавлении

<script>
document.vue = new Vue({ el: '#lj-signon' });
</script>

с

System.out.println(page.executeJavaScript("document.vue").toString());

не null. Я также проверил, что скрипты, управляющие DOM, отображаются https://stackoverflow.com/a/58334318/242042

В моем случае визуализированный объект - <!---->

Я также пробовал только с Vue ( без компонентов ) и тоже работает правильно.

...