2015-02-13 5 views
0

Я пытаюсь запустить поиск в нашем внутреннем управлении проектами HP и управлении портфелем с помощью HtmlUnit. Но я столкнулся вопрос, который я не могу нажать на «Поиск», который выглядит следующим образом:Java - HtmlUnit - Не могу нажать на якорь с javascript

<span id="SEARCH_BUTTON_LINK" class="primBtn" name="SEARCH_BUTTON_LINK"> 
 
     <a href="javascript:search()"></a> 
 
    </span>

Вот мой код:

final WebClient webClient = new WebClient(); 
    webClient.getOptions().setJavaScriptEnabled(true); 
    webClient.getOptions().setCssEnabled(false); 
    webClient.getOptions().setThrowExceptionOnScriptError(false); 
    webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
    final String savedSearchURI = "my_url"; 
    HtmlPage page = webClient.getPage(savedSearchURI); 
    HtmlAnchor a = page.getAnchorByHref("javascript:search()");     
    page=a.click(); 

Но тем не менее я все еще оставаться на том же стр. Если я сделаю то же самое в браузере - я перешел на страницу с результатами поиска. Вот что я уже пробовал:

BrowserVersion 
    synchronized (page) {page.wait(2000);} 
    waitForBackgroundJavaScript(1000); 
    waitForBackgroundJavaScriptBeforeStart(1000); 

Я полностью потерян и не могу понять, что происходит. Я попытался щелкнуть на некоторых других якорях с javascripts, и некоторые из них работают отлично (например, логин), а некоторые имеют одинаковый результат.

ответ

0

Несколько раз JS требует времени для выполнения, так что вы должны ждать исполнения, лучше всего повтор в течение некоторого времени, пока страница не обновляется (с помощью каких-либо условий) здесь пример кода

HtmlForm form = page.getForms().get(0); 
    HtmlTextArea textArea = form.getTextAreaByName("scandata"); 
    HtmlSubmitInput button = form.getInputByValue("Submit"); 
    HtmlPage res = button.click(); 
    int input_length = page.getByXPath("//input").size(); 
    int tries = 5; 
    while (tries > 0 && input_length < 12) { //you can change number of tries and condition according to your need 
     tries--; 
     synchronized (page) { 
     page.wait(2000); //wait 
    } 
    input_length = page.getByXPath("//input").size(); //input length is example of condtion 
    } 
+0

Спасибо за ответ, но я уже пробовал разные способы подождать, подождал около минуты, в то время как в браузере этот скрипт работает около 1-2 секунд. И это не помогло мне. И я не мог найти другого решения. Я пытаюсь переключиться на Selenium, но найти другое обходное решение и еще одну страницу с предопределенными настройками поиска. –

Смежные вопросы