On 07/14/2016 08:25 AM, Smith, Elliot wrote:
> On 12 July 2016 at 20:56, Aníbal Limón <[email protected]> wrote:
> 
>> Do the raname in order to reuse selenium helper outside django
>> environment.
>>
> 
> Hello Anibal.
> 
> I'm not able to apply the first patch. I get a message about
> 
> "Reversed (or previously applied) patch detected! Assume -R?"
> 
> Regardless of whether I treat it as reversed or not, I can't apply it.
> 
> Could you pleas resubmit the patches, based on toaster-next? I think it
> would also be reasonable to merge the two patches together, as it's pretty
> easy to see what's going on.

I rebased the patches upon [1], also i merge into one patch [2], sending
again...

Thanks for look into it,

        alimon

[1]
http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/log/?h=toaster-next
[2]
http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/commit/?h=alimon/toaster&id=255f5da0627adae331fe6fe6b6936569479bd4cb

> 
> Also note that we tend to create the patches relative to the root of a poky
> checkout, rather than relative to the bitbake directory, though this is a
> minor issue.
> 
> Cheers.
> Elliot
> 
> 
>>
>> Signed-off-by: Aníbal Limón <[email protected]>
>> ---
>>  lib/toaster/tests/browser/selenium_helpers.py      | 205
>> ---------------------
>>  lib/toaster/tests/browser/selenium_helpers_base.py | 205
>> +++++++++++++++++++++
>>  2 files changed, 205 insertions(+), 205 deletions(-)
>>  delete mode 100644 lib/toaster/tests/browser/selenium_helpers.py
>>  create mode 100644 lib/toaster/tests/browser/selenium_helpers_base.py
>>
>> diff --git a/lib/toaster/tests/browser/selenium_helpers.py
>> b/lib/toaster/tests/browser/selenium_helpers.py
>> deleted file mode 100644
>> index 54db2e8..0000000
>> --- a/lib/toaster/tests/browser/selenium_helpers.py
>> +++ /dev/null
>> @@ -1,205 +0,0 @@
>> -#! /usr/bin/env python
>> -# ex:ts=4:sw=4:sts=4:et
>> -# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
>> -#
>> -# BitBake Toaster Implementation
>> -#
>> -# Copyright (C) 2013-2016 Intel Corporation
>> -#
>> -# This program is free software; you can redistribute it and/or modify
>> -# it under the terms of the GNU General Public License version 2 as
>> -# published by the Free Software Foundation.
>> -#
>> -# This program is distributed in the hope that it will be useful,
>> -# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> -# GNU General Public License for more details.
>> -#
>> -# You should have received a copy of the GNU General Public License along
>> -# with this program; if not, write to the Free Software Foundation, Inc.,
>> -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>> -#
>> -# The Wait class and some of SeleniumDriverHelper and SeleniumTestCase are
>> -# modified from Patchwork, released under the same licence terms as
>> Toaster:
>> -#
>> https://github.com/dlespiau/patchwork/blob/master/patchwork/tests.browser.py
>> -
>> -"""
>> -Helper methods for creating Toaster Selenium tests which run within
>> -the context of Django unit tests.
>> -"""
>> -
>> -import os
>> -import time
>> -
>> -from django.contrib.staticfiles.testing import StaticLiveServerTestCase
>> -from selenium import webdriver
>> -from selenium.webdriver.support.ui import WebDriverWait
>> -from selenium.common.exceptions import NoSuchElementException, \
>> -        StaleElementReferenceException, TimeoutException
>> -
>> -def create_selenium_driver(browser='chrome'):
>> -    # set default browser string based on env (if available)
>> -    env_browser = os.environ.get('TOASTER_TESTS_BROWSER')
>> -    if env_browser:
>> -        browser = env_browser
>> -
>> -    if browser == 'chrome':
>> -        return webdriver.Chrome(
>> -            service_args=["--verbose", "--log-path=selenium.log"]
>> -        )
>> -    elif browser == 'firefox':
>> -        return webdriver.Firefox()
>> -    elif browser == 'ie':
>> -        return webdriver.Ie()
>> -    elif browser == 'phantomjs':
>> -        return webdriver.PhantomJS()
>> -    else:
>> -        msg = 'Selenium driver for browser %s is not available' % browser
>> -        raise RuntimeError(msg)
>> -
>> -class Wait(WebDriverWait):
>> -    """
>> -    Subclass of WebDriverWait with predetermined timeout and poll
>> -    frequency. Also deals with a wider variety of exceptions.
>> -    """
>> -    _TIMEOUT = 10
>> -    _POLL_FREQUENCY = 0.5
>> -
>> -    def __init__(self, driver):
>> -        super(Wait, self).__init__(driver, self._TIMEOUT,
>> self._POLL_FREQUENCY)
>> -
>> -    def until(self, method, message=''):
>> -        """
>> -        Calls the method provided with the driver as an argument until the
>> -        return value is not False.
>> -        """
>> -
>> -        end_time = time.time() + self._timeout
>> -        while True:
>> -            try:
>> -                value = method(self._driver)
>> -                if value:
>> -                    return value
>> -            except NoSuchElementException:
>> -                pass
>> -            except StaleElementReferenceException:
>> -                pass
>> -
>> -            time.sleep(self._poll)
>> -            if time.time() > end_time:
>> -                break
>> -
>> -        raise TimeoutException(message)
>> -
>> -    def until_not(self, method, message=''):
>> -        """
>> -        Calls the method provided with the driver as an argument until the
>> -        return value is False.
>> -        """
>> -
>> -        end_time = time.time() + self._timeout
>> -        while True:
>> -            try:
>> -                value = method(self._driver)
>> -                if not value:
>> -                    return value
>> -            except NoSuchElementException:
>> -                return True
>> -            except StaleElementReferenceException:
>> -                pass
>> -
>> -            time.sleep(self._poll)
>> -            if time.time() > end_time:
>> -                break
>> -
>> -        raise TimeoutException(message)
>> -
>> -class SeleniumTestCase(StaticLiveServerTestCase):
>> -    """
>> -    NB StaticLiveServerTestCase is used as the base test case so that
>> -    static files are served correctly in a Selenium test run context; see
>> -
>> https://docs.djangoproject.com/en/1.9/ref/contrib/staticfiles/#specialized-test-case-to-support-live-testing
>> -    """
>> -
>> -    @classmethod
>> -    def setUpClass(cls):
>> -        """ Create a webdriver driver at the class level """
>> -
>> -        super(SeleniumTestCase, cls).setUpClass()
>> -
>> -        # instantiate the Selenium webdriver once for all the test methods
>> -        # in this test case
>> -        cls.driver = create_selenium_driver()
>> -        cls.driver.maximize_window()
>> -
>> -    @classmethod
>> -    def tearDownClass(cls):
>> -        """ Clean up webdriver driver """
>> -
>> -        cls.driver.quit()
>> -        super(SeleniumTestCase, cls).tearDownClass()
>> -
>> -    def get(self, url):
>> -        """
>> -        Selenium requires absolute URLs, so convert Django URLs returned
>> -        by resolve() or similar to absolute ones and get using the
>> -        webdriver instance.
>> -
>> -        url: a relative URL
>> -        """
>> -        abs_url = '%s%s' % (self.live_server_url, url)
>> -        self.driver.get(abs_url)
>> -
>> -    def find(self, selector):
>> -        """ Find single element by CSS selector """
>> -        return self.driver.find_element_by_css_selector(selector)
>> -
>> -    def find_all(self, selector):
>> -        """ Find all elements matching CSS selector """
>> -        return self.driver.find_elements_by_css_selector(selector)
>> -
>> -    def focused_element(self):
>> -        """ Return the element which currently has focus on the page """
>> -        return self.driver.switch_to.active_element
>> -
>> -    def wait_until_present(self, selector):
>> -        """ Wait until element matching CSS selector is on the page """
>> -        is_present = lambda driver: self.find(selector)
>> -        msg = 'An element matching "%s" should be on the page' % selector
>> -        element = Wait(self.driver).until(is_present, msg)
>> -        return element
>> -
>> -    def wait_until_visible(self, selector):
>> -        """ Wait until element matching CSS selector is visible on the
>> page """
>> -        is_visible = lambda driver: self.find(selector).is_displayed()
>> -        msg = 'An element matching "%s" should be visible' % selector
>> -        Wait(self.driver).until(is_visible, msg)
>> -        return self.find(selector)
>> -
>> -    def wait_until_focused(self, selector):
>> -        """ Wait until element matching CSS selector has focus """
>> -        is_focused = \
>> -            lambda driver: self.find(selector) == self.focused_element()
>> -        msg = 'An element matching "%s" should be focused' % selector
>> -        Wait(self.driver).until(is_focused, msg)
>> -        return self.find(selector)
>> -
>> -    def enter_text(self, selector, value):
>> -        """ Insert text into element matching selector """
>> -        # note that keyup events don't occur until the element is clicked
>> -        # (in the case of <input type="text"...>, for example), so
>> simulate
>> -        # user clicking the element before inserting text into it
>> -        field = self.click(selector)
>> -
>> -        field.send_keys(value)
>> -        return field
>> -
>> -    def click(self, selector):
>> -        """ Click on element which matches CSS selector """
>> -        element = self.wait_until_visible(selector)
>> -        element.click()
>> -        return element
>> -
>> -    def get_page_source(self):
>> -        """ Get raw HTML for the current page """
>> -        return self.driver.page_source
>> diff --git a/lib/toaster/tests/browser/selenium_helpers_base.py
>> b/lib/toaster/tests/browser/selenium_helpers_base.py
>> new file mode 100644
>> index 0000000..54db2e8
>> --- /dev/null
>> +++ b/lib/toaster/tests/browser/selenium_helpers_base.py
>> @@ -0,0 +1,205 @@
>> +#! /usr/bin/env python
>> +# ex:ts=4:sw=4:sts=4:et
>> +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
>> +#
>> +# BitBake Toaster Implementation
>> +#
>> +# Copyright (C) 2013-2016 Intel Corporation
>> +#
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License version 2 as
>> +# published by the Free Software Foundation.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License along
>> +# with this program; if not, write to the Free Software Foundation, Inc.,
>> +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>> +#
>> +# The Wait class and some of SeleniumDriverHelper and SeleniumTestCase are
>> +# modified from Patchwork, released under the same licence terms as
>> Toaster:
>> +#
>> https://github.com/dlespiau/patchwork/blob/master/patchwork/tests.browser.py
>> +
>> +"""
>> +Helper methods for creating Toaster Selenium tests which run within
>> +the context of Django unit tests.
>> +"""
>> +
>> +import os
>> +import time
>> +
>> +from django.contrib.staticfiles.testing import StaticLiveServerTestCase
>> +from selenium import webdriver
>> +from selenium.webdriver.support.ui import WebDriverWait
>> +from selenium.common.exceptions import NoSuchElementException, \
>> +        StaleElementReferenceException, TimeoutException
>> +
>> +def create_selenium_driver(browser='chrome'):
>> +    # set default browser string based on env (if available)
>> +    env_browser = os.environ.get('TOASTER_TESTS_BROWSER')
>> +    if env_browser:
>> +        browser = env_browser
>> +
>> +    if browser == 'chrome':
>> +        return webdriver.Chrome(
>> +            service_args=["--verbose", "--log-path=selenium.log"]
>> +        )
>> +    elif browser == 'firefox':
>> +        return webdriver.Firefox()
>> +    elif browser == 'ie':
>> +        return webdriver.Ie()
>> +    elif browser == 'phantomjs':
>> +        return webdriver.PhantomJS()
>> +    else:
>> +        msg = 'Selenium driver for browser %s is not available' % browser
>> +        raise RuntimeError(msg)
>> +
>> +class Wait(WebDriverWait):
>> +    """
>> +    Subclass of WebDriverWait with predetermined timeout and poll
>> +    frequency. Also deals with a wider variety of exceptions.
>> +    """
>> +    _TIMEOUT = 10
>> +    _POLL_FREQUENCY = 0.5
>> +
>> +    def __init__(self, driver):
>> +        super(Wait, self).__init__(driver, self._TIMEOUT,
>> self._POLL_FREQUENCY)
>> +
>> +    def until(self, method, message=''):
>> +        """
>> +        Calls the method provided with the driver as an argument until the
>> +        return value is not False.
>> +        """
>> +
>> +        end_time = time.time() + self._timeout
>> +        while True:
>> +            try:
>> +                value = method(self._driver)
>> +                if value:
>> +                    return value
>> +            except NoSuchElementException:
>> +                pass
>> +            except StaleElementReferenceException:
>> +                pass
>> +
>> +            time.sleep(self._poll)
>> +            if time.time() > end_time:
>> +                break
>> +
>> +        raise TimeoutException(message)
>> +
>> +    def until_not(self, method, message=''):
>> +        """
>> +        Calls the method provided with the driver as an argument until the
>> +        return value is False.
>> +        """
>> +
>> +        end_time = time.time() + self._timeout
>> +        while True:
>> +            try:
>> +                value = method(self._driver)
>> +                if not value:
>> +                    return value
>> +            except NoSuchElementException:
>> +                return True
>> +            except StaleElementReferenceException:
>> +                pass
>> +
>> +            time.sleep(self._poll)
>> +            if time.time() > end_time:
>> +                break
>> +
>> +        raise TimeoutException(message)
>> +
>> +class SeleniumTestCase(StaticLiveServerTestCase):
>> +    """
>> +    NB StaticLiveServerTestCase is used as the base test case so that
>> +    static files are served correctly in a Selenium test run context; see
>> +
>> https://docs.djangoproject.com/en/1.9/ref/contrib/staticfiles/#specialized-test-case-to-support-live-testing
>> +    """
>> +
>> +    @classmethod
>> +    def setUpClass(cls):
>> +        """ Create a webdriver driver at the class level """
>> +
>> +        super(SeleniumTestCase, cls).setUpClass()
>> +
>> +        # instantiate the Selenium webdriver once for all the test methods
>> +        # in this test case
>> +        cls.driver = create_selenium_driver()
>> +        cls.driver.maximize_window()
>> +
>> +    @classmethod
>> +    def tearDownClass(cls):
>> +        """ Clean up webdriver driver """
>> +
>> +        cls.driver.quit()
>> +        super(SeleniumTestCase, cls).tearDownClass()
>> +
>> +    def get(self, url):
>> +        """
>> +        Selenium requires absolute URLs, so convert Django URLs returned
>> +        by resolve() or similar to absolute ones and get using the
>> +        webdriver instance.
>> +
>> +        url: a relative URL
>> +        """
>> +        abs_url = '%s%s' % (self.live_server_url, url)
>> +        self.driver.get(abs_url)
>> +
>> +    def find(self, selector):
>> +        """ Find single element by CSS selector """
>> +        return self.driver.find_element_by_css_selector(selector)
>> +
>> +    def find_all(self, selector):
>> +        """ Find all elements matching CSS selector """
>> +        return self.driver.find_elements_by_css_selector(selector)
>> +
>> +    def focused_element(self):
>> +        """ Return the element which currently has focus on the page """
>> +        return self.driver.switch_to.active_element
>> +
>> +    def wait_until_present(self, selector):
>> +        """ Wait until element matching CSS selector is on the page """
>> +        is_present = lambda driver: self.find(selector)
>> +        msg = 'An element matching "%s" should be on the page' % selector
>> +        element = Wait(self.driver).until(is_present, msg)
>> +        return element
>> +
>> +    def wait_until_visible(self, selector):
>> +        """ Wait until element matching CSS selector is visible on the
>> page """
>> +        is_visible = lambda driver: self.find(selector).is_displayed()
>> +        msg = 'An element matching "%s" should be visible' % selector
>> +        Wait(self.driver).until(is_visible, msg)
>> +        return self.find(selector)
>> +
>> +    def wait_until_focused(self, selector):
>> +        """ Wait until element matching CSS selector has focus """
>> +        is_focused = \
>> +            lambda driver: self.find(selector) == self.focused_element()
>> +        msg = 'An element matching "%s" should be focused' % selector
>> +        Wait(self.driver).until(is_focused, msg)
>> +        return self.find(selector)
>> +
>> +    def enter_text(self, selector, value):
>> +        """ Insert text into element matching selector """
>> +        # note that keyup events don't occur until the element is clicked
>> +        # (in the case of <input type="text"...>, for example), so
>> simulate
>> +        # user clicking the element before inserting text into it
>> +        field = self.click(selector)
>> +
>> +        field.send_keys(value)
>> +        return field
>> +
>> +    def click(self, selector):
>> +        """ Click on element which matches CSS selector """
>> +        element = self.wait_until_visible(selector)
>> +        element.click()
>> +        return element
>> +
>> +    def get_page_source(self):
>> +        """ Get raw HTML for the current page """
>> +        return self.driver.page_source
>> --
>> 2.1.4
>>
>>
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature

-- 
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

Reply via email to