From 80defe955f0e554bdd3cb8fa9b02d3fa0d8ae62f Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Sun, 18 Mar 2018 15:17:38 -0300 Subject: [PATCH 01/17] New abstractions --- parakeet/browser.py | 13 ++++++++++--- parakeet/lettuce_logger.py | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/parakeet/browser.py b/parakeet/browser.py index 731fb7b..497d2b9 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -160,14 +160,21 @@ def visit_home(self): LOG.debug('visit_home') self.visit(self.config['home_url']) - def get_element_waiting_for_its_presence(self, locator): + def get_element_waiting_for_its_presence(self, locator, waiting_time=None): + _waiting_time = waiting_time if waiting_time else self.waiting_time LOG.debug('get_element_waiting_for_its_presence({}, {}, {})' - .format(locator, self.waiting_time, self.poll_frequency)) - element = WebDriverWait(self.selenium, self.waiting_time, self.poll_frequency).until( + .format(locator, _waiting_time, self.poll_frequency)) + element = WebDriverWait(self.selenium, _waiting_time, self.poll_frequency).until( ec.presence_of_element_located(locator) ) return element + def get_element_waiting_for_its_presence_by_xpath(self, xpath, waiting_time=None): + _waiting_time = waiting_time if waiting_time else self.waiting_time + LOG.debug('get_element_waiting_for_its_presence_by_xpath({}, {}, {})' + .format(xpath, _waiting_time, self.poll_frequency)) + return self.get_element_waiting_for_its_presence((By.XPATH, xpath), _waiting_time) + # noinspection PyBroadException def retry(self, method=None, **kwargs): """ diff --git a/parakeet/lettuce_logger.py b/parakeet/lettuce_logger.py index ccf2b4e..cc5c2bf 100644 --- a/parakeet/lettuce_logger.py +++ b/parakeet/lettuce_logger.py @@ -16,7 +16,7 @@ reset=True, log_colors={ 'DEBUG': 'cyan', - 'INFO': 'green', + 'INFO': 'blue', 'WARNING': 'yellow', 'ERROR': 'red', 'CRITICAL': 'red', From 74238c028bfe46bfd67d942b3291b34cd3b2dd18 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Sun, 18 Mar 2018 22:46:57 -0300 Subject: [PATCH 02/17] Solving problem with login --- parakeet/auth.py | 8 +++++++- parakeet/browser.py | 10 ++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/parakeet/auth.py b/parakeet/auth.py index 0617fa6..b0912e3 100644 --- a/parakeet/auth.py +++ b/parakeet/auth.py @@ -39,7 +39,13 @@ def __init__(self, browser, home_title): def fill_email(self, email): LOG.debug('fill_email') - self.browser.find_element_by_id('identifierId').type(email) + try: + self.browser.find_element_by_id('identifierId').type(email) + except TimeoutException: + LOG.debug('click_on_identifier_before_fill_email') + self.browser.find_element_by_id('identifierLink').click() + self.browser.find_element_by_id('identifierId').type(email) + return self def click_next(self): diff --git a/parakeet/browser.py b/parakeet/browser.py index 497d2b9..f9b236a 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -119,11 +119,11 @@ def __init__(self, config): self.selenium.set_window_size(int(config['window_size']['width']), int(config['window_size']['height'])) - def find_element_by_id(self, element_id): + def find_element_by_id(self, element_id, waiting_time=None): LOG.debug('find_element_by_id({})' .format(element_id)) locator = (By.ID, element_id) - element = self.get_element_waiting_for_its_presence(locator) + element = self.get_element_waiting_for_its_presence(locator, waiting_time) return ParakeetElement(element, locator, self) def find_element_by_xpath(self, element_xpath): @@ -175,6 +175,12 @@ def get_element_waiting_for_its_presence_by_xpath(self, xpath, waiting_time=None .format(xpath, _waiting_time, self.poll_frequency)) return self.get_element_waiting_for_its_presence((By.XPATH, xpath), _waiting_time) + def signout(self): + LOG.debug('signout') + self.find_element_by_xpath("//*[@id='account-avatar']/img").click() + self.get_element_waiting_for_its_presence_by_xpath("//*[@id='signout']") + self.find_element_by_xpath("//*[@id='signout']").click() + # noinspection PyBroadException def retry(self, method=None, **kwargs): """ From 48bcbf05c64e4d2450f44d218731955baf086722 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Wed, 21 Mar 2018 12:56:59 -0300 Subject: [PATCH 03/17] Refactoring retry method --- parakeet/browser.py | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/parakeet/browser.py b/parakeet/browser.py index f9b236a..e51c90a 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -148,6 +148,16 @@ def is_text_present(self, text): .format(text)) return self.splinter.is_text_present(text) + def is_text_present_exception(self, text): + LOG.debug('is_text_present_exception({})' + .format(text)) + result = self.splinter.is_text_present(text) + + if not result: + raise Exception('Not found!') + + return result + def quit(self): LOG.debug('quit') self.splinter.quit() @@ -198,12 +208,29 @@ def retry(self, method=None, **kwargs): .format(_next_iterator, _retry, method.__name__)) kwargs.pop(_next, None) + result = method(**kwargs) + + if isinstance(result, bool) and \ + not result and \ + _next_iterator < _retry: + return self._perform_method(_next, _next_iterator, kwargs, method) - return method(**kwargs) + return result except Exception as ex: LOG.error('Exception: {}'.format(ex.message)) if _next_iterator < _retry: - kwargs[_next] = _next_iterator + 1 - sleep(randint(1, 3)) - return self.retry(method=method, **kwargs) + return self._perform_method(_next, _next_iterator, kwargs, method) raise ex + + def _perform_method(self, next, next_iterator, kwargs, method): + """ + Perform the method and return the value + :param next: + :param next_iterator: + :param kwargs: + :param method: + :return: + """ + kwargs[next] = next_iterator + 1 + sleep(randint(1, 3)) + return self.retry(method=method, **kwargs) From 80f68457168a864d9f847de543f480b024b7cef7 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Fri, 23 Mar 2018 19:10:27 -0300 Subject: [PATCH 04/17] Add save screenshot on retry method --- parakeet/browser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/parakeet/browser.py b/parakeet/browser.py index e51c90a..da71d78 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -220,6 +220,7 @@ def retry(self, method=None, **kwargs): LOG.error('Exception: {}'.format(ex.message)) if _next_iterator < _retry: return self._perform_method(_next, _next_iterator, kwargs, method) + self.selenium.save_screenshot('error_{}.png'.format(method.__name__)) raise ex def _perform_method(self, next, next_iterator, kwargs, method): From 7a508f319a9a771db6b9352e59a616d635b8bd14 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Mon, 26 Mar 2018 11:51:50 -0300 Subject: [PATCH 05/17] Change the report files --- parakeet/browser.py | 5 ++++- parakeet/utils.py | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/parakeet/browser.py b/parakeet/browser.py index da71d78..cbe0025 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -11,6 +11,8 @@ from time import sleep from parakeet.lettuce_logger import LOG +from .utils import next_image + class ParakeetElement(object): """ @@ -220,7 +222,8 @@ def retry(self, method=None, **kwargs): LOG.error('Exception: {}'.format(ex.message)) if _next_iterator < _retry: return self._perform_method(_next, _next_iterator, kwargs, method) - self.selenium.save_screenshot('error_{}.png'.format(method.__name__)) + self.selenium.save_screenshot('reqf_error_{:05d}_{}.png' + .format(next_image(), method.__name__)) raise ex def _perform_method(self, next, next_iterator, kwargs, method): diff --git a/parakeet/utils.py b/parakeet/utils.py index 5ff332f..d58ab12 100644 --- a/parakeet/utils.py +++ b/parakeet/utils.py @@ -1,6 +1,10 @@ # -*- coding: utf-8 -*- import yaml import os +from lettuce import world + +NEXT_IMAGE_SEQUENCE = 'next_image_sequence' + def load_yaml(yaml_file): """ @@ -17,3 +21,25 @@ def load_yaml(yaml_file): with open(_local_file, 'r') as f: yaml_content = yaml.load(f) return yaml_content + + +def next_image(): + """ + Return the next image number + :return: + """ + + if world.container.get(NEXT_IMAGE_SEQUENCE, None) is None: + world.container[NEXT_IMAGE_SEQUENCE] = range_generator() + + return world.container[NEXT_IMAGE_SEQUENCE].next() + + +def range_generator(max_register=99999): + """ + Create a generator register + :return: + """ + my_list = range(1, max_register) + for i in my_list: + yield i From 35324b05aca4a0a333d4917ce20d40eb921c29dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Amanda=20Magalh=C3=A3es?= Date: Mon, 26 Mar 2018 13:44:51 -0300 Subject: [PATCH 06/17] adds method to type slowly --- parakeet/browser.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/parakeet/browser.py b/parakeet/browser.py index da71d78..af2be33 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -51,6 +51,14 @@ def type(self, value): self.debounce() return self + def type_slowly(self, value): + LOG.debug('type_slowly {}'.format(value)) + for character in value: + LOG.debug('character {}'.format(character)) + self.type(character) + time.sleep(0.3) # pause for 0.3 seconds + return self + def get_attribute(self, name): return self.element.get_attribute(name) From 1e82946a89bbd997feae28f61482d937dffc863f Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Mon, 26 Mar 2018 14:04:26 -0300 Subject: [PATCH 07/17] Debug images --- parakeet/browser.py | 1 + parakeet/lettuce_logger.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/parakeet/browser.py b/parakeet/browser.py index 863201d..9b5c426 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -124,6 +124,7 @@ def __init__(self, config): self.selenium = self.splinter.driver self.waiting_time = int(config.get('default_implicitly_wait_seconds')) self.poll_frequency = int(config.get('default_poll_frequency_seconds')) + self.snapshot_debug = int(config.get('snapshot_debug', False)) self.retry_get_element = int(config.get('retry', 1)) self.selenium.implicitly_wait(self.waiting_time) self.selenium.set_window_size(int(config['window_size']['width']), diff --git a/parakeet/lettuce_logger.py b/parakeet/lettuce_logger.py index cc5c2bf..9566ff0 100644 --- a/parakeet/lettuce_logger.py +++ b/parakeet/lettuce_logger.py @@ -1,6 +1,9 @@ import logging import sys from colorlog import ColoredFormatter +from lettuce import world + +from parakeet import next_image log_level = {'INFO': logging.INFO, 'WARNING': logging.WARNING, @@ -8,6 +11,7 @@ 'ERROR': logging.ERROR} APP_LOGGER = 'google.tests.e2e' +SNAPSHOT_DEBUG = 'SNAPSHOT_DEBUG' formatter = ColoredFormatter( "%(green)s%(asctime)s - %(name)s -%(reset)s %(log_color)s%(levelname)-8s%(reset)s" @@ -24,6 +28,17 @@ ) +class CustomLogging(logging.Logger): + """ + The ideia is override our custom logs and do some additional stuffs. + """ + def debug(self, msg, *args, **kwargs): + if world.get(SNAPSHOT_DEBUG, False): + world.browser.selenium.save_screenshot( + 'reqf_debug_{:05d}.png'.format(next_image())) + return super(CustomLogging, self).debug(msg, *args, **kwargs) + + def init_logs(level='INFO', logger=None): """ Setup the logs inside of the tests. @@ -38,6 +53,7 @@ def init_logs(level='INFO', logger=None): ch.setLevel(_level) ch.setFormatter(formatter) handler.addHandler(ch) + logging.setLoggerClass(CustomLogging) def get_logger(): From 20ebf28a3857a10a236ca5525a6ef18c4d580e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Amanda=20Magalh=C3=A3es?= Date: Mon, 26 Mar 2018 14:23:55 -0300 Subject: [PATCH 08/17] removing debug --- parakeet/browser.py | 1 - 1 file changed, 1 deletion(-) diff --git a/parakeet/browser.py b/parakeet/browser.py index 863201d..8c9b8c6 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -56,7 +56,6 @@ def type(self, value): def type_slowly(self, value): LOG.debug('type_slowly {}'.format(value)) for character in value: - LOG.debug('character {}'.format(character)) self.type(character) time.sleep(0.3) # pause for 0.3 seconds return self From 13123bbf294a35bc62997a685fdee3307527dc77 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Mon, 26 Mar 2018 14:55:45 -0300 Subject: [PATCH 09/17] Fix time git diff --- parakeet/browser.py | 21 +++++++++++++++------ parakeet/lettuce_logger.py | 6 +++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/parakeet/browser.py b/parakeet/browser.py index 9b5c426..7695845 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -47,18 +47,26 @@ def click_and_wait_disappear(self): self.wait_invisibility_of_element_located() return self - def type(self, value): + def type(self, value, type_pause=0): + raise Exception + _type_pause = type_pause if type_pause > 0 else self.parakeet.type_pause + self.element = self.wait_visibility_of_element_located() - self.element.send_keys(value) + if _type_pause > 0: + self._type_slowly(value, _type_pause) + else: + LOG.debug('type_normal {}'.format(value)) + self.element.send_keys(value) + self.debounce() + return self - def type_slowly(self, value): + def _type_slowly(self, value, type_pause=0.3): LOG.debug('type_slowly {}'.format(value)) for character in value: - LOG.debug('character {}'.format(character)) - self.type(character) - time.sleep(0.3) # pause for 0.3 seconds + self.element.send_keys(character) + time.sleep(type_pause) return self def get_attribute(self, name): @@ -125,6 +133,7 @@ def __init__(self, config): self.waiting_time = int(config.get('default_implicitly_wait_seconds')) self.poll_frequency = int(config.get('default_poll_frequency_seconds')) self.snapshot_debug = int(config.get('snapshot_debug', False)) + self.type_pause = int(config.get('type_pause', 0)) self.retry_get_element = int(config.get('retry', 1)) self.selenium.implicitly_wait(self.waiting_time) self.selenium.set_window_size(int(config['window_size']['width']), diff --git a/parakeet/lettuce_logger.py b/parakeet/lettuce_logger.py index 9566ff0..2374405 100644 --- a/parakeet/lettuce_logger.py +++ b/parakeet/lettuce_logger.py @@ -28,12 +28,12 @@ ) -class CustomLogging(logging.Logger): +class CustomLogging(logging.getLoggerClass()): """ The ideia is override our custom logs and do some additional stuffs. """ def debug(self, msg, *args, **kwargs): - if world.get(SNAPSHOT_DEBUG, False): + if world.browser.snapshot_debug: world.browser.selenium.save_screenshot( 'reqf_debug_{:05d}.png'.format(next_image())) return super(CustomLogging, self).debug(msg, *args, **kwargs) @@ -53,7 +53,6 @@ def init_logs(level='INFO', logger=None): ch.setLevel(_level) ch.setFormatter(formatter) handler.addHandler(ch) - logging.setLoggerClass(CustomLogging) def get_logger(): @@ -61,6 +60,7 @@ def get_logger(): Return the default logger. :return: """ + logging.setLoggerClass(CustomLogging) return logging.getLogger(APP_LOGGER) From 801d5ac1fd7c26a7a2ac36cbd0fbe0e56e32aef0 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Mon, 26 Mar 2018 15:13:33 -0300 Subject: [PATCH 10/17] fix with formatter --- parakeet/browser.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/parakeet/browser.py b/parakeet/browser.py index 7695845..4184d55 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -48,9 +48,8 @@ def click_and_wait_disappear(self): return self def type(self, value, type_pause=0): - raise Exception _type_pause = type_pause if type_pause > 0 else self.parakeet.type_pause - + LOG.debug('type {} {}'.format(value, _type_pause)) self.element = self.wait_visibility_of_element_located() if _type_pause > 0: self._type_slowly(value, _type_pause) @@ -132,8 +131,8 @@ def __init__(self, config): self.selenium = self.splinter.driver self.waiting_time = int(config.get('default_implicitly_wait_seconds')) self.poll_frequency = int(config.get('default_poll_frequency_seconds')) - self.snapshot_debug = int(config.get('snapshot_debug', False)) - self.type_pause = int(config.get('type_pause', 0)) + self.snapshot_debug = config.get('snapshot_debug', False) + self.type_pause = float(config.get('type_pause', 0)) self.retry_get_element = int(config.get('retry', 1)) self.selenium.implicitly_wait(self.waiting_time) self.selenium.set_window_size(int(config['window_size']['width']), From 43c121201f36cd024736c44e76b1cd048d8aaeb4 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Wed, 4 Apr 2018 18:15:47 -0300 Subject: [PATCH 11/17] Document the parakeet --- README.md | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a902bb..59db48f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,52 @@ # Parakeet -UI tests automation utilities library. +A collection of resources, libraries and praticies using the stack: +- [Selenium](https://www.seleniumhq.org/projects/webdriver/) +- [Chromewebdriver](https://sites.google.com/a/chromium.org/chromedriver/) +- [Splinter](https://splinter.readthedocs.io/en/latest/lettuc) +- [Lettuce](http://lettuce.it/) + +## Instalation + +You can install the parakeet using the the package manager PIP. + +``` +pip install parakeet -U +``` + +> **Note**: To use parakeet is necessary install previously all of tools metnioned above. + +## Config + +The parakeet works with a parameterized files **config.yaml** and **users.yaml**. These files are responsible for some tests behaviors. They need to be saved on the home directory of the operation system. + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescriptionValuesDefault
browserThis parameter define how browser will be used to test. Today the parakeet support just Chrome browserchromechrome
headlessDefine if the tests will open the browser or perform the tests with graphical mode off. It is very usefull in developer mode, when the developer need to debug or understand some issues. Case True, doesn't open the browser.True|FalseFalse
default_implicitly_wait_secondsSetup time in seconds that the tests will wait until some component are ready to be used.True|FalseFalse
## Why Parakeet? From f6cf55349e566fb6090073f6a93005ada524d195 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Wed, 4 Apr 2018 18:22:22 -0300 Subject: [PATCH 12/17] Document --- README.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 59db48f..ba28e4b 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,14 @@ # Parakeet A collection of resources, libraries and praticies using the stack: + - [Selenium](https://www.seleniumhq.org/projects/webdriver/) - [Chromewebdriver](https://sites.google.com/a/chromium.org/chromedriver/) - [Splinter](https://splinter.readthedocs.io/en/latest/lettuc) - [Lettuce](http://lettuce.it/) +Focused on the applications that use Google Stack (GCP, Gmail OAUTH2 and others). + ## Instalation You can install the parakeet using the the package manager PIP. @@ -36,18 +39,75 @@ The parakeet works with a parameterized files **config.yaml** and **users.yaml** headless Define if the tests will open the browser or perform the tests with graphical mode off. It is very usefull in developer mode, when the developer need to debug or understand some issues. Case True, doesn't open the browser. - True|False + True
False False default_implicitly_wait_seconds Setup time in seconds that the tests will wait until some component are ready to be used. - True|False - False + Integer Number + 30 - + + default_poll_frequency_seconds + Interval time during the default_implicitly_wait_seconds, that the application will wait until check if the component are ready to be used. + Integer Number + 2 + + + log_level + You can define the level of the application logs. + INFO
WARN
DEBUG
TRACE
ERROR + INFO + + + log_name + You can setup the name of the logs that you want to see. For example if you want to see everyone you don't need to setup this field. But you can setup this one just to see the parakeet or just the loggers that you application are logging. + Ex.: google.tests.e2e + Empty + + + retry + Some resources on the application use the retry feature. This item give to the user the ability to setup how many times the test will try to click on some button for example. + Integer Number + 1 + + + login_provider + The parakeet provide to you an abrastraction mechanism in order to login in the google account (if your application have something like it). Thinking on it, we created a parameter where the user can setup the version of this mechanism. + google_oauth + google_oauth
google_oauth_gapi2 + + + window_size:
    width: 9999
    height: 9999 + Setup the size of the screen where the tests will be performed. + Integer Number + Empty + + + users:
    file: 'users.yaml' + The parakeet provide a way to setup which users you will use on your tests. So this file can be setup here + File Path + Empty + + + home_url + The home url used to access the application that will be tested. + http://localhost + Empty + + + system_page_title + The system page title, this is used in order to check if the user are logged on the application. Just in cases that tests envolving Google login. + Text defined on the tag title on the application + Empty + +# Methods and Functions + +- TBD + ## Why Parakeet? Github suggested it. From db894aaae2bee90f62747224eaa1da0974e2126a Mon Sep 17 00:00:00 2001 From: Kieras Date: Thu, 5 Apr 2018 12:52:03 -0300 Subject: [PATCH 13/17] Documentation improvements. --- README.md | 66 +++++++++++++++++++++++++++++++++------------ parakeet-stack.png | Bin 0 -> 29097 bytes 2 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 parakeet-stack.png diff --git a/README.md b/README.md index ba28e4b..73c4213 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,39 @@ # Parakeet -A collection of resources, libraries and praticies using the stack: +UI tests automation utilities library. + +The aim is to easy the development of tests for applications that follow a +known set of technologies: + +- Angular JS +- Angular JS Material +- Google OAuth2 +- Chrome Browser + +This library depends, and sometime implements useful abstractions, on the following libraries: -- [Selenium](https://www.seleniumhq.org/projects/webdriver/) -- [Chromewebdriver](https://sites.google.com/a/chromium.org/chromedriver/) -- [Splinter](https://splinter.readthedocs.io/en/latest/lettuc) - [Lettuce](http://lettuce.it/) +- [Splinter](https://splinter.readthedocs.io/) +- [Selenium](https://www.seleniumhq.org/projects/webdriver/) +- [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) + +We designed it overcome some challenges of developing BDD tests considering the technologies below: -Focused on the applications that use Google Stack (GCP, Gmail OAUTH2 and others). +![Parakeet stack](parakeet-stack.png?raw=true "Parakeet Stack") -## Instalation +## Installation -You can install the parakeet using the the package manager PIP. +You can install Parakeet using the package manager PIP. ``` pip install parakeet -U ``` -> **Note**: To use parakeet is necessary install previously all of tools metnioned above. +## Configuration -## Config +Parakeet reads a **config.yaml** file that can be used to parameterize it's behaviours. -The parakeet works with a parameterized files **config.yaml** and **users.yaml**. These files are responsible for some tests behaviors. They need to be saved on the home directory of the operation system. +It need to be saved on the home directory of the operation system running the tests. @@ -32,13 +44,13 @@ The parakeet works with a parameterized files **config.yaml** and **users.yaml** - + - + @@ -62,7 +74,7 @@ The parakeet works with a parameterized files **config.yaml** and **users.yaml** - + @@ -74,7 +86,7 @@ The parakeet works with a parameterized files **config.yaml** and **users.yaml** - + @@ -98,15 +110,35 @@ The parakeet works with a parameterized files **config.yaml** and **users.yaml** - +
