Skip to content

Commit 472024b

Browse files
authored
Merge pull request #336 from seleniumbase/pytest-update-and-refactoring
Pytest update and refactoring
2 parents b08f486 + fb4a956 commit 472024b

File tree

7 files changed

+61
-72
lines changed

7 files changed

+61
-72
lines changed

help_docs/method_summary.md

Lines changed: 24 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -247,50 +247,39 @@ self.generate_traffic_chain(pages, loops=1)
247247

248248
########
249249

250-
self.wait_for_element_present(selector, by=By.CSS_SELECTOR,
251-
timeout=settings.LARGE_TIMEOUT)
250+
self.wait_for_element_present(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
252251

253-
self.assert_element_present(selector, by=By.CSS_SELECTOR,
254-
timeout=settings.SMALL_TIMEOUT)
252+
self.get_element(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
253+
254+
self.assert_element_present(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
255255

256256
########
257257

258-
self.wait_for_element_visible(selector, by=By.CSS_SELECTOR,
259-
timeout=settings.LARGE_TIMEOUT)
258+
self.wait_for_element_visible(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
260259

261-
self.wait_for_element(selector, by=By.CSS_SELECTOR,
262-
timeout=settings.LARGE_TIMEOUT)
260+
self.wait_for_element(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
263261

264262
self.find_element(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
265263

266-
self.assert_element(
267-
selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
264+
self.assert_element(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
268265

269-
self.assert_element_visible(
270-
selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
266+
self.assert_element_visible(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
271267

272268
########
273269

274-
self.wait_for_text_visible(text, selector="html", by=By.CSS_SELECTOR,
275-
timeout=settings.LARGE_TIMEOUT)
270+
self.wait_for_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
276271

277-
self.wait_for_exact_text_visible(text, selector="html", by=By.CSS_SELECTOR,
278-
timeout=settings.LARGE_TIMEOUT)
272+
self.wait_for_exact_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
279273

280-
self.wait_for_text(text, selector="html", by=By.CSS_SELECTOR,
281-
timeout=settings.LARGE_TIMEOUT)
274+
self.wait_for_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
282275

283-
self.find_text(text, selector="html", by=By.CSS_SELECTOR,
284-
timeout=settings.LARGE_TIMEOUT)
276+
self.find_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
285277

286-
self.assert_text_visible(text, selector="html", by=By.CSS_SELECTOR,
287-
timeout=settings.SMALL_TIMEOUT)
278+
self.assert_text_visible(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
288279

289-
self.assert_text(text, selector="html", by=By.CSS_SELECTOR,
290-
timeout=settings.SMALL_TIMEOUT)
280+
self.assert_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
291281

292-
self.assert_exact_text(text, selector="html", by=By.CSS_SELECTOR,
293-
timeout=settings.SMALL_TIMEOUT)
282+
self.assert_exact_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
294283

295284
########
296285

@@ -304,30 +293,23 @@ self.assert_link_text(link_text, timeout=settings.SMALL_TIMEOUT)
304293

305294
########
306295

307-
self.wait_for_partial_link_text(partial_link_text,
308-
timeout=settings.LARGE_TIMEOUT)
296+
self.wait_for_partial_link_text(partial_link_text, timeout=settings.LARGE_TIMEOUT)
309297

310-
self.find_partial_link_text(partial_link_text,
311-
timeout=settings.LARGE_TIMEOUT)
298+
self.find_partial_link_text(partial_link_text, timeout=settings.LARGE_TIMEOUT)
312299

313-
self.assert_partial_link_text(partial_link_text,
314-
timeout=settings.SMALL_TIMEOUT)
300+
self.assert_partial_link_text(partial_link_text, timeout=settings.SMALL_TIMEOUT)
315301

316302
########
317303

318-
self.wait_for_element_absent(selector, by=By.CSS_SELECTOR,
319-
timeout=settings.LARGE_TIMEOUT)
304+
self.wait_for_element_absent(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
320305

321-
self.assert_element_absent(selector, by=By.CSS_SELECTOR,
322-
timeout=settings.SMALL_TIMEOUT)
306+
self.assert_element_absent(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
323307

324308
########
325309

326-
self.wait_for_element_not_visible(selector, by=By.CSS_SELECTOR,
327-
timeout=settings.LARGE_TIMEOUT)
310+
self.wait_for_element_not_visible(selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT)
328311

329-
self.assert_element_not_visible(selector, by=By.CSS_SELECTOR,
330-
timeout=settings.SMALL_TIMEOUT)
312+
self.assert_element_not_visible(selector, by=By.CSS_SELECTOR, timeout=settings.SMALL_TIMEOUT)
331313

332314
########
333315

@@ -362,11 +344,9 @@ self.switch_to_default_driver()
362344

363345
########
364346

365-
self.delayed_assert_element(selector, by=By.CSS_SELECTOR,
366-
timeout=settings.MINI_TIMEOUT)
347+
self.delayed_assert_element(selector, by=By.CSS_SELECTOR, timeout=settings.MINI_TIMEOUT)
367348

368-
self.delayed_assert_text(text, selector="html", by=By.CSS_SELECTOR,
369-
timeout=settings.MINI_TIMEOUT)
349+
self.delayed_assert_text(text, selector="html", by=By.CSS_SELECTOR, timeout=settings.MINI_TIMEOUT)
370350

371351
self.process_delayed_asserts()
372352
```

integrations/node_js/my_first_test.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
class MyTestClass(BaseCase):
55

66
def test_basic(self):
7-
self.open('http://xkcd.com/353/')
7+
self.open("https://xkcd.com/353/")
88
self.assert_element('img[alt="Python"]')
99
self.click('a[rel="license"]')
10-
self.assert_text('free to copy', 'div center')
11-
self.open("http://xkcd.com/1481/")
10+
self.assert_text("free to copy", "div center")
11+
self.open("https://xkcd.com/1481/")
1212
title = self.get_attribute("#comic img", "title")
1313
self.assert_true("86,400 seconds per day" in title)
14-
self.click('link=Blag')
15-
self.assert_text('The blag of the webcomic', 'h2')
16-
self.update_text('input#s', 'Robots!\n')
17-
self.assert_text('Hooray robots!', '#content')
18-
self.open('http://xkcd.com/1319/')
19-
self.assert_exact_text('Automation', '#ctitle')
14+
self.click("link=Blag")
15+
self.assert_text("The blag of the webcomic", "h2")
16+
self.update_text("input#s", "Robots!\n")
17+
self.assert_text("Hooray robots!", "#content")
18+
self.open("https://xkcd.com/1319/")
19+
self.assert_exact_text("Automation", "#ctitle")

integrations/node_js/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
"start": "node ./bin/www"
77
},
88
"dependencies": {
9-
"express": "~4.16.4"
9+
"express": "~4.17.1"
1010
}
1111
}

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ urllib3==1.25.3
1010
requests>=2.22.0
1111
selenium==3.141.0
1212
pluggy>=0.12.0
13-
pytest>=4.6.3
13+
pytest>=4.6.4
1414
pytest-cov>=2.7.1
1515
pytest-forked>=1.0.2
1616
pytest-html>=1.21.1

seleniumbase/console_scripts/sb_mkdir.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,22 +79,22 @@ def main():
7979
data.append("class MyTestClass(BaseCase):")
8080
data.append("")
8181
data.append(" def test_basic(self):")
82-
data.append(" self.open('https://xkcd.com/353/')")
82+
data.append(' self.open("https://xkcd.com/353/")')
8383
data.append(" self.assert_element('img[alt=\"Python\"]')")
8484
data.append(" self.click('a[rel=\"license\"]')")
85-
data.append(" self.assert_text('free to copy', 'div center')")
86-
data.append(" self.open(\"https://xkcd.com/1481/\")")
85+
data.append(' self.assert_text("free to copy", "div center")')
86+
data.append(' self.open("https://xkcd.com/1481/")')
8787
data.append(
8888
" title = self.get_attribute(\"#comic img\", \"title\")")
8989
data.append(
9090
" self.assert_true(\"86,400 seconds per day\" in title)")
91-
data.append(" self.click('link=Blag')")
91+
data.append(' self.click("link=Blag")')
9292
data.append(
93-
" self.assert_text('The blag of the webcomic', 'h2')")
94-
data.append(" self.update_text('input#s', 'Robots!\\n')")
95-
data.append(" self.assert_text('Hooray robots!', '#content')")
96-
data.append(" self.open('https://xkcd.com/1319/')")
97-
data.append(" self.assert_exact_text('Automation', '#ctitle')")
93+
' self.assert_text("The blag of the webcomic", "h2")')
94+
data.append(' self.update_text("input#s", "Robots!\\n")')
95+
data.append(' self.assert_text("Hooray robots!", "#content")')
96+
data.append(' self.open("https://xkcd.com/1319/")')
97+
data.append(' self.assert_exact_text("Automation", "#ctitle")')
9898
data.append("")
9999
file_path = "%s/%s" % (dir_name, "my_first_test.py")
100100
file = codecs.open(file_path, "w+", "utf-8")

seleniumbase/fixtures/base_case.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1403,7 +1403,8 @@ def bring_to_front(self, selector, by=By.CSS_SELECTOR):
14031403
Other element would receive the click: ... } """
14041404
if page_utils.is_xpath_selector(selector):
14051405
by = By.XPATH
1406-
self.find_element(selector, by=by, timeout=settings.SMALL_TIMEOUT)
1406+
self.wait_for_element_visible(
1407+
selector, by=by, timeout=settings.SMALL_TIMEOUT)
14071408
try:
14081409
selector = self.convert_to_css_selector(selector, by=by)
14091410
except Exception:
@@ -1439,7 +1440,7 @@ def highlight(self, selector, by=By.CSS_SELECTOR,
14391440
scroll - the option to scroll to the element first (Default: True)
14401441
"""
14411442
selector, by = self.__recalculate_selector(selector, by)
1442-
element = self.find_element(
1443+
element = self.wait_for_element_visible(
14431444
selector, by=by, timeout=settings.SMALL_TIMEOUT)
14441445
if scroll:
14451446
self.__slow_scroll_to_element(element)
@@ -1725,7 +1726,7 @@ def choose_file(self, selector, file_path, by=By.CSS_SELECTOR,
17251726
def save_element_as_image_file(self, selector, file_name, folder=None):
17261727
""" Take a screenshot of an element and save it as an image file.
17271728
If no folder is specified, will save it to the current folder. """
1728-
element = self.find_element(selector)
1729+
element = self.wait_for_element_visible(selector)
17291730
element_png = element.screenshot_as_png
17301731
if len(file_name.split('.')[0]) < 1:
17311732
raise Exception("Error: file_name length must be > 0.")
@@ -1995,7 +1996,7 @@ def __select_option(self, dropdown_selector, option,
19951996
Defaults to "text" if option_by is unspecified or unknown. """
19961997
if page_utils.is_xpath_selector(dropdown_selector):
19971998
dropdown_by = By.XPATH
1998-
element = self.find_element(
1999+
element = self.wait_for_element_visible(
19992000
dropdown_selector, by=dropdown_by, timeout=timeout)
20002001
self.__demo_mode_highlight_if_active(dropdown_selector, dropdown_by)
20012002
pre_action_url = self.driver.current_url
@@ -2009,7 +2010,7 @@ def __select_option(self, dropdown_selector, option,
20092010
except (StaleElementReferenceException, ENI_Exception):
20102011
self.wait_for_ready_state_complete()
20112012
time.sleep(0.05)
2012-
element = self.find_element(
2013+
element = self.wait_for_element_visible(
20132014
dropdown_selector, by=dropdown_by, timeout=timeout)
20142015
if option_by == "index":
20152016
Select(element).select_by_index(option)
@@ -2147,6 +2148,14 @@ def wait_for_element_present(self, selector, by=By.CSS_SELECTOR,
21472148
return page_actions.wait_for_element_present(
21482149
self.driver, selector, by, timeout)
21492150

2151+
def get_element(self, selector, by=By.CSS_SELECTOR,
2152+
timeout=settings.LARGE_TIMEOUT):
2153+
""" Same as wait_for_element_present() - returns the element.
2154+
The element does not need be visible (it may be hidden). """
2155+
if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
2156+
timeout = self.__get_new_timeout(timeout)
2157+
return self.wait_for_element_present(selector, by=by, timeout=timeout)
2158+
21502159
def assert_element_present(self, selector, by=By.CSS_SELECTOR,
21512160
timeout=settings.SMALL_TIMEOUT):
21522161
""" Similar to wait_for_element_present(), but returns nothing.
@@ -3055,7 +3064,7 @@ def __slow_scroll_to_element(self, element):
30553064
def __highlight_with_assert_success(
30563065
self, message, selector, by=By.CSS_SELECTOR):
30573066
selector, by = self.__recalculate_selector(selector, by)
3058-
element = self.find_element(
3067+
element = self.wait_for_element_visible(
30593068
selector, by=by, timeout=settings.SMALL_TIMEOUT)
30603069
try:
30613070
selector = self.convert_to_css_selector(selector, by=by)

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
setup(
1919
name='seleniumbase',
20-
version='1.24.0',
20+
version='1.24.1',
2121
description='Reliable Browser Automation & Testing Framework',
2222
long_description=long_description,
2323
long_description_content_type='text/markdown',
@@ -64,7 +64,7 @@
6464
'requests>=2.22.0',
6565
'selenium==3.141.0',
6666
'pluggy>=0.12.0',
67-
'pytest>=4.6.3',
67+
'pytest>=4.6.4', # Keep at >=4.6.4 for Python 2 compatibility
6868
'pytest-cov>=2.7.1',
6969
'pytest-forked>=1.0.2',
7070
'pytest-html>=1.21.1',

0 commit comments

Comments
 (0)