我正在尝试使用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点击其他一些锚点,其中一些非常好(如登录),有些也有相同的结果。
答案 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
}