Bug 1387470 - Use moz:webdriverClick capability for spec conforming element click. r=ato

To allow geckodriver to temporarily opt-in for using the webdriver
conforming click, a new custom capability has to be created for
Marionette. If not specified the legacy clickElement method will
be used instead.

MozReview-Commit-ID: LuyTjLJXMGL

--HG--
extra : rebase_source : 8e133fb2d9767ea580468013fedff5233fd8eb93
This commit is contained in:
Henrik Skupin 2017-09-01 17:11:35 +02:00
parent bf3d38a14c
commit 269febe5eb
6 changed files with 25 additions and 26 deletions

View File

@ -673,12 +673,11 @@ GeckoDriver.prototype.listeningPromise = function() {
* <dt><code>proxy</code> (Proxy object)
* <dd>Defines the proxy configuration.
*
* <dt><code>specificationLevel</code> (number)
* <dd>If set to 1, a WebDriver conforming <i>WebDriver::ElementClick</i>
* implementation will be used.
*
* <dt><code>moz:accessibilityChecks</code> (boolean)
* <dd>Run a11y checks when clicking elements.
*
* <dt><code>moz:webdriverClick</code> (boolean)
* <dd>Use a WebDriver conforming <i>WebDriver::ElementClick</i>.
* </dl>
*
* <h4>Timeouts object</h4>

View File

@ -67,14 +67,14 @@ class TestCapabilities(MarionetteTestCase):
self.assertIn("moz:accessibilityChecks", self.caps)
self.assertFalse(self.caps["moz:accessibilityChecks"])
self.assertIn("specificationLevel", self.caps)
self.assertEqual(self.caps["specificationLevel"], 0)
self.assertIn("moz:webdriverClick", self.caps)
self.assertEqual(self.caps["moz:webdriverClick"], False)
def test_set_specification_level(self):
def test_set_webdriver_click(self):
self.marionette.delete_session()
self.marionette.start_session({"specificationLevel": 2})
self.marionette.start_session({"moz:webdriverClick": True})
caps = self.marionette.session_capabilities
self.assertEqual(2, caps["specificationLevel"])
self.assertEqual(True, caps["moz:webdriverClick"])
def test_we_get_valid_uuid4_when_creating_a_session(self):
self.assertNotIn("{", self.marionette.session_id,

View File

@ -132,7 +132,7 @@ class TestClick(TestLegacyClick):
def setUp(self):
TestLegacyClick.setUp(self)
self.marionette.delete_session()
self.marionette.start_session({"specificationLevel": 1})
self.marionette.start_session({"moz:webdriverClick": True})
def test_click_element_obscured_by_absolute_positioned_element(self):
self.marionette.navigate(obscured_overlay)

View File

@ -1368,7 +1368,7 @@ function clickElement(msg) {
return interaction.clickElement(
seenEls.get(id),
capabilities.get("moz:accessibilityChecks"),
capabilities.get("specificationLevel") >= 1
capabilities.get("moz:webdriverClick")
);
}, commandID, pageTimeout, loadEventExpected, true);

View File

@ -351,11 +351,11 @@ session.Capabilities = class extends Map {
["rotatable", appinfo.name == "B2G"],
// proprietary
["specificationLevel", 0],
["moz:processID", Services.appinfo.processID],
["moz:profile", maybeProfile()],
["moz:accessibilityChecks", false],
["moz:headless", Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo).isHeadless],
["moz:processID", Services.appinfo.processID],
["moz:profile", maybeProfile()],
["moz:webdriverClick", false],
]);
}
@ -442,9 +442,9 @@ session.Capabilities = class extends Map {
matched.set("timeouts", timeouts);
break;
case "specificationLevel":
assert.positiveInteger(v);
matched.set("specificationLevel", v);
case "moz:webdriverClick":
assert.boolean(v);
matched.set("moz:webdriverClick", v);
break;
case "moz:accessibilityChecks":

View File

@ -310,10 +310,10 @@ add_test(function test_Capabilities_ctor() {
ok(caps.has("rotatable"));
equal(0, caps.get("specificationLevel"));
equal(false, caps.get("moz:accessibilityChecks"));
ok(caps.has("moz:processID"));
ok(caps.has("moz:profile"));
equal(false, caps.get("moz:accessibilityChecks"));
equal(false, caps.get("moz:webdriverClick"));
run_next_test();
});
@ -339,10 +339,10 @@ add_test(function test_Capabilities_toJSON() {
equal(caps.get("rotatable"), json.rotatable);
equal(caps.get("specificationLevel"), json.specificationLevel);
equal(caps.get("moz:accessibilityChecks"), json["moz:accessibilityChecks"]);
equal(caps.get("moz:processID"), json["moz:processID"]);
equal(caps.get("moz:profile"), json["moz:profile"]);
equal(caps.get("moz:accessibilityChecks"), json["moz:accessibilityChecks"]);
equal(caps.get("moz:webdriverClick"), json["moz:webdriverClick"]);
run_next_test();
});
@ -381,11 +381,11 @@ add_test(function test_Capabilities_fromJSON() {
caps = fromJSON({timeouts: timeoutsConfig});
equal(123, caps.get("timeouts").implicit);
equal(0, caps.get("specificationLevel"));
caps = fromJSON({specificationLevel: 123});
equal(123, caps.get("specificationLevel"));
Assert.throws(() => fromJSON({specificationLevel: "foo"}));
Assert.throws(() => fromJSON({specificationLevel: -1}));
equal(false, caps.get("moz:webdriverClick"));
caps = fromJSON({"moz:webdriverClick": true});
equal(true, caps.get("moz:webdriverClick"));
Assert.throws(() => fromJSON({"moz:webdriverClick": "foo"}));
Assert.throws(() => fromJSON({"moz:webdriverClick": 1}));
caps = fromJSON({"moz:accessibilityChecks": true});
equal(true, caps.get("moz:accessibilityChecks"));