Revision: 978
          http://sourceforge.net/p/jwebunit/code/978
Author:   henryju
Date:     2015-07-13 16:24:04 +0000 (Mon, 13 Jul 2015)
Log Message:
-----------
#134 WebTester.submit() does not find submit button

Modified Paths:
--------------
    
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/ButtonAssertionsTest.java
    
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/FormSubmissionTest.java
    
trunk/jwebunit-commons-tests/src/main/resources/testcases/ButtonAssertionsTest/pageWithOneForm.html
    
trunk/jwebunit-commons-tests/src/main/resources/testcases/FormSubmissionTest/SingleNamedButtonForm.html
    
trunk/jwebunit-htmlunit-plugin/src/main/java/net/sourceforge/jwebunit/htmlunit/HtmlUnitTestingEngineImpl.java
    trunk/src/changes/changes.xml

Modified: 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/ButtonAssertionsTest.java
===================================================================
--- 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/ButtonAssertionsTest.java
 2015-07-13 15:52:13 UTC (rev 977)
+++ 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/ButtonAssertionsTest.java
 2015-07-13 16:24:04 UTC (rev 978)
@@ -34,9 +34,11 @@
     @Test
     public void testAssertButtonwithOneFormfound() {
         beginAt("/pageWithOneForm.html");
+        assertSubmitButtonPresent();
         assertButtonPresent("button1");
         assertButtonPresent("buttonOutside");
         setWorkingForm("form1");
+        assertSubmitButtonPresent();
         assertButtonPresent("button1");
         assertButtonPresent("buttonOutside");
         assertButtonPresent("button1");

Modified: 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/FormSubmissionTest.java
===================================================================
--- 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/FormSubmissionTest.java
   2015-07-13 15:52:13 UTC (rev 977)
+++ 
trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/FormSubmissionTest.java
   2015-07-13 16:24:04 UTC (rev 978)
@@ -58,6 +58,10 @@
         setTextField("color", "red");
         submit();
         assertTextPresent("color=[red]");
+        clickLink("return");
+        setTextField("color", "black");
+        submit("button2");
+        assertTextPresent("color=[black]");
     }
 
     @Test

Modified: 
trunk/jwebunit-commons-tests/src/main/resources/testcases/ButtonAssertionsTest/pageWithOneForm.html
===================================================================
--- 
trunk/jwebunit-commons-tests/src/main/resources/testcases/ButtonAssertionsTest/pageWithOneForm.html
 2015-07-13 15:52:13 UTC (rev 977)
+++ 
trunk/jwebunit-commons-tests/src/main/resources/testcases/ButtonAssertionsTest/pageWithOneForm.html
 2015-07-13 16:24:04 UTC (rev 978)
@@ -25,7 +25,7 @@
 <html>
 <body>
 <form id="form1">
-<button id="button1">Testbutton</button>
+<button id="button1" type="submit">Testbutton</button>
 </form>
 <button id="buttonOutside">Outside</button>
 <input type="button" value="Input button" />

Modified: 
trunk/jwebunit-commons-tests/src/main/resources/testcases/FormSubmissionTest/SingleNamedButtonForm.html
===================================================================
--- 
trunk/jwebunit-commons-tests/src/main/resources/testcases/FormSubmissionTest/SingleNamedButtonForm.html
     2015-07-13 15:52:13 UTC (rev 977)
+++ 
trunk/jwebunit-commons-tests/src/main/resources/testcases/FormSubmissionTest/SingleNamedButtonForm.html
     2015-07-13 16:24:04 UTC (rev 978)
@@ -28,6 +28,7 @@
                <input type="submit" name="button" value="click me">
                <input type="hidden" name="myReferer" 
value="FormSubmissionTest/SingleNamedButtonForm.html">
         <input type="hidden" name="hidden" value="foo">
+        <button type="submit" name="button2">A Button</button>
        </form>
 </body>
 </html>
\ No newline at end of file

