Skip to content

Commit a854d75

Browse files
authored
Merge pull request #578 from seleniumbase/simplify-error-output
Simplify error output and fix Remote WebDriver issues
2 parents ed7e54f + 0a5f7de commit a854d75

File tree

11 files changed

+187
-77
lines changed

11 files changed

+187
-77
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
<meta property="og:description" content="Simple browser automation and testing with Python." />
44
<meta property="og:image" content="https://seleniumbase.io/img/sb_logo_7.png" />
55
<link rel="icon" href="https://seleniumbase.io/img/logo3a.png" />
6-
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.io/img/sb_logo_7.png" alt="SeleniumBase" width="260" /></a></p>
6+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/">
7+
<img src="https://seleniumbase.io/img/sb_logo_7.png" alt="SeleniumBase" width="260" />
8+
</a></p>
9+
<!-- View on GitHub -->
710

811
<p align="center">
912
<a href="https://github.com/seleniumbase/SeleniumBase/releases">

docs/prepare.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,15 @@ def main(*args, **kwargs):
9393
if ' href="' in line and '.md"' in line:
9494
changed = True
9595
line = line.replace('.md"', '/"')
96+
if "<!-- View on GitHub -->" in line:
97+
changed = True
98+
line = (
99+
r'<p align="center"><div align="center">'
100+
r'<a href="https://github.com/seleniumbase/SeleniumBase">'
101+
r'<img src="https://img.shields.io/badge/'
102+
r'✅%20💛%20View%20Code-on%20GitHub%20🌎%20🚀'
103+
r'-02A79E.svg" alt="SeleniumBase.io Docs" />'
104+
r'</a></div></p>')
96105
seleniumbase_lines.append(line)
97106
if changed:
98107
out_file = codecs.open(readme_file, "w+", encoding='utf-8')

docs/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mkdocs==1.1.2
2-
mkdocs-material==5.2.0
2+
mkdocs-material==5.2.1
33
mkdocs-simple-hooks==0.1.1
44
mkdocs-material-extensions==1.0
55
mkdocs-minify-plugin==0.3.0

help_docs/ReadMe.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@
44

55
<h3>Table of Contents (<a href="https://seleniumbase.io">seleniumbase.io</a>)</h3>
66

7-
<div><a href="https://seleniumbase.io/help_docs/features_list/"><b>SeleniumBase Features List</b></a></div>
8-
<div><a href="https://seleniumbase.io/help_docs/customizing_test_runs/"><b>The Command Line Tutorial</b></a></div>
7+
<div><a href="https://seleniumbase.io/help_docs/features_list/"><b>Features List</b></a></div>
8+
<div><a href="https://seleniumbase.io/help_docs/customizing_test_runs/"><b>Command Line Tutorial</b></a></div>
9+
<div><a href="https://seleniumbase.io/examples/ReadMe/"><b>Usage Examples</b></a></div>
910
<div><a href="https://seleniumbase.io/help_docs/how_it_works/"><b>How SeleniumBase Works</b></a></div>
1011
<div><a href="https://seleniumbase.io/help_docs/install_python_pip_git/"><b>Installing Python, Pip, & Git</b></a></div>
1112
<div><a href="https://seleniumbase.io/help_docs/virtualenv_instructions/"><b>Python Virtual Env Tutorial</b></a></div>
1213
<div><a href="https://seleniumbase.io/help_docs/install/"><b>SeleniumBase Installation</b></a></div>
1314
<div><a href="https://seleniumbase.io/help_docs/webdriver_installation/"><b>Webdriver Installation</b></a></div>
1415
<div><a href="https://seleniumbase.io/help_docs/verify_webdriver/"><b>Verify Webdriver Works</b></a></div>
15-
<div><a href="https://seleniumbase.io/seleniumbase/console_scripts/ReadMe/"><b>The Console Scripts Tutorial</b></a></div>
16+
<div><a href="https://seleniumbase.io/seleniumbase/console_scripts/ReadMe/"><b>Console Scripts Tutorial</b></a></div>
1617
<div><a href="https://seleniumbase.io/help_docs/mobile_testing/"><b>Mobile Device Testing</b></a></div>
1718
<div><a href="https://seleniumbase.io/help_docs/method_summary/"><b>Method Summary (API Ref)</b></a></div>
1819
<div><a href="https://seleniumbase.io/help_docs/translations/"><b>Language Translations</b></a></div>
@@ -22,21 +23,22 @@
2223
<div><a href="https://seleniumbase.io/help_docs/desired_capabilities/"><b>Browser Desired Capabilities</b></a></div>
2324
<div><a href="https://seleniumbase.io/help_docs/using_safari_driver/"><b>Safari Driver Detailed Info</b></a></div>
2425
<div><a href="https://seleniumbase.io/help_docs/hidden_files_info/"><b>Seeing Hidden Files on macOS</b></a></div>
25-
<div><a href="https://seleniumbase.io/help_docs/happy_customers/"><b>SeleniumBase Case Studies</b></a></div>
26+
<div><a href="https://seleniumbase.io/help_docs/happy_customers/"><b>Case Studies</b></a></div>
2627

