Selen¶
This sections contains module documentation of selen module.
selen¶
Module provides class SeleniumBridge which implements bridge to Selenium WebDriver API using external module selenium in version >= 2.46.1. selenium requires non-Python libraries which are automatically installed by setup script (libfontconfig for apt-get, fontconfig for yum).
Unit tests available at hydratk/lib/bridge/selen/01_methods_ut.jedi, 02_methods_ut.jedi
selen uses running browser to execute tests on web page. Browsers are not bundled with hydratk and must be installed separately. The recommended browser is PhantomJS because it is headless (it doesn’t require OS with GUI).
Supported browsers:
- PhantomJS
- Android
- BlackBerry
- Firefox
- Chrome
- Ie
- Opera
- Safari
Attributes :
- _mh - MasterHead reference
- _client - selen client instance
- _browser - browser name
- _url - web page URL
- _confirm_alert - confirm or dimiss alert form
Properties (Getters) :
- client - returns _client
- browser - returns _browser
- url - returns _url
- confirm_alert - return _confirm_alert
Properties (Setters) :
- confirm_alert - sets _confirm_alert
Methods :
- __init__
Constructor sets _client to requested browser (PHANTOMJS by default) object instance. If browser is not supported NotImplementedError is raised.
from hydratk.lib.bridge.selen import SeleniumBridge c = SeleniumBridge('PHANTOMJS')
- open
Method opens web page in browser. First it fires event selen_before_open where parameters (url, timeout) can be rewritten. It sets timeout (default 20s) using selenium method set_page_load_timeout and gets page (using method get). After that fires event selen_after_open and returns bool.
url = 'http://127.0.0.1:8080/Autobot/' res = c.open(url)
- close
Method closes browser using selenium method quit.
res = c.close()
- wait_for_element
Method waits for presence element on web page till given timeout (default 5s). First is fires event selen_before_wait where parameters (ident, method, timeout) can be rewritten. Two check methods are supported: id (ident = unique element id), xpath (ident = xpath query). Method uses selenium methods WebDriverWait and find_element_by_id or find_element_by_xpath.
After that it fires event selen_after_wait and returns bool (True when element found, False when not found within timeout).
# method id res = c.wait_for_element('customerRead', 'id') # method xpath res = c.wait_for_element('//div[@id=\'customerRead\']', 'xpath')
- get_element
Method returns reference to element object. First it fires event selen_before_get_elem where parameters (ident, method, single) can be rewritten. Method supports several methods for element search, each one uses different selenium method.
id - uses find_element_by_id class - uses find_element_by_class_name or find_elements_by_class_name css - uses find_element_by_css_selector or find_elements_by_css_selector text - uses find_element_by_link_text or find_elements_by_link_text name - uses find_element_by_name or find_elements_by_name tag - uses find_element_by_tag_name or find_elements_by_tag_name xpath - uses find_element_by_xpath or find_elements_by_xpath
By default it returns first element which is found, uses single=False to return all elements.
# id res = c.get_element('customerRead', 'id') # class res = c.get_element('v-formlayout-row', 'class') # css res = c.get_element('.autobot .v-tabsheet-tabitemcell .v-caption .v-captiontext', 'css') # tag res = c.get_element('td', 'tag') # xpath res = c.get_element('//input[@type=\'text\']', 'xpath')
- read_element
Method reads element value. First it fires event selen_before_read_elem where parameters (ident, method, attr, attr_val, el_type) can be rewritten. Parameters attr, attr_val are used to precise element search. attr is additional HTML element attribute, attr_val is requested value. It gets elements object using method get_element (supports all methods) and searches the valid one.
Method returns value of attribute text. If element has no such attribute it returns None. When you want to read elements which has not attribute text, you can use method exec_script and get the value via JavaScript.
# element id res = c.read_element('customerId') # element with attribute type = text res = c.read_element('customerId', attr='type', attr_val='text') # element with attribute tabindex = 0 res = c.read_element('customerId', attr='tabindex', attr_val='0')
- set_element
Methods sets element value. First it fires event selen_before_set_elem where parameters (ident, val, method, attr, attr_val, el_type) can be rewritten. Parameters attr, attr_val are used to precise element search. attr is additional HTML element attribute, attr_val is requested value. It gets elements object using method get_element (supports all methods) and searches the valid one.
If element is checkbox, method checks/unchecks it. It gets current state using selenium method is_selected and then uses method click. If element is button, method uses selenium method click. Otherwise method use selenium method send_keys (it is considered text field). After that returns bool.
# element id elem, val = 'customerId', 'xx' res = c.set_element(elem, val) # element with attribute type = text res = c.set_element('customerId', val, attr='type', attr_val='text')
- exec_script
Method executes JavaScript. First it fires event selen_before_script where parameter script can be rewritten. It uses selenium method execute_script. Script parameters are passed as args. After that fires event selen_after_script and returns script output.
# read text field script = "return document.getElementById('{0}').value;".format(elem) res = c.exec_script(script) # read select script = "var e = document.getElementById('customerStatus').getElementsByTagName('select')[0];return e.options[1].text;" res = c.exec_script(script)
- save_screen
Method saves screenshot of web page. It works also for browser PhantomJS which is headless. First it fires event selen_before_save_screen where parameter outfile (default screen.png)can be rewritten. It uses selenium method save_screenshot. After that fires event selen_after_save_screen and returns bool.
file = '/var/local/hydratk/test.png' res = c.save_screen(file)
- check_alert
Methods checks if alert is present and returns bool, str (alert text). The form is confirmed or dismissed according to _confirm_url. It uses selenium methods switch_to_alert, accept, dismiss.
- get_current_url
Methods returns current url using selenium method get_current_url.
- get_title
Method returns page title using selenium attribute title.
- go_back
Method emulates browser button back using selenium method back, it returns bool.
- refresh
Method emulates browser button refresh using selenium method refresh, it returns bool.
- get_screen
Methods gets screenshot content in png (default) or base64 format.