Как запустить скрипт Google Apps из HtmlUnit? - PullRequest
2 голосов
/ 07 июня 2011

У меня есть ссылка на странице Сайтов Google, на которой запущен скрипт Google Apps. Работает нормально, когда я вручную нажимаю на ссылку в Firefox.

Кажется, все работает нормально, когда я делаю то же самое с помощью HtmlUnit. С помощью HtmlUnit я могу войти (необходимо выполнить вход при запуске сценариев Google Apps), перейти на веб-страницу, определить ссылку и щелкнуть ее, но сценарий не запускается.

Суть кода проста:

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = webClient.getPage("https://sites.google.com/site/mywebpage");
HtmlAnchor anchor = page.getAnchorByName("MyAnchor");
anchor.click();

Так чего не хватает или что я делаю не так?

Я создал исходную ссылку на веб-странице с:

<a href="/macros/sites?action=run&lib=094bahv51120b3d65&funcName=MyFunctionName" name="MyAnchor">Click here to run function</a>

При сохранении редактирования веб-страницы Сайты Google автоматически меняют это на

<a href="#" name="MyAnchor" class="apps-script-run-link" id="ACiQKe2HyNeo..etc...01120b3d65#MyFunctionName">Click here to run function</a>

Не работает click(), потому что он действует на атрибут href, который теперь является просто "#" вместо определения ссылки? Или языковая поддержка HtmlUnit для JavaScript (Mozilla Rhino) не выполняет Javascript правильно для обработки нажатой ссылки (что означает, что мне нужно заменить Rhino чем-то, что распознает Javascript на веб-странице сайтов Google)? Или какая-то другая ошибка, которую я сделал?

Я заблудился, поэтому любая помощь очень ценится!

UPDATE

Я последовал вашему предложению, Родни, и обнаружил, что проблема не заключалась в выходе с сайтов Google. Использование HtmlUnit для нажатия на ссылку «Выйти» после щелчка по ссылке для выполнения скрипта заставляет скрипт работать нормально. Единственная проблема заключается в том, что возникает следующая ошибка (которая не останавливает выполнение скрипта):

SEVERE: запуск задания завершился с неожиданным RuntimeException:
Ошибка типа: невозможно установить для свойства "innerHTML" значение null «Готовый сценарий: Готовый сценарий MyFunctionName "

ОБНОВЛЕНИЕ 2

Теперь решили и эту проблему. Недостаточно времени для завершения сценария перед выходом из системы. Добавление это исправило это:

webClient.waitForBackgroundJavaScriptStartingBefore(5000);

Большое спасибо за вашу помощь, Родни - и Навин за хорошее редактирование!

Ответы [ 2 ]

0 голосов
/ 07 июня 2011

HtmlUnit имеет довольно хорошую поддержку Javascript, поэтому я сомневаюсь, что это проблема.

Откуда вы знаете, что скрипт не запускался?Или лучше, как вы узнали бы, с точки зрения HtmlUnit, если скрипт успешно запущен?Когда вы нажимаете на ссылку в FF, вы, вероятно, видите, что что-то происходит.Вы полагаетесь на человеческое зрение и браузер, предназначенный для использования человеком.С HtmlUnit вам нужно указать вашему коду , что нужно «увидеть» тот же результат, будь то проверка последующего дерева DOM, обработка всплывающего окна или все, что нужно.Это немного меняет мышление.

Что делает твой сценарий?Манипулировать содержимым страницы?Открыть диалог?Перенаправить на другую страницу?Некоторые вещи HtmlUnit будет обрабатывать автоматически, а некоторые (например, открытие диалогов) требуют определения обработчиков.

0 голосов
/ 07 июня 2011

Работает ли он в Firefox? Если это так, проблема может быть сама htmlunit, который не является настоящим браузером. Попробуйте вместо этого использовать Watir или iMacros.

...