Skip to content

Instantly share code, notes, and snippets.

@AutomatedTester
Created April 11, 2013 19:45
Show Gist options
  • Select an option

  • Save AutomatedTester/5366577 to your computer and use it in GitHub Desktop.

Select an option

Save AutomatedTester/5366577 to your computer and use it in GitHub Desktop.
# HG changeset patch
# User David Burns <dburns@mozilla.com>
# Date 1365709466 -3600
# Node ID 1d472423c8a08729213fa8eb57168fccd3c44e77
# Parent dbf9ab7dec313fbe76fafcc8fcaaa7b146bbecf0
imported patch bug830197
diff --git a/testing/marionette/client/marionette/tests/unit/test_typing.py b/testing/marionette/client/marionette/tests/unit/test_typing.py
--- a/testing/marionette/client/marionette/tests/unit/test_typing.py
+++ b/testing/marionette/client/marionette/tests/unit/test_typing.py
@@ -1,14 +1,15 @@
# 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/.
from marionette_test import MarionetteTestCase
from keys import Keys
+from errors import ElementNotVisibleException
class TestTyping(MarionetteTestCase):
def testShouldFireKeyPressEvents(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
keyReporter = self.marionette.find_element("id", "keyReporter")
@@ -22,136 +23,136 @@ class TestTyping(MarionetteTestCase):
keyReporter = self.marionette.find_element("id", "keyReporter")
keyReporter.send_keys("I")
result = self.marionette.find_element("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("id", "keyReporter")
keyReporter.send_keys("a")
result = self.marionette.find_element("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("id", "keyReporter")
keyReporter.send_keys("abc def")
self.assertEqual(keyReporter.get_attribute("value"), "abc def")
-
+
def testShouldBeAbleToTypeCapitalLetters(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
keyReporter = self.marionette.find_element("id", "keyReporter")
keyReporter.send_keys("ABC DEF")
self.assertEqual(keyReporter.get_attribute("value"), "ABC DEF")
-
+
def testShouldBeAbleToTypeQuoteMarks(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
keyReporter = self.marionette.find_element("id", "keyReporter")
keyReporter.send_keys("\"")
self.assertEqual(keyReporter.get_attribute("value"), "\"")
-
+
def testShouldBeAbleToTypeTheAtCharacter(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
keyReporter = self.marionette.find_element("id", "keyReporter")
keyReporter.send_keys("@")
self.assertEqual(keyReporter.get_attribute("value"), "@")
-
+
def testShouldBeAbleToMixUpperAndLowerCaseLetters(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
keyReporter = self.marionette.find_element("id", "keyReporter")
keyReporter.send_keys("me@eXample.com")
self.assertEqual(keyReporter.get_attribute("value"), "me@eXample.com")
def testArrowKeysShouldNotBePrintable(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
keyReporter = self.marionette.find_element("id", "keyReporter")
keyReporter.send_keys(Keys.ARROW_LEFT)
self.assertEqual(keyReporter.get_attribute("value"), "")
def testWillSimulateAKeyUpWhenEnteringTextIntoInputElements(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
element = self.marionette.find_element("id", "keyUp")
element.send_keys("I like cheese")
result = self.marionette.find_element("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("id", "keyDown")
element.send_keys("I like cheese")
result = self.marionette.find_element("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("id", "keyPress")
element.send_keys("I like cheese")
result = self.marionette.find_element("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("id", "keyUpArea")
element.send_keys("I like cheese")
result = self.marionette.find_element("id", "result")
self.assertEqual(result.text, "I like cheese")
def testWillSimulateAKeyDownWhenEnteringTextIntoTextAreas(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
element = self.marionette.find_element("id", "keyDownArea")
element.send_keys("I like cheese")
result = self.marionette.find_element("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("id", "keyPressArea")
element.send_keys("I like cheese")
result = self.marionette.find_element("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 testShouldReportKeyCodeOfArrowKeysUpDownEvents(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
result = self.marionette.find_element("id", "result")
element = self.marionette.find_element("id", "keyReporter")
element.send_keys(Keys.ARROW_DOWN)
self.assertTrue("down: 40" in result.text.strip())
self.assertTrue("up: 40" in result.text.strip())
element.send_keys(Keys.ARROW_UP)
self.assertTrue("down: 38" in result.text.strip())
@@ -166,60 +167,60 @@ class TestTyping(MarionetteTestCase):
self.assertTrue("up: 39" in result.text.strip())
# And leave no rubbish/printable keys in the "keyReporter"
self.assertEqual(element.get_attribute("value"), "")
def testNumericShiftKeys(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
result = self.marionette.find_element("id", "result")
element = self.marionette.find_element("id", "keyReporter")
numericShiftsEtc = "~!@#$%^&*()_+{}:i\"<>?|END~"
element.send_keys(numericShiftsEtc)
self.assertEqual(element.get_attribute("value"), numericShiftsEtc)
self.assertTrue(" up: 16" in result.text.strip())
def testLowerCaseAlphaKeys(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
element = self.marionette.find_element("id", "keyReporter")
lowerAlphas = "abcdefghijklmnopqrstuvwxyz"
element.send_keys(lowerAlphas)
self.assertEqual(element.get_attribute("value"), lowerAlphas)
def testUppercaseAlphaKeys(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
result = self.marionette.find_element("id", "result")
element = self.marionette.find_element("id", "keyReporter")
upperAlphas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
element.send_keys(upperAlphas)
self.assertEqual(element.get_attribute("value"), upperAlphas)
self.assertTrue(" up: 16" in result.text.strip())
def testAllPrintableKeys(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
result = self.marionette.find_element("id", "result")
element = self.marionette.find_element("id", "keyReporter")
allPrintable = "!\"#$%&'()*+,-./0123456789:<=>?@ ABCDEFGHIJKLMNOPQRSTUVWXYZ [\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
element.send_keys(allPrintable)
self.assertTrue(element.get_attribute("value"), allPrintable)
self.assertTrue(" up: 16" in result.text.strip())
def testSpecialSpaceKeys(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
-
+
element = self.marionette.find_element("id", "keyReporter")
element.send_keys("abcd" + Keys.SPACE + "fgh" + Keys.SPACE + "ij")
self.assertEqual(element.get_attribute("value"), "abcd fgh ij")
def testShouldTypeAnInteger(self):
test_html = self.marionette.absolute_url("javascriptPage.html")
self.marionette.navigate(test_html)
@@ -228,8 +229,14 @@ class TestTyping(MarionetteTestCase):
self.assertEqual(element.get_attribute("value"), "1234")
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('tag name', 'body').send_keys('foo')
+
+ def testShouldThrowElementNotVisibleWhenInputHidden(self):
+ test_html = self.marionette.absolute_url("javascriptPage.html")
+ self.marionette.navigate(test_html)
+ not_displayed = self.marionette.find_element('id', 'notDisplayed')
+ self.assertRaises(ElementNotVisibleException, not_displayed.send_keys, 'foo')
diff --git a/testing/marionette/client/marionette/www/javascriptPage.html b/testing/marionette/client/marionette/www/javascriptPage.html
--- a/testing/marionette/client/marionette/www/javascriptPage.html
+++ b/testing/marionette/client/marionette/www/javascriptPage.html
@@ -261,13 +261,13 @@
</span>
</div>
<div id="zero" style="width:0;height:0">
<div>
<img src="map.png">
</div>
</div>
-
+<input type='text' id='notDisplayed' style='display:none'>
</body>
</html>
diff --git a/testing/marionette/marionette-listener.js b/testing/marionette/marionette-listener.js
--- a/testing/marionette/marionette-listener.js
+++ b/testing/marionette/marionette-listener.js
@@ -1515,18 +1515,23 @@ function isElementSelected(msg) {
/**
* Send keys to element
*/
function sendKeysToElement(msg) {
let command_id = msg.json.command_id;
try {
let el = elementManager.getKnownElement(msg.json.element, curWindow);
- utils.type(curWindow.document, el, msg.json.value.join(""), true);
- sendOk(command_id);
+ if (checkVisible(el, command_id)) {
+ utils.type(curWindow.document, el, msg.json.value.join(""), true);
+ sendOk(command_id);
+ }
+ else {
+ sendError("Element is not visible", 11, null, command_id)
+ }
}
catch (e) {
sendError(e.message, e.code, e.stack, command_id);
}
}
/**
* Get the position of an element
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment