HtmlUnit,由ajax更新的文本框

时间:2014-11-19 23:23:19

标签: ajax htmlunit

我正在尝试使用随机名称生成器在网页上创建一个字符,它有ajax的文本链接,当您单击它时会在文本字段中放置新的随机链接

<a href="./ajax_suggestname.php" ajaxcip="true" ajaxcip_target="#charactername" ajaxcip_datatype="Attributes">suggest name</a>

我得到像这样的锚

private HtmlAnchor getAnchorByAttribute(HtmlPage managementPage, String attribute) {
    for (HtmlAnchor anchor : managementPage.getAnchors()) {
        if (anchor.asText().equals(attribute)) {
            return anchor;
        }
    }
    return null;
}

然后我尝试从字段中获取更新的名称

private String getSuggestName(HtmlPage managementPage, HtmlForm form) throws IOException {
    HtmlAnchor suggestName = getAnchorByAttribute(managementPage, "suggest name");
    suggestName.click();
    int tries = 10;
    while (tries-- > 0 && form.getInputByName("name").getValueAttribute().isEmpty()) {
        synchronized (managementPage) {
            try {
                managementPage.wait(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    return form.getInputByName("name").getValueAttribute();
}

生成名称小于秒,但函数始终返回空字符串。 我在锚点上调用的click方法返回如下所示的新页面:

<?xml version="1.0" encoding="ISO-8859-1"?>
<html>
  <head/>
  <body/>
</html>

虽然我希望它与以前的格式相同,但生成的名称。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

前几天我有类似的问题,我知道你必须等待ajax请求的执行,最好是重试一段时间,直到页面没有更新(使用任何条件)这里是代码的例子(其中适合我)

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
}