diff --git a/docs/APILibraryDocumentation.html b/docs/APILibraryDocumentation.html
index 78776d9b..fb16da6c 100644
--- a/docs/APILibraryDocumentation.html
+++ b/docs/APILibraryDocumentation.html
@@ -1101,7 +1101,7 @@
jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a
diff --git a/docs/DesktopLibraryDocumentation.html b/docs/DesktopLibraryDocumentation.html
index f5307e2a..dd45e2f9 100644
--- a/docs/DesktopLibraryDocumentation.html
+++ b/docs/DesktopLibraryDocumentation.html
@@ -1101,7 +1101,7 @@
jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a
diff --git a/docs/GUILibraryDocumentation.html b/docs/GUILibraryDocumentation.html
index 3c924ce5..c9f4a884 100644
--- a/docs/GUILibraryDocumentation.html
+++ b/docs/GUILibraryDocumentation.html
@@ -1101,7 +1101,7 @@
jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a
diff --git a/docs/MobileLibraryDocumentation.html b/docs/MobileLibraryDocumentation.html
index de7bdb70..8d3f80da 100644
--- a/docs/MobileLibraryDocumentation.html
+++ b/docs/MobileLibraryDocumentation.html
@@ -1101,7 +1101,7 @@
jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a
diff --git a/docs/SOAPLibraryDocumentation.html b/docs/SOAPLibraryDocumentation.html
index 7169ee21..abfc125a 100644
--- a/docs/SOAPLibraryDocumentation.html
+++ b/docs/SOAPLibraryDocumentation.html
@@ -1101,7 +1101,7 @@
jQuery.extend({highlight:function(e,t,n,r){if(e.nodeType===3){var i=e.data.match(t);if(i){var s=document.createElement(n||"span");s.className=r||"highlight";var o=e.splitText(i.index);o.splitText(i[0].length);var u=o.cloneNode(true);s.appendChild(u);o.parentNode.replaceChild(s,o);return 1}}else if(e.nodeType===1&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&!(e.tagName===n.toUpperCase()&&e.className===r)){for(var a=0;a
diff --git a/samples/GUITests.robot b/samples/GUITests.robot
index 600cf65d..bb7346ee 100644
--- a/samples/GUITests.robot
+++ b/samples/GUITests.robot
@@ -23,6 +23,14 @@ Wait for Keywords Test
Wait For And Click Element //a[@href='/robotframework/robotframework']
Wait Until Page Contains Element //div[@id='readme']
+Wait for Keywords Test With Password
+ [Setup] Test Case Setup
+ [Teardown] Close All Browsers
+ Wait For And Input Password //input[@name='q'] robotframework
+ Press Keys //input[@name='q'] RETURN
+ Wait For And Click Element //a[@href='/robotframework/robotframework']
+ Wait Until Page Contains Element //div[@id='readme']
+
Element Value Should Be Equal and not equal Test
[Setup] Test Case Setup http://www.google.com
[Teardown] Close All Browsers
diff --git a/src/Zoomba/GUILibrary.py b/src/Zoomba/GUILibrary.py
index d4c2ce02..d55e4339 100644
--- a/src/Zoomba/GUILibrary.py
+++ b/src/Zoomba/GUILibrary.py
@@ -16,9 +16,9 @@
zoomba = BuiltIn()
zoomba_collections = Collections()
-
SCREENSHOT_COUNTER = itertools.count()
+
class GUILibrary(SeleniumLibrary):
"""Zoomba GUI Library
@@ -87,6 +87,18 @@ def wait_for_and_input_text(self, locator, text, timeout=None):
self.wait_for_and_focus_on_element(locator, timeout)
self.input_text(locator, text)
+ @keyword('Wait For And Input Password')
+ def wait_for_and_input_password(self, locator, password, timeout=None):
+ """This is a series of chained Selenium keywords, that tries to find a web element first, and then input text.
+ The password text is not printed displayed in logs.
+ If the element fails to typed into, it will scroll to the bottom of the page and try again.\n
+ locator: (string) A selenium locator(CSS, XPATH, ID, NAME, etc)\n
+ password: (string) Password text to be typed into the input field.
+ timeout: (float) Time in seconds to wait, will use global timeout if not set.
+ """
+ self.wait_for_and_focus_on_element(locator, timeout)
+ self.input_password(locator, password)
+
@keyword("Wait For And Select Frame")
def wait_for_and_select_frame(self, locator, timeout=None):
"""This is a series of chained Selenium keywords, that first waits until an iFrame exists in the page, and then
diff --git a/test/GUI/GUITests.robot b/test/GUI/GUITests.robot
index a2cd121d..17226563 100644
--- a/test/GUI/GUITests.robot
+++ b/test/GUI/GUITests.robot
@@ -22,6 +22,14 @@ Wait for Keywords Test
wait for and click element //a[@href='/robotframework/robotframework']
wait until page contains element //div[@id='readme']
+Wait for Keywords Test With Password
+ [Teardown] Close All Browsers
+ Test Case Setup
+ wait for and input password //input[@name='q'] robotframework
+ press keys //input[@name='q'] RETURN
+ wait for and click element //a[@href='/robotframework/robotframework']
+ wait until page contains element //div[@id='readme']
+
Element value should be equal and not equal Test
[Teardown] Close All Browsers
Test Case Setup http://www.google.com
diff --git a/test/GUI/test_gui.py b/test/GUI/test_gui.py
index be960d2d..3cd5d88d 100644
--- a/test/GUI/test_gui.py
+++ b/test/GUI/test_gui.py
@@ -77,6 +77,18 @@ def test_wait_for_and_input_text_with_timeout(self):
mock_gui.wait_for_and_focus_on_element.assert_called_with("some_locator", 5)
mock_gui.input_text.assert_called_with("some_locator", "text")
+ def test_wait_for_and_input_password_simple(self):
+ mock_gui = Mock()
+ GUILibrary.wait_for_and_input_password(mock_gui, "some_locator", "text")
+ mock_gui.wait_for_and_focus_on_element.assert_called_with("some_locator", None)
+ mock_gui.input_password.assert_called_with("some_locator", "text")
+
+ def test_wait_for_and_input_password_with_timeout(self):
+ mock_gui = Mock()
+ GUILibrary.wait_for_and_input_password(mock_gui, "some_locator", "text", 5)
+ mock_gui.wait_for_and_focus_on_element.assert_called_with("some_locator", 5)
+ mock_gui.input_password.assert_called_with("some_locator", "text")
+
def test_wait_for_and_select_frame_simple(self):
mock_gui = Mock()
GUILibrary.wait_for_and_select_frame(mock_gui, "some_locator")
diff --git a/version.py b/version.py
index 481582eb..450d53c9 100644
--- a/version.py
+++ b/version.py
@@ -1 +1 @@
-VERSION = "2.9.0"
+VERSION = "2.9.1"