Skip to content

Commit ab99406

Browse files
committed
Firefox: Implementing a capability that disables overlapping checks
1 parent 7d06243 commit ab99406

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

java/client/src/org/openqa/selenium/remote/CapabilityType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public interface CapabilityType {
4141
String UNEXPECTED_ALERT_BEHAVIOUR = "unexpectedAlertBehaviour";
4242
String ELEMENT_SCROLL_BEHAVIOR = "elementScrollBehavior";
4343
String HAS_TOUCHSCREEN = "hasTouchScreen";
44+
String OVERLAPPING_CHECK_DISABLED = "overlappingCheckDisabled";
4445

4546
String LOGGING_PREFS = "loggingPrefs";
4647

java/client/test/org/openqa/selenium/firefox/FirefoxDriverTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
import org.openqa.selenium.WebElement;
4949
import org.openqa.selenium.environment.GlobalTestEnvironment;
5050
import org.openqa.selenium.firefox.internal.ProfilesIni;
51+
import org.openqa.selenium.remote.CapabilityType;
52+
import org.openqa.selenium.remote.DesiredCapabilities;
5153
import org.openqa.selenium.remote.UnreachableBrowserException;
5254
import org.openqa.selenium.support.ui.ExpectedCondition;
5355
import org.openqa.selenium.support.ui.WebDriverWait;
@@ -582,6 +584,29 @@ public void searchingByCssDoesNotOverwriteExistingSizzleDefinition() {
582584
((JavascriptExecutor) driver).executeScript("return window.Sizzle + '';"));
583585
}
584586

587+
@Test
588+
public void testFirefoxCanNativelyClickOverlappingElements() {
589+
DesiredCapabilities capabilities = new DesiredCapabilities();
590+
capabilities.setCapability(CapabilityType.OVERLAPPING_CHECK_DISABLED, true);
591+
WebDriver secondDriver = new FirefoxDriver(capabilities);
592+
try {
593+
secondDriver.get(appServer.whereIs("click_tests/overlapping_elements.html"));
594+
secondDriver.findElement(By.id("under")).click();
595+
assertEquals(secondDriver.findElement(By.id("log")).getText(),
596+
"Log:\n"
597+
+ "mousedown in over (handled by over)\n"
598+
+ "mousedown in over (handled by body)\n"
599+
+ "mouseup in over (handled by over)\n"
600+
+ "mouseup in over (handled by body)\n"
601+
+ "click in over (handled by over)\n"
602+
+ "click in over (handled by body)");
603+
} finally {
604+
secondDriver.quit();
605+
}
606+
}
607+
608+
609+
585610
private WebDriver newFirefoxDriver() {
586611
return newFirefoxDriver(new FirefoxProfile());
587612
}

javascript/firefox-driver/js/sessionstore.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ wdSessionStoreService.CAPABILITY_PREFERENCE_MAPPING = {
167167
'applicationCacheEnabled': 'browser.cache.offline.enable',
168168
'databaseEnabled': 'dom.indexedDB.enabled',
169169
'elementScrollBehavior' : 'webdriver.elementScrollBehavior',
170+
'overlappingCheckDisabled' : 'webdriver.overlappingCheckDisabled',
170171
'locationContextEnabled': 'geo.enabled',
171172
'browserConnectionEnabled': 'dom.network.enabled',
172173
'acceptSslCerts': 'webdriver_accept_untrusted_certs',

javascript/firefox-driver/js/syntheticMouse.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,20 @@ SyntheticMouse.prototype.isElementShownAndClickable = function(element) {
8383
return error;
8484
}
8585

86-
var error = this.isElementClickable(element);
87-
if (error) {
88-
return error;
86+
var checkOverlapping = true;
87+
try {
88+
var prefStore = fxdriver.moz.getService('@mozilla.org/preferences-service;1',
89+
'nsIPrefBranch');
90+
if (prefStore.getBoolPref('webdriver.overlappingCheckDisabled', false)) {
91+
checkOverlapping = false;
92+
}
93+
} catch (ignored) {}
94+
95+
if (checkOverlapping) {
96+
error = this.isElementClickable(element);
97+
if (error) {
98+
return error;
99+
}
89100
}
90101
}
91102

0 commit comments

Comments
 (0)