diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /testing/marionette/harness/marionette_harness/tests/unit/test_typing.py | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'testing/marionette/harness/marionette_harness/tests/unit/test_typing.py')
-rw-r--r-- | testing/marionette/harness/marionette_harness/tests/unit/test_typing.py | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_typing.py b/testing/marionette/harness/marionette_harness/tests/unit/test_typing.py new file mode 100644 index 000000000..ca63a0dc7 --- /dev/null +++ b/testing/marionette/harness/marionette_harness/tests/unit/test_typing.py @@ -0,0 +1,332 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +import urllib + +from marionette_driver.by import By +from marionette_driver.errors import ElementNotInteractableException +from marionette_driver.keys import Keys + +from marionette_harness import MarionetteTestCase, skip, skip_if_mobile + + +def inline(doc): + return "data:text/html;charset=utf-8,{}".format(urllib.quote(doc)) + + +class TypingTestCase(MarionetteTestCase): + + def setUp(self): + super(TypingTestCase, self).setUp() + + if self.marionette.session_capabilities["platformName"] == "darwin": + self.mod_key = Keys.META + else: + self.mod_key = Keys.CONTROL + + +class TestTypingChrome(TypingTestCase): + + def setUp(self): + super(TestTypingChrome, self).setUp() + self.marionette.set_context("chrome") + + @skip_if_mobile("Interacting with chrome elements not available for Fennec") + def test_cut_and_paste_shortcuts(self): + with self.marionette.using_context("content"): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + self.assertEqual("", keyReporter.get_property("value")) + keyReporter.send_keys("zyxwvutsr") + self.assertEqual("zyxwvutsr", keyReporter.get_property("value")) + + # select all and cut + keyReporter.send_keys(self.mod_key, "a") + keyReporter.send_keys(self.mod_key, "x") + self.assertEqual("", keyReporter.get_property("value")) + + url_bar = self.marionette.find_element(By.ID, "urlbar") + + # Clear contents first + url_bar.send_keys(self.mod_key, "a") + url_bar.send_keys(Keys.BACK_SPACE) + self.assertEqual("", url_bar.get_attribute("value")) + + url_bar.send_keys(self.mod_key, "v") + self.assertEqual("zyxwvutsr", url_bar.get_property("value")) + + +class TestTypingContent(TypingTestCase): + + def testShouldFireKeyPressEvents(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys("a") + result = self.marionette.find_element(By.ID, "result") + self.assertTrue("press:" in result.text) + + def testShouldFireKeyDownEvents(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys("I") + result = self.marionette.find_element(By.ID, "result") + self.assertTrue("down" in result.text) + + def testShouldFireKeyUpEvents(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys("a") + result = self.marionette.find_element(By.ID, "result") + self.assertTrue("up:" in result.text) + + def testShouldTypeLowerCaseLetters(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys("abc def") + self.assertEqual("abc def", keyReporter.get_property("value")) + + def testShouldBeAbleToTypeCapitalLetters(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys("ABC DEF") + self.assertEqual("ABC DEF", keyReporter.get_property("value")) + + def testCutAndPasteShortcuts(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + self.assertEqual("", keyReporter.get_property("value")) + keyReporter.send_keys("zyxwvutsr") + self.assertEqual("zyxwvutsr", keyReporter.get_property("value")) + + # select all and cut + keyReporter.send_keys(self.mod_key, "a") + keyReporter.send_keys(self.mod_key, "x") + self.assertEqual("", keyReporter.get_property("value")) + + keyReporter.send_keys(self.mod_key, "v") + self.assertEqual("zyxwvutsr", keyReporter.get_property("value")) + + def testShouldBeAbleToTypeQuoteMarks(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys("\"") + self.assertEqual("\"", keyReporter.get_property("value")) + + def testShouldBeAbleToTypeTheAtCharacter(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys("@") + self.assertEqual("@", keyReporter.get_property("value")) + + def testShouldBeAbleToMixUpperAndLowerCaseLetters(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys("me@eXample.com") + self.assertEqual("me@eXample.com", keyReporter.get_property("value")) + + def testArrowKeysShouldNotBePrintable(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + keyReporter = self.marionette.find_element(By.ID, "keyReporter") + keyReporter.send_keys(Keys.ARROW_LEFT) + self.assertEqual("", keyReporter.get_property("value")) + + def testWillSimulateAKeyUpWhenEnteringTextIntoInputElements(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyUp") + element.send_keys("I like cheese") + result = self.marionette.find_element(By.ID, "result") + self.assertEqual(result.text, "I like cheese") + + def testWillSimulateAKeyDownWhenEnteringTextIntoInputElements(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyDown") + element.send_keys("I like cheese") + result = self.marionette.find_element(By.ID, "result") + # Because the key down gets the result before the input element is + # filled, we're a letter short here + self.assertEqual(result.text, "I like chees") + + def testWillSimulateAKeyPressWhenEnteringTextIntoInputElements(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyPress") + element.send_keys("I like cheese") + result = self.marionette.find_element(By.ID, "result") + # Because the key down gets the result before the input element is + # filled, we're a letter short here + self.assertEqual(result.text, "I like chees") + + def testWillSimulateAKeyUpWhenEnteringTextIntoTextAreas(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyUpArea") + element.send_keys("I like cheese") + result = self.marionette.find_element(By.ID, "result") + self.assertEqual("I like cheese", result.text) + + def testWillSimulateAKeyDownWhenEnteringTextIntoTextAreas(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyDownArea") + element.send_keys("I like cheese") + result = self.marionette.find_element(By.ID, "result") + # Because the key down gets the result before the input element is + # filled, we're a letter short here + self.assertEqual(result.text, "I like chees") + + def testWillSimulateAKeyPressWhenEnteringTextIntoTextAreas(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyPressArea") + element.send_keys("I like cheese") + result = self.marionette.find_element(By.ID, "result") + # Because the key down gets the result before the input element is + # filled, we're a letter short here + self.assertEqual(result.text, "I like chees") + + @skip_if_mobile("Bug 1324752 - Arrow keys cannot be sent in Fennec") + def testShouldReportKeyCodeOfArrowKeysUpDownEvents(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + result = self.marionette.find_element(By.ID, "result") + element = self.marionette.find_element(By.ID, "keyReporter") + + element.send_keys(Keys.ARROW_DOWN) + + self.assertIn("down: 40", result.text.strip()) + self.assertIn("up: 40", result.text.strip()) + + element.send_keys(Keys.ARROW_UP) + self.assertIn("down: 38", result.text.strip()) + self.assertIn("up: 38", result.text.strip()) + + element.send_keys(Keys.ARROW_LEFT) + self.assertIn("down: 37", result.text.strip()) + self.assertIn("up: 37", result.text.strip()) + + element.send_keys(Keys.ARROW_RIGHT) + self.assertIn("down: 39", result.text.strip()) + self.assertIn("up: 39", result.text.strip()) + + # And leave no rubbish/printable keys in the "keyReporter" + self.assertEqual("", element.get_property("value")) + + @skip("Reenable in Bug 1068728") + def testNumericShiftKeys(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + result = self.marionette.find_element(By.ID, "result") + element = self.marionette.find_element(By.ID, "keyReporter") + numericShiftsEtc = "~!@#$%^&*()_+{}:i\"<>?|END~" + element.send_keys(numericShiftsEtc) + self.assertEqual(numericShiftsEtc, element.get_property("value")) + self.assertIn(" up: 16", result.text.strip()) + + def testLowerCaseAlphaKeys(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyReporter") + lowerAlphas = "abcdefghijklmnopqrstuvwxyz" + element.send_keys(lowerAlphas) + self.assertEqual(lowerAlphas, element.get_property("value")) + + @skip("Reenable in Bug 1068735") + def testUppercaseAlphaKeys(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + result = self.marionette.find_element(By.ID, "result") + element = self.marionette.find_element(By.ID, "keyReporter") + upperAlphas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + element.send_keys(upperAlphas) + self.assertEqual(upperAlphas, element.get_property("value")) + self.assertIn(" up: 16", result.text.strip()) + + @skip("Reenable in Bug 1068726") + def testAllPrintableKeys(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + result = self.marionette.find_element(By.ID, "result") + element = self.marionette.find_element(By.ID, "keyReporter") + allPrintable = "!\"#$%&'()*+,-./0123456789:<=>?@ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" + element.send_keys(allPrintable) + + self.assertTrue(allPrintable, element.get_property("value")) + self.assertIn(" up: 16", result.text.strip()) + + @skip("Reenable in Bug 1068733") + def testSpecialSpaceKeys(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyReporter") + element.send_keys("abcd" + Keys.SPACE + "fgh" + Keys.SPACE + "ij") + self.assertEqual("abcd fgh ij", element.get_property("value")) + + def testShouldTypeAnInteger(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + element = self.marionette.find_element(By.ID, "keyReporter") + element.send_keys(1234) + self.assertEqual("1234", element.get_property("value")) + + def testShouldSendKeysToElementsWithoutTheValueAttribute(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + + # If we don't get an error below we are good + self.marionette.find_element(By.TAG_NAME, "body").send_keys("foo") + + def test_not_interactable_if_hidden(self): + test_html = self.marionette.absolute_url("javascriptPage.html") + self.marionette.navigate(test_html) + not_displayed = self.marionette.find_element(By.ID, "notDisplayed") + self.assertRaises(ElementNotInteractableException, not_displayed.send_keys, "foo") + + def test_appends_to_input_text(self): + self.marionette.navigate(inline("<input>")) + el = self.marionette.find_element(By.TAG_NAME, "input") + el.send_keys("foo") + el.send_keys("bar") + self.assertEqual("foobar", el.get_property("value")) + + def test_appends_to_textarea(self): + self.marionette.navigate(inline("<textarea></textarea>")) + textarea = self.marionette.find_element(By.TAG_NAME, "textarea") + textarea.send_keys("foo") + textarea.send_keys("bar") + self.assertEqual("foobar", textarea.get_property("value")) |