Skip to content

Commit

Permalink
Wait for and input password (#200)
Browse files Browse the repository at this point in the history
* Wait For And Input Password

* 2.9.1
  • Loading branch information
Wolfe1 authored May 14, 2021
1 parent 99bb76f commit 29ef5f2
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 7 deletions.
2 changes: 1 addition & 1 deletion docs/APILibraryDocumentation.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/DesktopLibraryDocumentation.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/GUILibraryDocumentation.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/MobileLibraryDocumentation.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/SOAPLibraryDocumentation.html
Original file line number Diff line number Diff line change
Expand Up @@ -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<e.childNodes.length;a++){a+=jQuery.highlight(e.childNodes[a],t,n,r)}}return 0}});jQuery.fn.unhighlight=function(e){var t={className:"highlight",element:"span"};jQuery.extend(t,e);return this.find(t.element+"."+t.className).each(function(){var e=this.parentNode;e.replaceChild(this.firstChild,this);e.normalize()}).end()};jQuery.fn.highlight=function(e,t){var n={className:"highlight",element:"span",caseSensitive:false,wordsOnly:false};jQuery.extend(n,t);if(e.constructor===String){e=[e]}e=jQuery.grep(e,function(e,t){return e!=""});e=jQuery.map(e,function(e,t){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")});if(e.length==0){return this}var r=n.caseSensitive?"":"i";var i="("+e.join("|")+")";if(n.wordsOnly){i="\\b"+i+"\\b"}var s=new RegExp(i,r);return this.each(function(){jQuery.highlight(this,s,n.element,n.className)})}
</script>
<script type="text/javascript">
libdoc = {"name": "SOAP_Library", "doc": "<p>Zoomba SOAP Library</p>\n<p>This class is the base Library used to generate automated SOAP Tests in the Zoomba Automation Framework.</p>", "version": "2.9.0", "generated": "2021-05-12 09:19:41", "type": "LIBRARY", "scope": "TEST", "docFormat": "HTML", "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 43, "tags": [], "inits": [], "keywords": [{"name": "Call Soap Method With List Object", "args": [{"name": "action", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "action=None"}, {"name": "soap_object", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "soap_object=None"}], "doc": "<p>Call Soap Method. Calls soap method with list object</p>\n<p>action: (string) SOAP Action to be called.</p>\n<p>soap_object: (list) Soap Object in list format, list must be ordered wrt schema</p>", "shortdoc": "Call Soap Method. Calls soap method with list object ", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 100}, {"name": "Call Soap Method With Object", "args": [{"name": "action", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "action=None"}, {"name": "soap_object", "types": [], "defaultValue": null, "kind": "VAR_NAMED", "required": false, "repr": "**soap_object"}], "doc": "<p>Call Soap Method with dictionary object. Calls soap method</p>\n<p>action: (string) SOAP Action to be called.</p>\n<p>soap_object: (dict) Soap Object in dict format, dict must contain all required parts of schema object.</p>", "shortdoc": "Call Soap Method with dictionary object. Calls soap method ", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 110}, {"name": "Convert Soap Response To Json", "args": [{"name": "soap_response", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "soap_response=None"}], "doc": "<p>Convert Soap Response To Dictionary: This keyword builds a dictionary from the sudsLibrary response</p>\n<p>json_actual_response: (request response object) The response from an API.</p>\n<p>return: There is no actual returned output, other than error messages when comparisons fail.</p>", "shortdoc": "Convert Soap Response To Dictionary: This keyword builds a dictionary from the sudsLibrary response", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 139}, {"name": "Create Soap Session", "args": [{"name": "host", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "host=None"}, {"name": "endpoint", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "endpoint=None"}, {"name": "alias", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias=None"}, {"name": "kwargs", "types": [], "defaultValue": null, "kind": "VAR_NAMED", "required": false, "repr": "**kwargs"}], "doc": "<p>Create Soap Session. This Keyword utilizes the WSDL to create a soap client.</p>\n<p>host: (string) The host url.</p>\n<p>endpoint: (string) SOAP API endpoint containing the actions to be referenced.</p>\n<p>**kwargs: (optional) Parameters that could be included to add options to client creation. Current supported parameters are:</p>\n<p>set_location: http address</p>", "shortdoc": "Create Soap Session. This Keyword utilizes the WSDL to create a soap client.", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 68}, {"name": "Create Soap Session And Fix Wsdl", "args": [{"name": "host", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "host=None"}, {"name": "endpoint", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "endpoint=None"}, {"name": "alias", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias=None"}, {"name": "kwargs", "types": [], "defaultValue": null, "kind": "VAR_NAMED", "required": false, "repr": "**kwargs"}], "doc": "<p>Create Soap Session. This Keyword utilizes the WSDL and directly accesses calls from sudsLibrary.</p>\n<p>host: (string) The host url.</p>\n<p>endpoint: (string) SOAP API endpoint containing the actions to be referenced.</p>\n<p>alias: (string} Sets the alias for the SudsLibrary Framework **kwargs: (optional) Parameters that could be included to add options to client creation. Current supported parameters are:</p>\n<p>set_location: http address</p>", "shortdoc": "Create Soap Session. This Keyword utilizes the WSDL and directly accesses calls from sudsLibrary.", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 51}, {"name": "Create Soap Session And Set Location", "args": [{"name": "host", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "host=None"}, {"name": "endpoint", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "endpoint=None"}, {"name": "alias", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias=None"}, {"name": "set_location", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "set_location=None"}, {"name": "fix", "types": [], "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "fix=False"}], "doc": "<p>Create Soap Session and Set Location. In addition to the client creation, this keyword sets the location as specified.</p>\n<p>host: (string) The host url.</p>\n<p>endpoint: (string) SOAP API endpoint containing the actions to be referenced.</p>\n<p>set_location: (string) If set will overwrite the WSDL location with specified address.</p>\n<p>If set to None will replace location with host and endpoint specified</p>", "shortdoc": "Create Soap Session and Set Location. In addition to the client creation, this keyword sets the location as specified.", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 84}, {"name": "Create Wsdl Objects", "args": [{"name": "wsdl_type", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "wsdl_type=None"}, {"name": "object_dict", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "object_dict=None"}], "doc": "<p>Create Wsdl Objects. This Keyword utilizes the WSDL to create a WSDL object based on the information provided.</p>\n<p>wsdl_type: (string) Wsdl object to be created.</p>\n<p>object_dict: (dict) Python Dictionary containing values and nested dictionaries with construction similar to wsdl defined objects.</p>\n<p>return: (response object) Returns the SOAP client object.</p>", "shortdoc": "Create Wsdl Objects. This Keyword utilizes the WSDL to create a WSDL object based on the information provided.", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 125}], "dataTypes": {"enums": [], "typedDicts": []}}
libdoc = {"name": "SOAP_Library", "doc": "<p>Zoomba SOAP Library</p>\n<p>This class is the base Library used to generate automated SOAP Tests in the Zoomba Automation Framework.</p>", "version": "2.9.1", "generated": "2021-05-14 11:20:39", "type": "LIBRARY", "scope": "TEST", "docFormat": "HTML", "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 43, "tags": [], "inits": [], "keywords": [{"name": "Call Soap Method With List Object", "args": [{"name": "action", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "action=None"}, {"name": "soap_object", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "soap_object=None"}], "doc": "<p>Call Soap Method. Calls soap method with list object</p>\n<p>action: (string) SOAP Action to be called.</p>\n<p>soap_object: (list) Soap Object in list format, list must be ordered wrt schema</p>", "shortdoc": "Call Soap Method. Calls soap method with list object ", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 100}, {"name": "Call Soap Method With Object", "args": [{"name": "action", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "action=None"}, {"name": "soap_object", "types": [], "defaultValue": null, "kind": "VAR_NAMED", "required": false, "repr": "**soap_object"}], "doc": "<p>Call Soap Method with dictionary object. Calls soap method</p>\n<p>action: (string) SOAP Action to be called.</p>\n<p>soap_object: (dict) Soap Object in dict format, dict must contain all required parts of schema object.</p>", "shortdoc": "Call Soap Method with dictionary object. Calls soap method ", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 110}, {"name": "Convert Soap Response To Json", "args": [{"name": "soap_response", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "soap_response=None"}], "doc": "<p>Convert Soap Response To Dictionary: This keyword builds a dictionary from the sudsLibrary response</p>\n<p>json_actual_response: (request response object) The response from an API.</p>\n<p>return: There is no actual returned output, other than error messages when comparisons fail.</p>", "shortdoc": "Convert Soap Response To Dictionary: This keyword builds a dictionary from the sudsLibrary response", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 139}, {"name": "Create Soap Session", "args": [{"name": "host", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "host=None"}, {"name": "endpoint", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "endpoint=None"}, {"name": "alias", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias=None"}, {"name": "kwargs", "types": [], "defaultValue": null, "kind": "VAR_NAMED", "required": false, "repr": "**kwargs"}], "doc": "<p>Create Soap Session. This Keyword utilizes the WSDL to create a soap client.</p>\n<p>host: (string) The host url.</p>\n<p>endpoint: (string) SOAP API endpoint containing the actions to be referenced.</p>\n<p>**kwargs: (optional) Parameters that could be included to add options to client creation. Current supported parameters are:</p>\n<p>set_location: http address</p>", "shortdoc": "Create Soap Session. This Keyword utilizes the WSDL to create a soap client.", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 68}, {"name": "Create Soap Session And Fix Wsdl", "args": [{"name": "host", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "host=None"}, {"name": "endpoint", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "endpoint=None"}, {"name": "alias", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias=None"}, {"name": "kwargs", "types": [], "defaultValue": null, "kind": "VAR_NAMED", "required": false, "repr": "**kwargs"}], "doc": "<p>Create Soap Session. This Keyword utilizes the WSDL and directly accesses calls from sudsLibrary.</p>\n<p>host: (string) The host url.</p>\n<p>endpoint: (string) SOAP API endpoint containing the actions to be referenced.</p>\n<p>alias: (string} Sets the alias for the SudsLibrary Framework **kwargs: (optional) Parameters that could be included to add options to client creation. Current supported parameters are:</p>\n<p>set_location: http address</p>", "shortdoc": "Create Soap Session. This Keyword utilizes the WSDL and directly accesses calls from sudsLibrary.", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 51}, {"name": "Create Soap Session And Set Location", "args": [{"name": "host", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "host=None"}, {"name": "endpoint", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "endpoint=None"}, {"name": "alias", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "alias=None"}, {"name": "set_location", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "set_location=None"}, {"name": "fix", "types": [], "defaultValue": "False", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "fix=False"}], "doc": "<p>Create Soap Session and Set Location. In addition to the client creation, this keyword sets the location as specified.</p>\n<p>host: (string) The host url.</p>\n<p>endpoint: (string) SOAP API endpoint containing the actions to be referenced.</p>\n<p>set_location: (string) If set will overwrite the WSDL location with specified address.</p>\n<p>If set to None will replace location with host and endpoint specified</p>", "shortdoc": "Create Soap Session and Set Location. In addition to the client creation, this keyword sets the location as specified.", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 84}, {"name": "Create Wsdl Objects", "args": [{"name": "wsdl_type", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "wsdl_type=None"}, {"name": "object_dict", "types": [], "defaultValue": "None", "kind": "POSITIONAL_OR_NAMED", "required": false, "repr": "object_dict=None"}], "doc": "<p>Create Wsdl Objects. This Keyword utilizes the WSDL to create a WSDL object based on the information provided.</p>\n<p>wsdl_type: (string) Wsdl object to be created.</p>\n<p>object_dict: (dict) Python Dictionary containing values and nested dictionaries with construction similar to wsdl defined objects.</p>\n<p>return: (response object) Returns the SOAP client object.</p>", "shortdoc": "Create Wsdl Objects. This Keyword utilizes the WSDL to create a WSDL object based on the information provided.", "tags": [], "source": "C:\\Git\\robotframework-zoomba\\src\\Zoomba\\SOAPLibrary.py", "lineno": 125}], "dataTypes": {"enums": [], "typedDicts": []}}
</script>
<title></title>
</head>
Expand Down
8 changes: 8 additions & 0 deletions samples/GUITests.robot
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 13 additions & 1 deletion src/Zoomba/GUILibrary.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

zoomba = BuiltIn()
zoomba_collections = Collections()

SCREENSHOT_COUNTER = itertools.count()


class GUILibrary(SeleniumLibrary):
"""Zoomba GUI Library
Expand Down Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions test/GUI/GUITests.robot
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions test/GUI/test_gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
2 changes: 1 addition & 1 deletion version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VERSION = "2.9.0"
VERSION = "2.9.1"

0 comments on commit 29ef5f2

Please sign in to comment.