From: <mgu...@us...> - 2013-09-27 10:03:37
|
Revision: 8519 http://sourceforge.net/p/htmlunit/code/8519 Author: mguillem Date: 2013-09-27 10:03:32 +0000 (Fri, 27 Sep 2013) Log Message: ----------- JavaScript: support click method on any element for FF10+ too. Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElement2Test.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElementTest.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLabelElementTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/changes/changes.xml 2013-09-27 10:03:32 UTC (rev 8519) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="add" dev="mguillem"> + JavaScript: support click method on any element for FF10+ too. + </action> <action type="add" dev="asashour" issue="1539"> JavaScript: window.localStorage and .sessionStorage are supported in Chrome. </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElement.java 2013-09-27 10:03:32 UTC (rev 8519) @@ -2118,7 +2118,7 @@ * Click this element. This simulates the action of the user clicking with the mouse. * @throws IOException if this click triggers a page load that encounters problems */ - @JsxFunction(@WebBrowser(IE)) + @JsxFunction({ @WebBrowser(IE), @WebBrowser(value = FF, minVersion = 10) }) public void click() throws IOException { getDomNodeOrDie().click(); } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElement2Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElement2Test.java 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElement2Test.java 2013-09-27 10:03:32 UTC (rev 8519) @@ -34,6 +34,7 @@ * @version $Revision$ * @author Ahmed Ashour * @author Ronald Brill + * @author Marc Guillemot */ @RunWith(BrowserRunner.class) public class HTMLAnchorElement2Test extends WebDriverTestCase { @@ -147,4 +148,39 @@ + "</body></html>"; loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = "Second", FF3_6 = "First") // in fact not alerts here, but it makes config easier + public void javaScriptAnchorClick() throws Exception { + final String html + = "<html><head><title>First</title><script>\n" + + "function delegateClick() {\n" + + " try {" + + " document.getElementById(\"link1\").click();\n" + + " } catch(e) {}\n" + + "}" + + "</script></head><body>\n" + + "<a id='link1' href='#' onclick='document.form1.submit()'>link 1</a>\n" + + "<form name='form1' action='" + URL_SECOND + "' method='post'>\n" + + "<input type=button id='button1' value='Test' onclick='delegateClick()'>\n" + + "<input name='testText'>\n" + + "</form>\n" + + "</body></html>"; + + final String secondHtml + = "<html>\n" + + "<head><title>Second</title></head>\n" + + "</html>"; + + getMockWebConnection().setResponse(URL_SECOND, secondHtml); + + final WebDriver driver = loadPage2(html); + driver.findElement(By.id("button1")).click(); + + assertEquals(getExpectedAlerts()[0], driver.getTitle()); + } + } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElementTest.java 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLAnchorElementTest.java 2013-09-27 10:03:32 UTC (rev 8519) @@ -14,7 +14,6 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; -import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.IE; import static org.junit.Assert.assertSame; import java.net.MalformedURLException; @@ -27,14 +26,12 @@ import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.BrowserRunner.Browsers; import com.gargoylesoftware.htmlunit.CollectingAlertHandler; import com.gargoylesoftware.htmlunit.MockWebConnection; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.SimpleWebTestCase; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; -import com.gargoylesoftware.htmlunit.html.HtmlButtonInput; import com.gargoylesoftware.htmlunit.html.HtmlPage; /** @@ -144,40 +141,6 @@ } /** - * @throws Exception if the test fails - */ - @Test - @Browsers(IE) - public void javaScriptAnchorClick() throws Exception { - final String html - = "<html><head><title>First</title><script>\n" - + "</script></head><body>\n" - + "<a id='link1' href='#' onclick='document.form1.submit()'>link 1</a>\n" - + "<form name='form1' action='" + URL_SECOND + "' method='post'>\n" - + "<input type=button id='button1' value='Test' onclick='document.getElementById(\"link1\").click()'>\n" - + "<input name='testText'>\n" - + "</form>\n" - + "</body></html>"; - - final String secondHtml - = "<html>\n" - + "<head><title>Second</title></head>\n" - + "</html>"; - - final WebClient client = getWebClient(); - final MockWebConnection conn = new MockWebConnection(); - conn.setResponse(URL_FIRST, html); - conn.setResponse(URL_SECOND, secondHtml); - client.setWebConnection(conn); - - final HtmlPage page = client.getPage(URL_FIRST); - final HtmlButtonInput button = page.getHtmlElementById("button1"); - final HtmlPage page2 = button.click(); - - assertEquals("Second", page2.getTitleText()); - } - - /** * Regression test for https://sourceforge.net/tracker/?func=detail&atid=448266&aid=1689798&group_id=47038. * In href, "this" should be the window and not the link. * @throws Exception if the test fails Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLabelElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLabelElementTest.java 2013-09-26 21:54:54 UTC (rev 8518) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLLabelElementTest.java 2013-09-27 10:03:32 UTC (rev 8519) @@ -14,19 +14,15 @@ */ package com.gargoylesoftware.htmlunit.javascript.host.html; -import static com.gargoylesoftware.htmlunit.BrowserRunner.Browser.FF; - import org.junit.Test; import org.junit.runner.RunWith; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; import com.gargoylesoftware.htmlunit.BrowserRunner; import com.gargoylesoftware.htmlunit.BrowserRunner.Alerts; -import com.gargoylesoftware.htmlunit.BrowserRunner.NotYetImplemented; -import com.gargoylesoftware.htmlunit.SimpleWebTestCase; -import com.gargoylesoftware.htmlunit.html.HtmlButtonInput; -import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput; -import com.gargoylesoftware.htmlunit.html.HtmlLabel; -import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.WebDriverTestCase; /** * Tests for {@link HTMLLabelElement}. @@ -34,9 +30,10 @@ * @version $Revision$ * @author Ahmed Ashour * @author Daniel Gredler + * @author Marc Guillemot */ @RunWith(BrowserRunner.class) -public class HTMLLabelElementTest extends SimpleWebTestCase { +public class HTMLLabelElementTest extends WebDriverTestCase { /** * @throws Exception if the test fails @@ -53,12 +50,11 @@ + "<input type='checkbox' id='checkbox1'><br>\n" + "</body></html>"; - final HtmlPage page = loadPage(html); - final HtmlLabel label = page.getHtmlElementById("label1"); - final HtmlCheckBoxInput checkbox = page.getHtmlElementById("checkbox1"); - assertFalse(checkbox.isChecked()); - label.click(); - assertTrue(checkbox.isChecked()); + final WebDriver driver = loadPage2(html); + final WebElement checkbox = driver.findElement(By.id("checkbox1")); + assertFalse(checkbox.isSelected()); + driver.findElement(By.id("label1")).click(); + assertTrue(checkbox.isSelected()); } /** @@ -67,27 +63,30 @@ * @throws Exception if the test fails */ @Test - @NotYetImplemented(FF) + @Alerts(DEFAULT = "true", FF3_6 = "false") // in fact not used as JS alerts... public void htmlFor_click() throws Exception { final String html = "<html><head><title>First</title><script>\n" + "function doTest() {\n" + " document.getElementById('label1').htmlFor = 'checkbox1';\n" + "}\n" + + "function delegateClick() {" + + " try {\n" + + " document.getElementById('label1').click();\n" + + " } catch (e) {}\n" + + "}\n" + "</script></head><body onload='doTest()'>\n" + "<label id='label1'>My Label</label>\n" + "<input type='checkbox' id='checkbox1'><br>\n" - + "<input type=button id='button1' value='Test' onclick='document.getElementById(\"label1\").click()'>\n" + + "<input type=button id='button1' value='Test' onclick='delegateClick()'>\n" + "</body></html>"; - final HtmlPage page = loadPage(html); - final HtmlCheckBoxInput checkbox = page.getHtmlElementById("checkbox1"); - final HtmlButtonInput button = page.getHtmlElementById("button1"); - assertFalse(checkbox.isChecked()); - button.click(); + final WebDriver driver = loadPage2(html); + final WebElement checkbox = driver.findElement(By.id("checkbox1")); + assertFalse(checkbox.isSelected()); + driver.findElement(By.id("button1")).click(); - final boolean changedByClick = getWebClient().getBrowserVersion().isIE(); - assertTrue(checkbox.isChecked() == changedByClick); + assertEquals(getExpectedAlerts()[0], "" + checkbox.isSelected()); } /** @@ -114,7 +113,7 @@ + "alert(a1.accessKey);\n" + "alert(a2.accessKey);\n" + "</script></body></html>"; - loadPageWithAlerts(html); + loadPageWithAlerts2(html); } /** @@ -127,7 +126,6 @@ = "<html><body><form><label id='a'>a</label></form><script>\n" + "alert(document.getElementById('a').form);\n" + "</script></body></html>"; - loadPageWithAlerts(html); + loadPageWithAlerts2(html); } - } |