2728
--------
2829

2930
<h3>GitHub Pages ToC (<a href="https://seleniumbase.com">seleniumbase.com</a>)</h3>
3031

31-
<div><a href="https://seleniumbase.com/help_docs/features_list.html"><b>SeleniumBase Features List</b></a></div>
32-
<div><a href="https://seleniumbase.com/help_docs/customizing_test_runs.html"><b>The Command Line Tutorial</b></a></div>
32+
<div><a href="https://seleniumbase.com/help_docs/features_list.html"><b>Features List</b></a></div>
33+
<div><a href="https://seleniumbase.com/help_docs/customizing_test_runs.html"><b>Command Line Tutorial</b></a></div>
34+
<div><a href="https://seleniumbase.com/examples/"><b>Usage Examples</b></a></div>
3335
<div><a href="https://seleniumbase.com/help_docs/how_it_works.html"><b>How SeleniumBase Works</b></a></div>
3436
<div><a href="https://seleniumbase.com/help_docs/install_python_pip_git.html"><b>Installing Python, Pip, & Git</b></a></div>
3537
<div><a href="https://seleniumbase.com/help_docs/virtualenv_instructions.html"><b>Python Virtual Env Tutorial</b></a></div>
3638
<div><a href="https://seleniumbase.com/help_docs/install.html"><b>SeleniumBase Installation</b></a></div>
3739
<div><a href="https://seleniumbase.com/help_docs/webdriver_installation.html"><b>Webdriver Installation</b></a></div>
3840
<div><a href="https://seleniumbase.com/help_docs/verify_webdriver.html"><b>Verify Webdriver Works</b></a></div>
39-
<div><a href="https://seleniumbase.com/seleniumbase/console_scripts/"><b>The Console Scripts Tutorial</b></a></div>
41+
<div><a href="https://seleniumbase.com/seleniumbase/console_scripts/"><b>Console Scripts Tutorial</b></a></div>
4042
<div><a href="https://seleniumbase.com/help_docs/mobile_testing.html"><b>Mobile Device Testing</b></a></div>
4143
<div><a href="https://seleniumbase.com/help_docs/method_summary.html"><b>Method Summary (API Ref)</b></a></div>
4244
<div><a href="https://seleniumbase.com/help_docs/translations.html"><b>Language Translations</b></a></div>
@@ -46,4 +48,11 @@
4648
<div><a href="https://seleniumbase.com/help_docs/desired_capabilities.html"><b>Browser Desired Capabilities</b></a></div>
4749
<div><a href="https://seleniumbase.com/help_docs/using_safari_driver.html"><b>Safari Driver Detailed Info</b></a></div>
4850
<div><a href="https://seleniumbase.com/help_docs/hidden_files_info.html"><b>Seeing Hidden Files on macOS</b></a></div>
49-
<div><a href="https://seleniumbase.com/help_docs/happy_customers.html"><b>SeleniumBase Case Studies</b></a></div>
51+
<div><a href="https://seleniumbase.com/help_docs/happy_customers.html"><b>Case Studies</b></a></div>
52+
53+
--------
54+
55+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/">
56+
<img src="https://seleniumbase.io/img/sb_logo_7.png" alt="SeleniumBase" width="260" />
57+
</a></p>
58+
<!-- View on GitHub -->

