Merge pull request #336 from seleniumbase/pytest-update-and-refactoring

Pytest update and refactoring
This commit is contained in:
Michael Mintz 2019-06-29 16:22:57 -04:00 committed by GitHub
commit 472024b11d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 61 additions and 72 deletions

View File

@ -247,50 +247,39 @@ self.generate_traffic_chain(pages, loops=1)
########
self.wait_for_element_present(selector, by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_element_present(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.assert_element_present(selector, by=By.CSS_SELECTOR,
timeout=settings.SMALL_TIMEOUT)
self.get_element(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.assert_element_present(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
########
self.wait_for_element_visible(selector, by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_element_visible(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.wait_for_element(selector, by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_element(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.find_element(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.assert_element(
selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
self.assert_element(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
self.assert_element_visible(
selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
self.assert_element_visible(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
########
self.wait_for_text_visible(text, selector="html", by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.wait_for_exact_text_visible(text, selector="html", by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_exact_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.wait_for_text(text, selector="html", by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.find_text(text, selector="html", by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.find_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.assert_text_visible(text, selector="html", by=By.CSS_SELECTOR,
timeout=settings.SMALL_TIMEOUT)
self.assert_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
self.assert_text(text, selector="html", by=By.CSS_SELECTOR,
timeout=settings.SMALL_TIMEOUT)
self.assert_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
self.assert_exact_text(text, selector="html", by=By.CSS_SELECTOR,
timeout=settings.SMALL_TIMEOUT)
self.assert_exact_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
########
@ -304,30 +293,23 @@ self.assert_link_text(link_text, timeout=settings.SMALL_TIMEOUT)
########
self.wait_for_partial_link_text(partial_link_text,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_partial_link_text(partial_link_text, timeout=settings.LARGE_TIMEOUT)
self.find_partial_link_text(partial_link_text,
timeout=settings.LARGE_TIMEOUT)
self.find_partial_link_text(partial_link_text, timeout=settings.LARGE_TIMEOUT)
self.assert_partial_link_text(partial_link_text,
timeout=settings.SMALL_TIMEOUT)
self.assert_partial_link_text(partial_link_text, timeout=settings.SMALL_TIMEOUT)
########
self.wait_for_element_absent(selector, by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_element_absent(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.assert_element_absent(selector, by=By.CSS_SELECTOR,
timeout=settings.SMALL_TIMEOUT)
self.assert_element_absent(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
########
self.wait_for_element_not_visible(selector, by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT)
self.wait_for_element_not_visible(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
self.assert_element_not_visible(selector, by=By.CSS_SELECTOR,
timeout=settings.SMALL_TIMEOUT)
self.assert_element_not_visible(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
########
@ -362,11 +344,9 @@ self.switch_to_default_driver()
########
self.delayed_assert_element(selector, by=By.CSS_SELECTOR,
timeout=settings.MINI_TIMEOUT)
self.delayed_assert_element(selector, by=By.CSS_SELECTOR, timeout=settings.MINI_TIMEOUT)
self.delayed_assert_text(text, selector="html", by=By.CSS_SELECTOR,
timeout=settings.MINI_TIMEOUT)
self.delayed_assert_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.MINI_TIMEOUT)
self.process_delayed_asserts()
```

View File

@ -4,16 +4,16 @@ from seleniumbase import BaseCase
class MyTestClass(BaseCase):
def test_basic(self):
self.open('http://xkcd.com/353/')
self.open("https://xkcd.com/353/")
self.assert_element('img[alt="Python"]')
self.click('a[rel="license"]')
self.assert_text('free to copy', 'div center')
self.open("http://xkcd.com/1481/")
self.assert_text("free to copy", "div center")
self.open("https://xkcd.com/1481/")
title = self.get_attribute("#comic img", "title")
self.assert_true("86,400 seconds per day" in title)
self.click('link=Blag')
self.assert_text('The blag of the webcomic', 'h2')
self.update_text('input#s', 'Robots!\n')
self.assert_text('Hooray robots!', '#content')
self.open('http://xkcd.com/1319/')
self.assert_exact_text('Automation', '#ctitle')
self.click("link=Blag")
self.assert_text("The blag of the webcomic", "h2")
self.update_text("input#s", "Robots!\n")
self.assert_text("Hooray robots!", "#content")
self.open("https://xkcd.com/1319/")
self.assert_exact_text("Automation", "#ctitle")

View File

@ -6,6 +6,6 @@
"start": "node ./bin/www"
},
"dependencies": {
"express": "~4.16.4"
"express": "~4.17.1"
}
}

View File

@ -10,7 +10,7 @@ urllib3==1.25.3
requests>=2.22.0
selenium==3.141.0
pluggy>=0.12.0
pytest>=4.6.3
pytest>=4.6.4
pytest-cov>=2.7.1
pytest-forked>=1.0.2
pytest-html>=1.21.1

View File

@ -79,22 +79,22 @@ def main():
data.append("class MyTestClass(BaseCase):")
data.append("")
data.append(" def test_basic(self):")
data.append(" self.open('https://xkcd.com/353/')")
data.append(' self.open("https://xkcd.com/353/")')
data.append(" self.assert_element('img[alt=\"Python\"]')")
data.append(" self.click('a[rel=\"license\"]')")
data.append(" self.assert_text('free to copy', 'div center')")
data.append(" self.open(\"https://xkcd.com/1481/\")")
data.append(' self.assert_text("free to copy", "div center")')
data.append(' self.open("https://xkcd.com/1481/")')
data.append(
" title = self.get_attribute(\"#comic img\", \"title\")")
data.append(
" self.assert_true(\"86,400 seconds per day\" in title)")
data.append(" self.click('link=Blag')")
data.append(' self.click("link=Blag")')
data.append(
" self.assert_text('The blag of the webcomic', 'h2')")
data.append(" self.update_text('input#s', 'Robots!\\n')")
data.append(" self.assert_text('Hooray robots!', '#content')")
data.append(" self.open('https://xkcd.com/1319/')")
data.append(" self.assert_exact_text('Automation', '#ctitle')")
' self.assert_text("The blag of the webcomic", "h2")')
data.append(' self.update_text("input#s", "Robots!\\n")')
data.append(' self.assert_text("Hooray robots!", "#content")')
data.append(' self.open("https://xkcd.com/1319/")')
data.append(' self.assert_exact_text("Automation", "#ctitle")')
data.append("")
file_path = "%s/%s" % (dir_name, "my_first_test.py")
file = codecs.open(file_path, "w+", "utf-8")

View File

@ -1403,7 +1403,8 @@ class BaseCase(unittest.TestCase):
Other element would receive the click: ... } """
if page_utils.is_xpath_selector(selector):
by = By.XPATH
self.find_element(selector, by=by, timeout=settings.SMALL_TIMEOUT)
self.wait_for_element_visible(
selector, by=by, timeout=settings.SMALL_TIMEOUT)
try:
selector = self.convert_to_css_selector(selector, by=by)
except Exception:
@ -1439,7 +1440,7 @@ class BaseCase(unittest.TestCase):
scroll - the option to scroll to the element first (Default: True)
"""
selector, by = self.__recalculate_selector(selector, by)
element = self.find_element(
element = self.wait_for_element_visible(
selector, by=by, timeout=settings.SMALL_TIMEOUT)
if scroll:
self.__slow_scroll_to_element(element)
@ -1725,7 +1726,7 @@ class BaseCase(unittest.TestCase):
def save_element_as_image_file(self, selector, file_name, folder=None):
""" Take a screenshot of an element and save it as an image file.
If no folder is specified, will save it to the current folder. """
element = self.find_element(selector)
element = self.wait_for_element_visible(selector)
element_png = element.screenshot_as_png
if len(file_name.split('.')[0]) < 1:
raise Exception("Error: file_name length must be > 0.")
@ -1995,7 +1996,7 @@ class BaseCase(unittest.TestCase):
Defaults to "text" if option_by is unspecified or unknown. """
if page_utils.is_xpath_selector(dropdown_selector):
dropdown_by = By.XPATH
element = self.find_element(
element = self.wait_for_element_visible(
dropdown_selector, by=dropdown_by, timeout=timeout)
self.__demo_mode_highlight_if_active(dropdown_selector, dropdown_by)
pre_action_url = self.driver.current_url
@ -2009,7 +2010,7 @@ class BaseCase(unittest.TestCase):
except (StaleElementReferenceException, ENI_Exception):
self.wait_for_ready_state_complete()
time.sleep(0.05)
element = self.find_element(
element = self.wait_for_element_visible(
dropdown_selector, by=dropdown_by, timeout=timeout)
if option_by == "index":
Select(element).select_by_index(option)
@ -2147,6 +2148,14 @@ class BaseCase(unittest.TestCase):
return page_actions.wait_for_element_present(
self.driver, selector, by, timeout)
def get_element(self, selector, by=By.CSS_SELECTOR,
timeout=settings.LARGE_TIMEOUT):
""" Same as wait_for_element_present() - returns the element.
The element does not need be visible (it may be hidden). """
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
timeout = self.__get_new_timeout(timeout)
return self.wait_for_element_present(selector, by=by, timeout=timeout)
def assert_element_present(self, selector, by=By.CSS_SELECTOR,
timeout=settings.SMALL_TIMEOUT):
""" Similar to wait_for_element_present(), but returns nothing.
@ -3055,7 +3064,7 @@ class BaseCase(unittest.TestCase):
def __highlight_with_assert_success(
self, message, selector, by=By.CSS_SELECTOR):
selector, by = self.__recalculate_selector(selector, by)
element = self.find_element(
element = self.wait_for_element_visible(
selector, by=by, timeout=settings.SMALL_TIMEOUT)
try:
selector = self.convert_to_css_selector(selector, by=by)

View File

@ -17,7 +17,7 @@ except IOError:
setup(
name='seleniumbase',
version='1.24.0',
version='1.24.1',
description='Reliable Browser Automation & Testing Framework',
long_description=long_description,
long_description_content_type='text/markdown',
@ -64,7 +64,7 @@ setup(
'requests>=2.22.0',
'selenium==3.141.0',
'pluggy>=0.12.0',
'pytest>=4.6.3',
'pytest>=4.6.4', # Keep at >=4.6.4 for Python 2 compatibility
'pytest-cov>=2.7.1',
'pytest-forked>=1.0.2',
'pytest-html>=1.21.1',