Modified: 
trunk/jwebunit-htmlunit-plugin/src/main/java/net/sourceforge/jwebunit/htmlunit/HtmlUnitTestingEngineImpl.java
===================================================================
--- 
trunk/jwebunit-htmlunit-plugin/src/main/java/net/sourceforge/jwebunit/htmlunit/HtmlUnitTestingEngineImpl.java
       2015-07-13 15:52:13 UTC (rev 977)
+++ 
trunk/jwebunit-htmlunit-plugin/src/main/java/net/sourceforge/jwebunit/htmlunit/HtmlUnitTestingEngineImpl.java
       2015-07-13 16:24:04 UTC (rev 978)
@@ -1239,9 +1239,11 @@
     List<HtmlElement> btns = new LinkedList<HtmlElement>();
     if (form != null) {
       btns.addAll(getForm().getInputsByName(buttonName));
+      btns.addAll(getForm().getButtonsByName(buttonName));
     } else {
       for (HtmlForm f : getCurrentPage().getForms()) {
         btns.addAll(f.getInputsByName(buttonName));
+        btns.addAll(f.getButtonsByName(buttonName));
       }
     }
     for (HtmlElement o : btns) {
@@ -1276,9 +1278,11 @@
     List<HtmlElement> btns = new LinkedList<HtmlElement>();
     if (form != null) {
       btns.addAll(getForm().getInputsByName(buttonName));
+      btns.addAll(getForm().getButtonsByName(buttonName));
     } else {
       for (HtmlForm f : getCurrentPage().getForms()) {
         btns.addAll(f.getInputsByName(buttonName));
+        btns.addAll(f.getButtonsByName(buttonName));
       }
     }
     for (HtmlElement o : btns) {
@@ -1314,9 +1318,11 @@
     List<HtmlElement> btns = new LinkedList<HtmlElement>();
     if (form != null) {
       btns.addAll(getForm().getInputsByName(buttonName));
+      btns.addAll(getForm().getButtonsByName(buttonName));
     } else {
       for (HtmlForm f : getCurrentPage().getForms()) {
         btns.addAll(f.getInputsByName(buttonName));
+        btns.addAll(f.getButtonsByName(buttonName));
       }
     }
     for (HtmlElement o : btns) {
@@ -1351,16 +1357,54 @@
     }
     return null;
   }
+  
+  private HtmlElement getSubmitButton() {
+    List<HtmlElement> btns = new LinkedList<HtmlElement>();
+    if (form != null) {
+      btns.addAll(getForm().getElementsByAttribute("input", "type", "submit"));
+      btns.addAll(getForm().getElementsByAttribute("input", "type", "image"));
+      btns.addAll(getForm().getElementsByAttribute("button", "type", 
"submit"));
+    } else {
+      for (HtmlForm f : getCurrentPage().getForms()) {
+        btns.addAll(f.getElementsByAttribute("input", "type", "submit"));
+        btns.addAll(f.getElementsByAttribute("input", "type", "image"));
+        btns.addAll(f.getElementsByAttribute("button", "type", "submit"));
+      }
+    }
+    for (HtmlElement o : btns) {
+      if (o instanceof HtmlSubmitInput) {
+        HtmlSubmitInput btn = (HtmlSubmitInput) o;
+        if (form == null) {
+          form = btn.getEnclosingFormOrDie();
+        }
+        return btn;
+      }
+      if (o instanceof HtmlImageInput) {
+        HtmlImageInput btn = (HtmlImageInput) o;
+        if (form == null) {
+          form = btn.getEnclosingFormOrDie();
+        }
+        return btn;
+      }
+      if (o instanceof HtmlButton) {
+        HtmlButton btn = (HtmlButton) o;
+        if (btn.getTypeAttribute().equals("submit")) {
+          if (form == null) {
+            form = btn.getEnclosingFormOrDie();
+          }
+          return btn;
+        }
+      }
+    }
+    return null;
+  }
 
   /**
    * {@inheritDoc}
    */
   @Override
   public boolean hasSubmitButton() {
-    final HtmlForm htmlForm = getForm();
-    List<?> l = htmlForm.getByXPath("//input[@type='submit' or 
@type='image']");
-    List<?> l2 = htmlForm.getByXPath("//button[@type='submit']");
-    return (l.size() > 0 || l2.size() > 0);
+    return getSubmitButton() != null;
   }
 
   /**
@@ -1589,36 +1633,20 @@
    */
   @Override
   public void submit() {
+    HtmlElement btn = getSubmitButton();
+    if (btn == null) {
+      throw new RuntimeException("No submit button found in current form.");
+    }
     try {
-      Object[] inpt = getForm().getHtmlElementsByTagName("input")
-          .toArray();
-      for (int i = 0; i < inpt.length; i++) {
-        if (inpt[i] instanceof HtmlSubmitInput) {
-          ((HtmlSubmitInput) inpt[i]).click();
-          return;
-        }
-        if (inpt[i] instanceof HtmlImageInput) {
-          ((HtmlImageInput) inpt[i]).click();
-          return;
-        }
-        if (inpt[i] instanceof HtmlButton
-          && ((HtmlButton) inpt[i]).getTypeAttribute().equals(
-              "submit")) {
-          ((HtmlButton) inpt[i]).click();
-          return;
-        }
-      }
-
+      btn.click();
     } catch (FailingHttpStatusCodeException e) {
       throw new TestingEngineResponseException(
-          e.getStatusCode(), e);
+        e.getStatusCode(), e);
     } catch (IOException e) {
       throw new RuntimeException(
-          "HtmlUnit Error submitting form using default submit button, "
-            + "check that form has single submit button, otherwise use 
submit(name): \n",
-          e);
+        "HtmlUnit Error submitting form using default submit button, "
+          + "check that form has single submit button, otherwise use 
submit(name): \n", e);
     }
-    throw new RuntimeException("No submit button found in current form.");
   }
 
   /**
@@ -1629,37 +1657,19 @@
    */
   @Override
   public void submit(String buttonName) {
-    List<HtmlElement> l = new LinkedList<HtmlElement>();
-    l.addAll(getForm().getInputsByName(buttonName));
-    l.addAll(getForm().getButtonsByName(buttonName));
+    HtmlElement btn = getSubmitButton(buttonName);
+    if (btn == null) {
+      throw new RuntimeException("No submit button found in current form.");
+    }
     try {
-      for (HtmlElement o : l) {
-        if (o instanceof HtmlSubmitInput) {
-          HtmlSubmitInput inpt = (HtmlSubmitInput) o;
-          inpt.click();
-          return;
-        }
-        if (o instanceof HtmlImageInput) {
-          HtmlImageInput inpt = (HtmlImageInput) o;
-          inpt.click();
-          return;
-        }
-        if (o instanceof HtmlButton) {
-          HtmlButton inpt = (HtmlButton) o;
-          if (inpt.getTypeAttribute().equals("submit")) {
-            inpt.click();
-            return;
-          }
-        }
-      }
+      btn.click();
     } catch (FailingHttpStatusCodeException e) {
       throw new TestingEngineResponseException(
-          e.getStatusCode(), e);
+        e.getStatusCode(), e);
     } catch (IOException e) {
       throw new RuntimeException(
-          "HtmlUnit Error submitting form using default submit button", e);
+        "HtmlUnit Error submitting form using default submit button", e);
     }
-    throw new RuntimeException("No submit button found in current form.");
   }
 
   /**

Modified: trunk/src/changes/changes.xml
===================================================================
--- trunk/src/changes/changes.xml       2015-07-13 15:52:13 UTC (rev 977)
+++ trunk/src/changes/changes.xml       2015-07-13 16:24:04 UTC (rev 978)
@@ -31,6 +31,9 @@
     </properties>
     <body>
         <release version="3.3" date="UNKNOWN" description="HtmlUnit 2.17, Java 
7">
+            <action type="fix" dev="henryju" issue="134" due-to="Joerg 
Troester">
+                WebTester.submit() does not find submit button.
+            </action>
             <action type="update" dev="henryju">
                 Updated to HtmlUnit 2.17.
             </action>

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
JWebUnit-development mailing list
JWebUnit-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jwebunit-development

Reply via email to