browserThis parameter define how browser will be used to test. Today the parakeet support just Chrome browserThis parameter define which browser will be used to run the tests. Today we only support the Chrome Browser chrome chrome
headlessDefine if the tests will open the browser or perform the tests with graphical mode off. It is very usefull in developer mode, when the developer need to debug or understand some issues. Case True, doesn't open the browser.Define if the tests will open the browser or perform the tests with graphical mode off. It is very useful in developer mode, when the developer need to debug or understand some issues. Case True, doesn't open the browser. True
False
False
log_nameYou can setup the name of the logs that you want to see. For example if you want to see everyone you don't need to setup this field. But you can setup this one just to see the parakeet or just the loggers that you application are logging.You can setup the name of the logs that you want to see. For example if you want to see everyone you don't need to setup this field. But you can setup this parameter to just see the Parakeet logs or just the loggers that you application are logging. Ex.: google.tests.e2e Empty
login_providerThe parakeet provide to you an abrastraction mechanism in order to login in the google account (if your application have something like it). Thinking on it, we created a parameter where the user can setup the version of this mechanism.The parakeet provide to you an abrastraction mechanism in order to login in the Google account (if your application have something like it). Thinking of it, we created a parameter where the user can setup the version of this mechanism. google_oauth google_oauth
google_oauth_gapi2
system_page_titleThe system page title, this is used in order to check if the user are logged on the application. Just in cases that tests envolving Google login.The system page title, this is used in order to check if the user are logged on the application. That's the way we check if the test already passed the login phase. Text defined on the tag title on the application Empty
-# Methods and Functions +### Configuration example + +(TODO - create/maintain example files and reference it here) + +## Users configuration + +Parakeet reads a **users.yaml** file that can be used to store users credentials +that will be used in the tests.. + +It need to be saved on the home directory of the operation system running the tests. + +### Users configuration example + +(TODO - create/maintain example files and reference it here) + +## Lettuce terrain + +In order to bootstrap and start using this library in your Lettuce tests, you +should initialize it in the "terrain" file. + +### Lettuce terrain example -- TBD +(TODO - create/maintain example files and reference it here) ## Why Parakeet? diff --git a/parakeet-stack.png b/parakeet-stack.png new file mode 100644 index 0000000000000000000000000000000000000000..e1dd9d2f8551536e2d13fe0736b2c8132ae1b288 GIT binary patch literal 29097 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 literal 0 HcmV?d00001 From 4bfc80d3d52a82fe00ed371c95c3c857dffba7c9 Mon Sep 17 00:00:00 2001 From: Kieras Date: Thu, 5 Apr 2018 13:08:39 -0300 Subject: [PATCH 14/17] Adding a logo. --- README.md | 8 +++++++- parakeet-logo-small.png | Bin 0 -> 17056 bytes parakeet-logo.png | Bin 0 -> 70275 bytes 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 parakeet-logo-small.png create mode 100644 parakeet-logo.png diff --git a/README.md b/README.md index 73c4213..d7a3a8c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # Parakeet +![Parakeet](parakeet-logo-small.png?raw=true "Parakeet") + UI tests automation utilities library. - + The aim is to easy the development of tests for applications that follow a known set of technologies: @@ -143,3 +145,7 @@ should initialize it in the "terrain" file. ## Why Parakeet? Github suggested it. + +### Logo attribution + +We found our "logo" image here: Free Vector Graphics by www.vecteezy.com diff --git a/parakeet-logo-small.png b/parakeet-logo-small.png new file mode 100644 index 0000000000000000000000000000000000000000..f827b0620c234e9caaa252130833c55db6141142 GIT binary patch literal 17056 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%0A7^ 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 Z;ECgU{3gC&^TPo@P$?zJYH{Ph{{bT^GDiRa literal 0 HcmV?d00001 From 2b844d6e7cb7cf7d8a5408ee8390af724e5e6a61 Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Fri, 6 Apr 2018 18:46:44 -0300 Subject: [PATCH 15/17] Fix code review issues --- parakeet/browser.py | 26 +++++++++++++++----------- parakeet/lettuce_logger.py | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/parakeet/browser.py b/parakeet/browser.py index 4184d55..718091e 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -51,21 +51,31 @@ def type(self, value, type_pause=0): _type_pause = type_pause if type_pause > 0 else self.parakeet.type_pause LOG.debug('type {} {}'.format(value, _type_pause)) self.element = self.wait_visibility_of_element_located() + self._type_handle(_type_pause, value) + + self.debounce() + + return self + + def _type_handle(self, _type_pause, value): if _type_pause > 0: self._type_slowly(value, _type_pause) else: LOG.debug('type_normal {}'.format(value)) self.element.send_keys(value) - self.debounce() + def _type_slowly(self, value, type_pause): + LOG.debug('type_slowly {}'.format(value)) - return self + if not (type_pause and isinstance(type_pause, float) and 0.0 < type_pause < 1): + raise ValueError( + 'The type_pause argument need to be an float valid number between 0.01 and 0.99' + ) - def _type_slowly(self, value, type_pause=0.3): - LOG.debug('type_slowly {}'.format(value)) for character in value: self.element.send_keys(character) time.sleep(type_pause) + return self def get_attribute(self, name): @@ -204,12 +214,6 @@ def get_element_waiting_for_its_presence_by_xpath(self, xpath, waiting_time=None .format(xpath, _waiting_time, self.poll_frequency)) return self.get_element_waiting_for_its_presence((By.XPATH, xpath), _waiting_time) - def signout(self): - LOG.debug('signout') - self.find_element_by_xpath("//*[@id='account-avatar']/img").click() - self.get_element_waiting_for_its_presence_by_xpath("//*[@id='signout']") - self.find_element_by_xpath("//*[@id='signout']").click() - # noinspection PyBroadException def retry(self, method=None, **kwargs): """ @@ -239,7 +243,7 @@ def retry(self, method=None, **kwargs): LOG.error('Exception: {}'.format(ex.message)) if _next_iterator < _retry: return self._perform_method(_next, _next_iterator, kwargs, method) - self.selenium.save_screenshot('reqf_error_{:05d}_{}.png' + self.selenium.save_screenshot('parakeet_error_{:05d}_{}.png' .format(next_image(), method.__name__)) raise ex diff --git a/parakeet/lettuce_logger.py b/parakeet/lettuce_logger.py index 2374405..d7e56c6 100644 --- a/parakeet/lettuce_logger.py +++ b/parakeet/lettuce_logger.py @@ -35,7 +35,7 @@ class CustomLogging(logging.getLoggerClass()): def debug(self, msg, *args, **kwargs): if world.browser.snapshot_debug: world.browser.selenium.save_screenshot( - 'reqf_debug_{:05d}.png'.format(next_image())) + 'parakeet_debug_{:05d}.png'.format(next_image())) return super(CustomLogging, self).debug(msg, *args, **kwargs) From 9d0670d6a2967633c7e870fa77477b8cf649c81f Mon Sep 17 00:00:00 2001 From: Ramon Mendes de Souza Date: Fri, 6 Apr 2018 18:55:45 -0300 Subject: [PATCH 16/17] Fix code review issues --- parakeet/browser.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/parakeet/browser.py b/parakeet/browser.py index 718091e..e9a8308 100644 --- a/parakeet/browser.py +++ b/parakeet/browser.py @@ -177,16 +177,6 @@ def is_text_present(self, text): .format(text)) return self.splinter.is_text_present(text) - def is_text_present_exception(self, text): - LOG.debug('is_text_present_exception({})' - .format(text)) - result = self.splinter.is_text_present(text) - - if not result: - raise Exception('Not found!') - - return result - def quit(self): LOG.debug('quit') self.splinter.quit() From 089e4c37efc93892625a54d8536ec974f02f72c1 Mon Sep 17 00:00:00 2001 From: Kieras Date: Fri, 6 Apr 2018 19:27:45 -0300 Subject: [PATCH 17/17] New version. --- parakeet/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parakeet/__version__.py b/parakeet/__version__.py index a116b2f..4b5e18e 100644 --- a/parakeet/__version__.py +++ b/parakeet/__version__.py @@ -5,4 +5,4 @@ # |_| \__,_|_| \__,_|_|\_\___|\___|\__| -__version__ = '0.0.12' +__version__ = '0.0.13'