From 65a25b13185b04bc0e669ee103345b08407c1b34 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 7 Apr 2015 16:01:37 +0300 Subject: [PATCH] A new method (and property) for clicking on the element via JavaScript. Helpful for instable web applications and testing in IE --- .../com/codeborne/selenide/Configuration.java | 9 +++++++ .../impl/AbstractSelenideElement.java | 26 ++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/codeborne/selenide/Configuration.java b/src/main/java/com/codeborne/selenide/Configuration.java index f346814b0f..d1b4afa085 100644 --- a/src/main/java/com/codeborne/selenide/Configuration.java +++ b/src/main/java/com/codeborne/selenide/Configuration.java @@ -48,6 +48,15 @@ public class Configuration { */ public static boolean startMaximized = Boolean.parseBoolean(System.getProperty("selenide.start-maximized", "true")); + /** + * ATTENTION! Automatic WebDriver waiting after click isn't working in case of using this feature. + * Use clicking via JavaScript instead common element clicking. + * This solution may be helpfull for testing in Internet Explorer. + * + * Default value: false + */ + public static boolean clickViaJs = Boolean.parseBoolean(System.getProperty("selenide.click-via-js", "false")); + /** * Does Selenide need to take screenshots on failing tests. * diff --git a/src/main/java/com/codeborne/selenide/impl/AbstractSelenideElement.java b/src/main/java/com/codeborne/selenide/impl/AbstractSelenideElement.java index be02e15c32..33af504ee4 100644 --- a/src/main/java/com/codeborne/selenide/impl/AbstractSelenideElement.java +++ b/src/main/java/com/codeborne/selenide/impl/AbstractSelenideElement.java @@ -236,6 +236,10 @@ else if ("click".equals(method.getName())) { click(); return null; } + else if ("clickViaJs".equals(method.getName())) { + clickViaJs(); + return null; + } else if ("contextClick".equals(method.getName())) { contextClick(); return null; @@ -306,7 +310,11 @@ protected boolean matches(Condition condition) { protected void setSelected(boolean selected) { WebElement element = waitForElement(); if (element.isSelected() ^ selected) { - element.click(); + if(!clickViaJs) { + element.click(); + } else { + executeJavaScript("arguments[0].click()", element); + } } } @@ -334,7 +342,15 @@ protected WebElement waitForElement() { } protected void click() { - waitForElement().click(); + if(!clickViaJs) { + waitForElement().click(); + } else { + clickViaJs(); + } + } + + protected void clickViaJs() { + executeJavaScript("arguments[0].click()", waitForElement()); } protected void contextClick() { @@ -353,7 +369,11 @@ protected void dragAndDropTo(String targetCssSelector) { protected void followLink() { WebElement link = waitForElement(); String href = link.getAttribute("href"); - link.click(); + if(!clickViaJs) { + link.click(); + } else { + executeJavaScript("arguments[0].click()", link); + } // JavaScript $.click() doesn't take effect for if (href != null) {