Java - HtmlUnit - 无法使用javascript单击锚点

时间:2015-02-13 12:38:43

标签: java javascript htmlunit

我正在尝试使用HtmlUnit在我们的内部HP Project和Portfolio Management中运行搜索。但我遇到了一个问题,我无法点击“搜索”,看起来像:

    <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点击其他一些锚点,其中一些非常好(如登录),有些也有相同的结果。

1 个答案:

答案 0 :(得分: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
    }