diff --git a/test/pom.xml b/test/pom.xml index dabd2c37a609b0b0d6507b3e285d8eedee2b62a7..1560a16a2479c20b25fe34b0607796fc66e16539 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -150,6 +150,12 @@ THE SOFTWARE. org.jvnet.hudson embedded-rhino-debugger 1.2 + + + org.jvnet.hudson + htmlunit-core-js + + diff --git a/test/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElementUtil.java b/test/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElementUtil.java index c8d599b11f7e72673e0aa24185589fd68f0b2227..23372d6740385d1c529533cbc6f035b5636cff8a 100644 --- a/test/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElementUtil.java +++ b/test/src/main/java/com/gargoylesoftware/htmlunit/html/HtmlElementUtil.java @@ -28,6 +28,9 @@ import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebClientUtil; import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; /** * {@link HtmlElement} helper methods. @@ -58,4 +61,16 @@ public class HtmlElementUtil { WebClientUtil.waitForJSExec(webClient); } } + + /** + * Does the supplied element define the specified HTML "class" name. + * @param element The element to check. + * @param className The HTML "class" name to check for. + * @return {@code true} if the element defines the specified class, otherwise {@code false}. + */ + public static boolean hasClassName(HtmlElement element, String className) { + String classAttribute = element.getAttribute("class"); + Set classes = new HashSet<>(Arrays.asList(classAttribute.split(" "))); + return classes.contains(className); + } } diff --git a/test/src/main/java/org/jvnet/hudson/test/JenkinsRule.java b/test/src/main/java/org/jvnet/hudson/test/JenkinsRule.java index c58951f490b02cb408a7d60f365cf85565a640b1..394555c489cd03b0698dcc1f92316e4d18ca2931 100644 --- a/test/src/main/java/org/jvnet/hudson/test/JenkinsRule.java +++ b/test/src/main/java/org/jvnet/hudson/test/JenkinsRule.java @@ -37,6 +37,7 @@ import com.gargoylesoftware.htmlunit.WebResponseListener; import com.gargoylesoftware.htmlunit.html.DomNode; import com.gargoylesoftware.htmlunit.html.HtmlButton; import com.gargoylesoftware.htmlunit.html.HtmlElement; +import com.gargoylesoftware.htmlunit.html.HtmlElementUtil; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlImage; import com.gargoylesoftware.htmlunit.html.HtmlInput; @@ -1341,9 +1342,12 @@ public class JenkinsRule implements TestRule, MethodRule, RootAction { */ public HtmlPage submit(HtmlForm form, String name) throws Exception { for( HtmlElement e : form.getHtmlElementsByTagName("button")) { - HtmlElement p = (HtmlElement)e.getParentNode().getParentNode(); - if(e instanceof HtmlButton && p.getAttribute("name").equals(name)) { - return (HtmlPage)HtmlFormUtil.submit(form, (HtmlButton) e); + HtmlElement p = (HtmlElement)e.getParentNode().getParentNode(); + if (p.getAttribute("name").equals(name) && HtmlElementUtil.hasClassName(p, "yui-submit-button")) { + // For YUI handled submit buttons, just do a click. + return (HtmlPage) HtmlElementUtil.click(e); + } else if (e.getAttribute("name").equals(name)) { + return (HtmlPage) HtmlFormUtil.submit(form, e); } } throw new AssertionError("No such submit button with the name "+name);