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"