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