requirements.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
pip>=20.1
1+
pip>=20.1.1
2+
packaging>=20.4
23
setuptools>=44.1.0;python_version<"3.5"
34
setuptools>=46.4.0;python_version>="3.5"
45
setuptools-scm>=3.5.0
56
wheel>=0.34.2
6-
six==1.14.0
7+
six==1.15.0
78
nose==1.3.7
89
ipdb==0.13.2
910
idna==2.9
@@ -15,7 +16,7 @@ pluggy==0.13.1
1516
attrs>=19.3.0
1617
pytest==4.6.10;python_version<"3.5"
1718
pytest==5.4.2;python_version>="3.5"
18-
pytest-cov==2.8.1
19+
pytest-cov==2.9.0
1920
pytest-forked==1.1.3
2021
pytest-html==1.22.1;python_version<"3.6"
2122
pytest-html==2.0.1;python_version>="3.6"
@@ -33,9 +34,8 @@ cryptography==2.9.2
3334
pyopenssl==19.1.0
3435
pygments==2.5.2;python_version<"3.5"
3536
pygments==2.6.1;python_version>="3.5"
36-
packaging>=20.3
3737
colorama==0.4.3
38-
brython==3.8.8
38+
brython>=3.8.9
3939
pymysql==0.9.3
4040
coverage==5.1
4141
pyotp==2.3.0

seleniumbase/core/browser_launcher.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,8 @@ def get_remote_driver(
451451
capabilities[key] = desired_caps[key]
452452
return webdriver.Remote(
453453
command_executor=address,
454-
desired_capabilities=capabilities)
454+
desired_capabilities=capabilities,
455+
keep_alive=True)
455456
elif browser_name == constants.Browser.FIREFOX:
456457
try:
457458
# Use Geckodriver for Firefox if it's on the PATH
@@ -469,7 +470,8 @@ def get_remote_driver(
469470
return webdriver.Remote(
470471
command_executor=address,
471472
desired_capabilities=capabilities,
472-
browser_profile=profile)
473+
browser_profile=profile,
474+
keep_alive=True)
473475
except WebDriverException:
474476
# Don't use Geckodriver: Only works for old versions of Firefox
475477
profile = _create_firefox_profile(
@@ -485,35 +487,40 @@ def get_remote_driver(
485487
return webdriver.Remote(
486488
command_executor=address,
487489
desired_capabilities=capabilities,
488-
browser_profile=profile)
490+
browser_profile=profile,
491+
keep_alive=True)
489492
elif browser_name == constants.Browser.INTERNET_EXPLORER:
490493
capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER
491494
for key in desired_caps.keys():
492495
capabilities[key] = desired_caps[key]
493496
return webdriver.Remote(
494497
command_executor=address,
495-
desired_capabilities=capabilities)
498+
desired_capabilities=capabilities,
499+
keep_alive=True)
496500
elif browser_name == constants.Browser.EDGE:
497501
capabilities = webdriver.DesiredCapabilities.EDGE
498502
for key in desired_caps.keys():
499503
capabilities[key] = desired_caps[key]
500504
return webdriver.Remote(
501505
command_executor=address,
502-
desired_capabilities=capabilities)
506+
desired_capabilities=capabilities,
507+
keep_alive=True)
503508
elif browser_name == constants.Browser.SAFARI:
504509
capabilities = webdriver.DesiredCapabilities.SAFARI
505510
for key in desired_caps.keys():
506511
capabilities[key] = desired_caps[key]
507512
return webdriver.Remote(
508513
command_executor=address,
509-
desired_capabilities=capabilities)
514+
desired_capabilities=capabilities,
515+
keep_alive=True)
510516
elif browser_name == constants.Browser.OPERA:
511517
capabilities = webdriver.DesiredCapabilities.OPERA
512518
for key in desired_caps.keys():
513519
capabilities[key] = desired_caps[key]
514520
return webdriver.Remote(
515521
command_executor=address,
516-
desired_capabilities=capabilities)
522+
desired_capabilities=capabilities,
523+
keep_alive=True)
517524
elif browser_name == constants.Browser.PHANTOM_JS:
518525
capabilities = webdriver.DesiredCapabilities.PHANTOMJS
519526
for key in desired_caps.keys():
@@ -523,32 +530,37 @@ def get_remote_driver(
523530
warnings.simplefilter("ignore", category=UserWarning)
524531
return webdriver.Remote(
525532
command_executor=address,
526-
desired_capabilities=capabilities)
533+
desired_capabilities=capabilities,
534+
keep_alive=True)
527535
elif browser_name == constants.Browser.ANDROID:
528536
capabilities = webdriver.DesiredCapabilities.ANDROID
529537
for key in desired_caps.keys():
530538
capabilities[key] = desired_caps[key]
531539
return webdriver.Remote(
532540
command_executor=address,
533-
desired_capabilities=capabilities)
541+
desired_capabilities=capabilities,
542+
keep_alive=True)
534543
elif browser_name == constants.Browser.IPHONE:
535544
capabilities = webdriver.DesiredCapabilities.IPHONE
536545
for key in desired_caps.keys():
537546
capabilities[key] = desired_caps[key]
538547
return webdriver.Remote(
539548
command_executor=address,
540-
desired_capabilities=capabilities)
549+
desired_capabilities=capabilities,
550+
keep_alive=True)
541551
elif browser_name == constants.Browser.IPAD:
542552
capabilities = webdriver.DesiredCapabilities.IPAD
543553
for key in desired_caps.keys():
544554
capabilities[key] = desired_caps[key]
545555
return webdriver.Remote(
546556
command_executor=address,
547-
desired_capabilities=capabilities)
557+
desired_capabilities=capabilities,
558+
keep_alive=True)
548559
elif browser_name == constants.Browser.REMOTE:
549560
return webdriver.Remote(
550561
command_executor=address,
551-
desired_capabilities=desired_caps)
562+
desired_capabilities=desired_caps,
563+
keep_alive=True)
552564

