2011-08-26 50 views
1

当前使用HtmlUnit。HtmlUnit,试图获取2个表单,获得第二个表单的异常

获取第一个登录页面没有问题,成功登录,下一页,点击链接以获取“MyDetails”页面。

获得“MyDetails”页面后,我想获得与获取第一个登录表单相同的方式。

为什么我需要得到的形式是,我想改变密码,并在字段中的形式。

当我尝试获得第二个形式,它给了我的异常,如下所示:

com.gargoylesoftware.htmlunit.ElementNotFoundException:的ElementName = [表]的attributeName = [名]的AttributeValue = [窗口2]

HtmlForm form2 = page3.getFormByName("form2"); 

注:

在这行代码给出异常的第一种形式的名称是“form1的” &第二形式的名称是“窗口2”。

这是HtmlUnit的问题吗?

代码:

所有的
try { 
    WebClient webclient = new WebClient(BrowserVersion.FIREFOX_3_6); 
    HtmlPage page1 = webclient.getPage("http://www.highveld.mobi/pages/clubvip/login.aspx"); 

    HtmlForm form = page1.getFormByName("form1"); 
    HtmlSubmitInput buttonLogin = form.getInputByName("cmdLogin"); 

    HtmlTextInput cellLogin = form.getInputByName("txtCellNumber"); 
    HtmlPasswordInput passLogin = form.getInputByName("txtLoginPassword"); 
    cellLogin.setValueAttribute(change); 
    passLogin.setValueAttribute(oldPass); 

    HtmlPage page2 = buttonLogin.click(); 

    HtmlAnchor link = page2.getAnchorByHref("updateprofile.aspx"); 
    HtmlPage page3 = link.click(); 

    System.out.println(page3.getUrl()); 
    HtmlForm form2 = page3.getFormByName("form2"); 


    HtmlPasswordInput pass = form2.getInputByName("txtPassword"); 
    HtmlPasswordInput passConfirm = form2.getInputByName("txtConfirmPassword"); 
    HtmlSubmitInput button = form2.getInputByName("cmdUpdate"); 

    pass.setValueAttribute(newPass); 
    passConfirm.setValueAttribute(newPass); 

    HtmlPage page4 = button.click(); 
} 

回答

2

首先,请升级到2.9的HtmlUnit如果你使用的是旧版本。有了这个

System.out.println(page3.getUrl()); 
HtmlForm form2 = page3.getFormByName("form2"); 

: 其次,这种替换此

System.out.println(page3.getUrl()); 
System.out.println(page3.asXml()); 
HtmlForm form2 = page3.getFormByName("form2"); 

并检查Form2的元素是否存在等,这点我敢肯定它不应该存在,因为它是抛出ElementNotFoundException。

我通常使用XPath而不是getFormByName,你也可以尝试一下。

希望这会有所帮助!

+0

LOL OMS! 您尝试查看的网页存在错误,请检查您提交的信息或稍后重试。 手机号码无效。怪不得!当我将这些单元格号码添加到数据库时,0 infront会被截断!谢谢! – Foxticity

相关问题