如何在Java中使用HtmlUnit?

12

我正在尝试使用Java中的HtmlUnit登录网站。首先输入用户名,然后输入密码。之后我需要从下拉框中选择一个选项。输入用户名和密码似乎已经成功了,但是当我尝试从下拉框中选择该项时,我遇到了错误。有人能帮我解决吗?我的代码如下:

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlOption;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlSelect;


public class homePage {
  public static void main(String[] args) throws Exception {

    final WebClient webClient = new WebClient();
    final HtmlPage page = webClient.getPage("website name here");
    HtmlElement usrname = page.getElementByName("username");
    usrname.click();
    usrname.type("myusername");
    HtmlElement psswrd = page.getElementByName("password");
    psswrd.click();
    psswrd.type("mypassword");
    HtmlSelect select = (HtmlSelect) page.getElementById("cmbProducts");
    HtmlOption option = select.getOptionByValue("ITDirect");
    select.setSelectedAttribute(option, true);
    HtmlElement signin = page.getElementByName("SignIn");
    signin.click();
    System.out.println(page.getTitleText());
    webClient.closeAllWindows();
  }
}

5
告诉我们你收到了什么样的错误信息会非常有帮助。 - Tyler
2个回答

5
以下是HTMLunit单元测试的代码:

这里是HTMLunit单元测试的代码。

final HtmlSelect select = form.getSelectsByName("select1").get(0);
final List<HtmlOption> expected = new ArrayList<HtmlOption>();
expected.add(select.getOptionByValue("option1"));
expected.add(select.getOptionByValue("option3"));

请注意,他们使用getSelectsByName而不是getElementById。
这里有一个链接到单元测试,你可以看到它们如何规定使用API。 http://htmlunit.sourceforge.net/xref-test/com/gargoylesoftware/htmlunit/html/HtmlSelectTest.html

3

获取登录用户名和密码的表单。

以下是一个示例:

   HtmlPage page3;
   page3 = webClient.getPage("Website");
   HtmlForm loginForm = page3.getFormByName("loginForm");
   HtmlTextInput username = loginForm.getInputByName("NameofUsernameElement");
   HtmlPasswordInput pass = loginForm.getInputByName("NameofPassowordElement");
   HtmlSubmitInput b = loginForm.getInputByValue("LoginButtonValue");

   username.setValueAttribute("Actualy Username");
   pass.setValueAttribute("Actual Password");
   HtmlPage page2;
   page2 = b.click();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接