[Fuego] [PATCH 15/16] Improve Click and Check methods to allow multiple locators
Guilherme Camargo
guicc at profusion.mobi
Tue Apr 3 03:22:41 UTC 2018
On Fri, Mar 30, 2018 at 11:03:28PM +0000, Tim.Bird at sony.com wrote:
>
>
> > -----Original Message-----
> > From: Guilherme Campos Camargo
> > Subject: [Fuego] [PATCH 15/16] Improve Click and Check methods to allow
> > multiple locators
>
> Need more information here. In general, there should usually be something
> in the description of the commit, even if it just rewords the summary line.
> But in this case, more text explaining the methods would have been good.
>
> (but the commit is already applied...)
Sorry about that. In future commits I'll make sure to have non-empty
descriptions.
Same for this one. Please let me know if you want me to send a fixup.
> >
> > Signed-off-by: Guilherme Campos Camargo <guicc at profusion.mobi>
> > ---
> > engine/tests/Functional.fuegotest/test_run.py | 105 ++++++++++++++++--
> > --------
> > 1 file changed, 65 insertions(+), 40 deletions(-)
> >
> > diff --git a/engine/tests/Functional.fuegotest/test_run.py
> > b/engine/tests/Functional.fuegotest/test_run.py
> > index 0370b6f..d433548 100755
> > --- a/engine/tests/Functional.fuegotest/test_run.py
> > +++ b/engine/tests/Functional.fuegotest/test_run.py
> > @@ -13,6 +13,7 @@ import docker
> > import pexpect
> > import requests
> > from selenium import webdriver
> > +from selenium.webdriver.common.by import By
> > import selenium.common.exceptions as selenium_exceptions
> >
> > LOGGER = logging.getLogger('test_run')
> > @@ -44,6 +45,46 @@ class SeleniumCommand:
> > LOGGER.debug('Executing Selenium Command \'%s\'',
> > self.__class__.__name__)
> >
> > + @staticmethod
> > + def check_element_text(element, text):
> > + try:
> > + if text in element.text:
> > + LOGGER.\
> > + debug(' Text \'%s\' matches element.text \'%s\'',
> please use " to avoid escaping '.
>
> > + text, element.text)
> > + return True
> > + else:
> > + LOGGER.\
> > + debug(' Text \'%s\' does not match element.text \'%s\'',
> please use " to avoid escaping '.
>
> > + text, element.text)
> > + return False
> > + except (selenium_exceptions.ElementNotVisibleException,
> > + selenium_exceptions.NoSuchAttributeException,):
> > + LOGGER.error(' Element has no visible Text')
> > + return False
> > +
> > + @staticmethod
> > + def click_element(element):
> > + try:
> > + element.click()
> > + LOGGER.debug(' Element clicked')
> > + return True
> > + except (selenium_exceptions.ElementClickInterceptedException,
> > + selenium_exceptions.ElementNotVisibleException,):
> > + LOGGER.error(' Element is not clickable')
> > + return False
> > +
> > + @staticmethod
> > + def find_element(context, locator, pattern):
> > + try:
> > + element = context.driver.find_element(locator, pattern)
> > + except selenium_exceptions.NoSuchElementException:
> > + LOGGER.error(' Element not found')
> > + return None
> > +
> > + LOGGER.debug(' Element found')
> > + return element
> > +
> >
> > class Visit(SeleniumCommand):
> > def __init__(self, url, timeout=10, expected_result=200):
> > @@ -69,55 +110,37 @@ class Visit(SeleniumCommand):
> >
> >
> > class CheckText(SeleniumCommand):
> > - def __init__(self, _id, text, expected_result=True):
> > - self._id = _id
> > + def __init__(self, locator, pattern, text='', expected_result=True):
> > + self.pattern = pattern
> > + self.locator = locator
> > self.text = text
> > self.expected_result = expected_result
> >
> > def exec(self, selenium_ctx):
> > super().exec(selenium_ctx)
> >
> > - try:
> > - text = self.driver.find_element_by_id(self._id).text
> > - except Exception: # TODO: Use proper Exception
> > - return False
> > -
> > - LOGGER.debug(
> > - ' Searching for \'%s\' in \'id:%s\'', self.text, self._id)
> > -
> > - result = True
> > - if self.text not in text:
> > - LOGGER.error(
> > - ' \'%s\' not found in id \'%s\' with text \'%s\'', self.text,
> > - self._id, text)
> > - result = False
> > -
> > - LOGGER.debug(' \'%s\' was found', self.text)
> > + element = SeleniumCommand.\
> > + find_element(selenium_ctx, self.locator, self.pattern)
> > + if element:
> > + result = SeleniumCommand.check_element_text(element, self.text)
> >
> > return result == self.expected_result
> >
> >
> > -class ClickLink(SeleniumCommand):
> > - def __init__(self, linktext, expected_result=True):
> > - self.linktext = linktext
> > - self.expected_result = expected_result
> > +class Click(SeleniumCommand):
> > + def __init__(self, locator, pattern):
> > + self.pattern = pattern
> > + self.locator = locator
> >
> > def exec(self, selenium_ctx):
> > super().exec(selenium_ctx)
> >
> > - LOGGER.debug(
> > - ' Searching for a link with the text \'%s\'', self.linktext)
> > + element = SeleniumCommand.\
> > + find_element(selenium_ctx, self.locator, self.pattern)
> > + if element:
> > + return SeleniumCommand.click_element(element)
> >
> > - try:
> > - link = self.driver.find_element_by_partial_link_text(self.linktext)
> > - link.click()
> > - LOGGER.debug(' Link found and clicked')
> > - result = True
> > - except selenium_exceptions.NoSuchElementException:
> > - LOGGER.error(' Link not found')
> > - result = False
> > -
> > - return result == self.expected_result
> > + return False
> >
> >
> > class Back(SeleniumCommand):
> > @@ -529,25 +552,27 @@ def main():
> > # Add Nodes
> > ShExpect('ftc add-nodes docker'),
> > ShExpect('ftc list-nodes -q', r'.*docker.*'),
> > - CheckText(_id='executors', text='master'),
> > - CheckText(_id='executors', text='docker'),
> > + CheckText(By.ID, 'executors', text='master'),
> > + CheckText(By.ID, 'executors', text='docker'),
> >
> > # Add Fuego TestPlan
> > ShExpect('ftc add-jobs -b docker -p testplan_fuego_tests'),
> > ShExpect('ftc list-jobs', r'.*docker\.testplan_fuego_tests\.batch.*'),
> >
> > - ClickLink(linktext='docker'),
> > - CheckText(_id='projectstatus',
> > + Click(By.PARTIAL_LINK_TEXT, 'docker'),
> > + CheckText(By.ID, 'projectstatus',
> > text='docker.testplan_fuego_tests.batch'),
> > Back(),
> >
> > # Install Views
> > ShExpect('ftc add-view batch .*.batch'),
> > - CheckText(_id='projectstatus-tabBar', text='batch'),
> > + CheckText(By.ID, 'projectstatus-tabBar',
> > + text='batch'),
> >
> > # Start Tests
> > ShExpect('ftc build-jobs *.*.Functional.fuego_board_check'),
> > - CheckText(_id='buildQueue', text='Functional.fuego_board_check'),
> > + CheckText(By.ID, 'buildQueue',
> > + text='Functional.fuego_board_check'),
> > ]
> >
> > if not execute_tests(args.timeout):
> > --
> > 2.16.2
> >
> > _______________________________________________
> > Fuego mailing list
> > Fuego at lists.linuxfoundation.org
> > https://lists.linuxfoundation.org/mailman/listinfo/fuego
More information about the Fuego
mailing list