title: How to get element by Xpath in HtmlUnit
body: <p>I am trying to search Amazon. I want to choose category, for ex.  Books, type some search criteria, for ex. java and to click Go button. My problem is clicking the Go button. I've got exception:</p>
  
  <blockquote>
    <p>Exception in thread "main" java.lang.IndexOutOfBoundsException: Index:
    0, Size: 0    at java.util.ArrayList.rangeCheck(ArrayList.java:571)   at
    java.util.ArrayList.get(ArrayList.java:349)   at
    Bot.clickSubmitButton(Bot.java:77)    at Bot.main(Bot.java:111)</p>
  </blockquote>
  
  <p>Here is my code:</p>
  
  <pre><code>/**
   * @author ivan.bisevac
   */
  
  import java.io.IOException;
  import java.net.MalformedURLException;
  
  import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
  import com.gargoylesoftware.htmlunit.WebClient;
  import com.gargoylesoftware.htmlunit.html.HtmlImageInput;
  import com.gargoylesoftware.htmlunit.html.HtmlInput;
  import com.gargoylesoftware.htmlunit.html.HtmlOption;
  import com.gargoylesoftware.htmlunit.html.HtmlPage;
  import com.gargoylesoftware.htmlunit.html.HtmlSelect;
  import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
  
  public class Bot {
      private HtmlPage currentPage;
  
      public HtmlPage getCurrentPage() {
          return currentPage;
      }
  
      public Bot() {
  
      }
  
      /**
       * Bot constructor
       * 
       * @param pageAddress
       *            Address to go.
       * @throws IOException
       * @throws MalformedURLException
       * @throws FailingHttpStatusCodeException
       */
      public Bot(String pageAddress) throws FailingHttpStatusCodeException,
              MalformedURLException, IOException {
          this();
          this.goToAddress(pageAddress);
      }
  
      /**
       * 
       * @param pageAddress
       * @throws FailingHttpStatusCodeException
       * @throws MalformedURLException
       *             If pageAddress isn't formatted good (for example, it is just
       *             www.google.com without http://) then this exception is thrown
       * @throws IOException
       */
      public void goToAddress(String pageAddress)
              throws FailingHttpStatusCodeException, MalformedURLException,
              IOException {
          WebClient webClient = new WebClient();
          currentPage = webClient.getPage(pageAddress);
      }
  
      /**
       * Fills text into input field
       * 
       * @param inputId
       *            &lt;input&gt; tag id
       * @param textValue
       *            Text to fill into input field
       */
      public void setInputValue(String inputId, String textValue) {
          HtmlInput input = (HtmlInput) currentPage.getElementById(inputId);
          input.setValueAttribute(textValue);
      }
  
      /**
       * 
       * @param buttonId
       *            Button id
       * @throws IOException
       */
      public void clickImageButton(String xpathExpr) throws IOException {
          HtmlImageInput button = (HtmlImageInput) currentPage
                  .getFirstByXPath(xpathExpr);
          currentPage = (HtmlPage) button.click();
      }
  
      /**
       * 
       * @param radioButtonId
       * @param radioButtonOption
       * @throws IOException
       * @throws InterruptedException
       */
      public void selectRadioButton(String radioButtonId, String radioButtonOption)
              throws IOException, InterruptedException {
          final HtmlInput radio = (HtmlInput) currentPage
                  .getElementById(radioButtonId);
          radio.click();
          Thread.sleep(10000);
      }
  
      /**
       * 
       * @param dropListId
       * @param dropListOption
       */
      public void selectDropList(String dropListId, String dropListOption) {
          HtmlSelect select = (HtmlSelect) currentPage.getElementById(dropListId);
          HtmlOption option = select.getOptionByValue(dropListOption);
          select.setSelectedAttribute(option, true);
      }
  
      public static void main(String[] args) throws IOException {
          Bot bot = new Bot("http://www.amazon.com");
          bot.selectDropList("searchDropdownBox", "search-alias=stripbooks");
          bot.setInputValue("twotabsearchtextbox", "java");
          bot.clickImageButton("//div[@id='navGoButton']/input");
          bot.getCurrentPage().getTitleText();
      }
  }
  </code></pre>
  
  <p>Obvoiusly there is some problem in method clickSumbitButton, in selecting input element inside div. It gives empty array. Would someone help me to solve this problem?</p>
  
  <p>Edit: After refactoring method clickImageButton, I have error on line:
      currentPage = (HtmlPage) button.click();
  Here is stack trace:</p>
  
  <blockquote>
    <p>Exception in thread "main" java.lang.NullPointerException     at
    Bot.clickImageButton(Bot.java:81)     at Bot.main(Bot.java:114)</p>
  </blockquote>