553565

554566
def get_local_driver(

seleniumbase/fixtures/base_case.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2519,11 +2519,12 @@ def assert_downloaded_file(self, file, timeout=None):
25192519
if now_ms >= stop_ms:
25202520
break
25212521
time.sleep(1)
2522-
self.assertTrue(
2523-
os.path.exists(self.get_path_of_downloaded_file(file)),
2524-
"File [%s] was not found in the downloads folder [%s] "
2525-
"after %s seconds! (Or the download didn't complete!)"
2526-
"" % (file, self.get_downloads_folder(), timeout))
2522+
if not os.path.exists(self.get_path_of_downloaded_file(file)):
2523+
message = (
2524+
"File {%s} was not found in the downloads folder {%s} "
2525+
"after %s seconds! (Or the download didn't complete!)"
2526+
"" % (file, self.get_downloads_folder(), timeout))
2527+
page_actions.timeout_exception("NoSuchFileException", message)
25272528
if self.demo_mode:
25282529
messenger_post = ("ASSERT DOWNLOADED FILE: [%s]" % file)
25292530
js_utils.post_messenger_success_message(
@@ -3769,9 +3770,10 @@ def wait_for_link_text_present(self, link_text, timeout=None):
37693770
if now_ms >= stop_ms:
37703771
break
37713772
time.sleep(0.2)
3772-
raise Exception(
3773-
"Link text {%s} was not present after %s seconds!" % (
3774-
link_text, timeout))
3773+
message = (
3774+
"Link text {%s} was not present after %s seconds!"
3775+
"" % (link_text, timeout))
3776+
page_actions.timeout_exception("NoSuchElementException", message)
37753777

37763778
def wait_for_partial_link_text_present(self, link_text, timeout=None):
37773779
if not timeout:
@@ -3790,9 +3792,10 @@ def wait_for_partial_link_text_present(self, link_text, timeout=None):
37903792
if now_ms >= stop_ms:
37913793
break
37923794
time.sleep(0.2)
3793-
raise Exception(
3794-
"Partial Link text {%s} was not present after %s seconds!" % (
3795-
link_text, timeout))
3795+
message = (
3796+
"Partial Link text {%s} was not present after %s seconds!"
3797+
"" % (link_text, timeout))
3798+
page_actions.timeout_exception("NoSuchElementException", message)
37963799

37973800
def wait_for_link_text_visible(self, link_text, timeout=None):
37983801
if not timeout:

seleniumbase/fixtures/errors.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
"""
22
This module contains test-state related exceptions.
33
Raising one of these in a test will cause the
4-
test-state to be logged appropriately.
4+
test-state to be logged appropriately in the database
5+
for tests that use the SeleniumBase MySQL plugin.
56
"""
67

78

0 commit comments

Comments
 (0)