seleniumbase 4.15.10__py3-none-any.whl → 4.15.12__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.15.10"
2
+ __version__ = "4.15.12"
@@ -62,8 +62,9 @@ class DatabaseManager:
62
62
  except Exception:
63
63
  time.sleep(backoff)
64
64
  count = count + 1
65
- if retry_count == 3:
66
- raise Exception("Unable to connect to Database after 3 retries.")
65
+ if retry_count == 3:
66
+ print("Unable to connect to Database after 3 retries.")
67
+ raise
67
68
 
68
69
  def query_fetch_all(self, query, values):
69
70
  """Execute db query, get all the values, and close the connection."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.15.10
3
+ Version: 4.15.12
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -56,13 +56,11 @@ Classifier: Topic :: Utilities
56
56
  Requires-Python: >=3.6
57
57
  Description-Content-Type: text/markdown
58
58
  License-File: LICENSE
59
- Requires-Dist: PyYAML (>=6.0)
60
59
  Requires-Dist: certifi (>=2023.5.7)
61
60
  Requires-Dist: parse (>=1.19.1)
62
61
  Requires-Dist: parse-type (>=0.6.2)
63
62
  Requires-Dist: six (==1.16.0)
64
63
  Requires-Dist: idna (==3.4)
65
- Requires-Dist: requests-toolbelt (==1.0.0)
66
64
  Requires-Dist: pynose (==1.4.6)
67
65
  Requires-Dist: sortedcontainers (==2.4.0)
68
66
  Requires-Dist: py (==1.11.0)
@@ -73,21 +71,14 @@ Requires-Dist: behave (==1.2.6)
73
71
  Requires-Dist: beautifulsoup4 (==4.12.2)
74
72
  Requires-Dist: tabcompleter (==1.2.1)
75
73
  Requires-Dist: pdbp (==1.4.2)
76
- Requires-Dist: pycparser (==2.21)
77
- Requires-Dist: cffi (==1.15.1)
78
74
  Requires-Dist: pyreadline3 (==3.4.1) ; platform_system == "Windows"
79
75
  Requires-Dist: pip (>=21.3.1) ; python_version < "3.7"
80
76
  Requires-Dist: packaging (>=21.3) ; python_version < "3.7"
81
77
  Requires-Dist: setuptools (>=59.6.0) ; python_version < "3.7"
82
- Requires-Dist: tomli (>=1.2.3) ; python_version < "3.7"
83
- Requires-Dist: tqdm (>=4.64.1) ; python_version < "3.7"
84
78
  Requires-Dist: wheel (>=0.37.1) ; python_version < "3.7"
85
79
  Requires-Dist: attrs (==22.1.0) ; python_version < "3.7"
86
80
  Requires-Dist: filelock (>=3.4.1) ; python_version < "3.7"
87
81
  Requires-Dist: platformdirs (>=2.4.0) ; python_version < "3.7"
88
- Requires-Dist: pyparsing (>=3.0.7) ; python_version < "3.7"
89
- Requires-Dist: zipp (==3.6.0) ; python_version < "3.7"
90
- Requires-Dist: more-itertools (==8.14.0) ; python_version < "3.7"
91
82
  Requires-Dist: chardet (==4.0.0) ; python_version < "3.7"
92
83
  Requires-Dist: charset-normalizer (==2.0.12) ; python_version < "3.7"
93
84
  Requires-Dist: urllib3 (==1.26.12) ; python_version < "3.7"
@@ -106,7 +97,6 @@ Requires-Dist: pytest-rerunfailures (==10.3) ; python_version < "3.7"
106
97
  Requires-Dist: pytest-xdist (==2.5.0) ; python_version < "3.7"
107
98
  Requires-Dist: parameterized (==0.8.1) ; python_version < "3.7"
108
99
  Requires-Dist: soupsieve (==2.3.2.post1) ; python_version < "3.7"
109
- Requires-Dist: cryptography (==36.0.2) ; python_version < "3.7"
110
100
  Requires-Dist: pygments (==2.14.0) ; python_version < "3.7"
111
101
  Requires-Dist: colorama (==0.4.5) ; python_version < "3.7"
112
102
  Requires-Dist: future-breakpoint (==2.0.0) ; python_version < "3.7"
@@ -114,21 +104,15 @@ Requires-Dist: pyotp (==2.7.0) ; python_version < "3.7"
114
104
  Requires-Dist: typing-extensions (==4.1.1) ; python_version < "3.7"
115
105
  Requires-Dist: commonmark (==0.9.1) ; python_version < "3.7"
116
106
  Requires-Dist: rich (==12.6.0) ; python_version < "3.7"
117
- Requires-Dist: keyring (>=23.4.1) ; python_version < "3.8"
118
107
  Requires-Dist: importlib-metadata (==4.2.0) ; python_version < "3.8"
119
108
  Requires-Dist: urllib3 (<2.1.0,>=1.26.16) ; python_version >= "3.10"
120
109
  Requires-Dist: pip (>=23.1.2) ; python_version >= "3.7"
121
110
  Requires-Dist: packaging (>=23.1) ; python_version >= "3.7"
122
111
  Requires-Dist: setuptools (>=68.0.0) ; python_version >= "3.7"
123
- Requires-Dist: tomli (>=2.0.1) ; python_version >= "3.7"
124
- Requires-Dist: tqdm (>=4.65.0) ; python_version >= "3.7"
125
112
  Requires-Dist: wheel (>=0.40.0) ; python_version >= "3.7"
126
113
  Requires-Dist: attrs (>=23.1.0) ; python_version >= "3.7"
127
114
  Requires-Dist: filelock (>=3.12.2) ; python_version >= "3.7"
128
115
  Requires-Dist: platformdirs (>=3.8.1) ; python_version >= "3.7"
129
- Requires-Dist: pyparsing (>=3.1.0) ; python_version >= "3.7"
130
- Requires-Dist: zipp (>=3.15.0) ; python_version >= "3.7"
131
- Requires-Dist: more-itertools (>=9.1.0) ; python_version >= "3.7"
132
116
  Requires-Dist: chardet (==5.1.0) ; python_version >= "3.7"
133
117
  Requires-Dist: charset-normalizer (==3.2.0) ; python_version >= "3.7"
134
118
  Requires-Dist: requests (==2.31.0) ; python_version >= "3.7"
@@ -137,12 +121,11 @@ Requires-Dist: h11 (==0.14.0) ; python_version >= "3.7"
137
121
  Requires-Dist: outcome (==1.2.0) ; python_version >= "3.7"
138
122
  Requires-Dist: trio (==0.22.1) ; python_version >= "3.7"
139
123
  Requires-Dist: trio-websocket (==0.10.3) ; python_version >= "3.7"
140
- Requires-Dist: pyopenssl (==23.2.0) ; python_version >= "3.7"
141
124
  Requires-Dist: wsproto (==1.2.0) ; python_version >= "3.7"
142
125
  Requires-Dist: selenium (==4.10.0) ; python_version >= "3.7"
143
126
  Requires-Dist: cssselect (==1.2.0) ; python_version >= "3.7"
144
127
  Requires-Dist: fasteners (==0.18) ; python_version >= "3.7"
145
- Requires-Dist: execnet (==2.0.0) ; python_version >= "3.7"
128
+ Requires-Dist: execnet (==2.0.2) ; python_version >= "3.7"
146
129
  Requires-Dist: iniconfig (==2.0.0) ; python_version >= "3.7"
147
130
  Requires-Dist: pluggy (==1.2.0) ; python_version >= "3.7"
148
131
  Requires-Dist: pytest (==7.4.0) ; python_version >= "3.7"
@@ -151,7 +134,6 @@ Requires-Dist: pytest-rerunfailures (==12.0) ; python_version >= "3.7"
151
134
  Requires-Dist: pytest-xdist (==3.3.1) ; python_version >= "3.7"
152
135
  Requires-Dist: parameterized (==0.9.0) ; python_version >= "3.7"
153
136
  Requires-Dist: soupsieve (==2.4.1) ; python_version >= "3.7"
154
- Requires-Dist: cryptography (==41.0.1) ; python_version >= "3.7"
155
137
  Requires-Dist: pygments (==2.15.1) ; python_version >= "3.7"
156
138
  Requires-Dist: colorama (==0.4.6) ; python_version >= "3.7"
157
139
  Requires-Dist: exceptiongroup (==1.1.2) ; python_version >= "3.7"
@@ -159,7 +141,6 @@ Requires-Dist: pyotp (==2.8.0) ; python_version >= "3.7"
159
141
  Requires-Dist: mdurl (==0.1.2) ; python_version >= "3.7"
160
142
  Requires-Dist: rich (==13.4.2) ; python_version >= "3.7"
161
143
  Requires-Dist: urllib3 (<2,>=1.26.16) ; python_version >= "3.7" and python_version < "3.10"
162
- Requires-Dist: keyring (>=24.1.1) ; python_version >= "3.8"
163
144
  Requires-Dist: markdown-it-py (==3.0.0) ; python_version >= "3.8"
164
145
  Provides-Extra: allure
165
146
  Requires-Dist: allure-pytest (==2.9.45) ; (python_version < "3.7") and extra == 'allure'
@@ -186,8 +167,12 @@ Requires-Dist: ipdb (==0.13.11) ; extra == 'ipdb'
186
167
  Requires-Dist: ipython (==7.16.3) ; (python_version < "3.7") and extra == 'ipdb'
187
168
  Requires-Dist: ipython (==7.34.0) ; (python_version >= "3.7") and extra == 'ipdb'
188
169
  Provides-Extra: pdfminer
170
+ Requires-Dist: cffi (==1.15.1) ; extra == 'pdfminer'
171
+ Requires-Dist: pycparser (==2.21) ; extra == 'pdfminer'
189
172
  Requires-Dist: pdfminer.six (==20211012) ; (python_version < "3.7") and extra == 'pdfminer'
173
+ Requires-Dist: cryptography (==36.0.2) ; (python_version < "3.7") and extra == 'pdfminer'
190
174
  Requires-Dist: pdfminer.six (==20221105) ; (python_version >= "3.7") and extra == 'pdfminer'
175
+ Requires-Dist: cryptography (==41.0.1) ; (python_version >= "3.7") and extra == 'pdfminer'
191
176
  Provides-Extra: pillow
192
177
  Requires-Dist: Pillow (==8.4.0) ; (python_version < "3.7") and extra == 'pillow'
193
178
  Requires-Dist: Pillow (==9.5.0) ; (python_version >= "3.7" and python_version < "3.8") and extra == 'pillow'
@@ -210,13 +195,13 @@ Requires-Dist: zstandard (==0.21.0) ; (python_version >= "3.7") and extra == 'se
210
195
 
211
196
  <h1>SeleniumBase</h1>
212
197
 
213
- <h3 align="center">Automate & test web apps on any platform, with Python.</h3>
198
+ <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_10t.png" alt="SeleniumBase" title="SeleniumBase" width="266" /></a></p>
214
199
 
215
- <h3 align="center"><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/cdn/gif/coffee_pdbp.gif" alt="SeleniumBase test with the pdbp debugger" title="SeleniumBase test with the pdbp debugger" /></a></h3>
200
+ <h2 align="center" class="hero__title">All-in-one Test Automation Framework</h2>
216
201
 
217
- <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://img.shields.io/gitter/room/seleniumbase/SeleniumBase.svg" alt="Gitter chat"/></a></p>
202
+ <h3 align="center"><img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="29" /> For Python enthusiasts and enterprise developers <img src="https://seleniumbase.github.io/cdn/img/python_logo.png" title="SeleniumBase" width="29" /></h3>
218
203
 
219
- <h4 align="center">Shortcuts / tutorials / tools / integrations:</h4>
204
+ <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/releases" target="_blank"><img src="https://img.shields.io/github/v/release/seleniumbase/SeleniumBase.svg?color=22AAEE" alt="GitHub version" /></a> <a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/CI%20build/badge.svg" alt="SeleniumBase GitHub Actions" /></a> <a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://img.shields.io/gitter/room/seleniumbase/SeleniumBase.svg" alt="Gitter chat"/></a></p>
220
205
 
221
206
  <p align="center">
222
207
  <a href="#python_installation">🚀 Start</a> |
@@ -258,18 +243,17 @@ Requires-Dist: zstandard (==0.21.0) ; (python_version >= "3.7") and extra == 'se
258
243
 
259
244
  --------
260
245
 
246
+ <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_p3.png" alt="SeleniumBase" title="SeleniumBase" width="232" /></a></p>
247
+
261
248
  <blockquote>
262
249
  <p dir="auto"><strong>Jump to:</strong></p>
263
250
  <ul dir="auto">
264
- <li><a href="#multiple_examples" ><strong>Multiple Examples</strong></a></li>
265
- <li><a href="#python_installation" ><strong>Set up Python & Git</strong></a></li>
266
- <li><a href="#install_seleniumbase" ><strong>Install SeleniumBase</strong></a></li>
267
- <li><a href="#basic_example_and_usage"><strong>Basic Example & Usage</strong></a></li>
251
+ <li><a href="#install_seleniumbase" ><strong>Get Started / Installation</strong></a></li>
252
+ <li><a href="#basic_example_and_usage"><strong>Basic Example / Usage</strong></a></li>
268
253
  <li><a href="#common_methods" ><strong>Common Test Methods</strong></a></li>
269
254
  <li><a href="#fun_facts" ><strong>Fun Facts / Learn More</strong></a></li>
270
- <li><a href="#demo_mode_and_debugging"><strong>Demo / Debug Modes</strong></a></li>
271
- <li><a href="#pytest_options" ><strong>Useful pytest Options</strong></a></li>
272
- <li><a href="#new_pytest_options" ><strong>SeleniumBase Options</strong></a></li>
255
+ <li><a href="#demo_mode_and_debugging"><strong>Demo Mode / Debugging</strong></a></li>
256
+ <li><a href="#command_line_options" ><strong>Command-line Options</strong></a></li>
273
257
  <li><a href="#directory_configuration"><strong>Directory Configuration</strong></a></li>
274
258
  <li><a href="#seleniumbase_dashboard" ><strong>SeleniumBase Dashboard</strong></a></li>
275
259
  <li><a href="#creating_visual_reports"><strong>Generating Test Reports</strong></a></li>
@@ -279,7 +263,8 @@ Requires-Dist: zstandard (==0.21.0) ; (python_version >= "3.7") and extra == 'se
279
263
  --------
280
264
 
281
265
  <a id="multiple_examples"></a>
282
- <p align="left">Run <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">test_demo_site.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">examples/</a> (<code>--chrome</code> is the default browser):</p>
266
+
267
+ <p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_demo_site.py" target="_blank">test_demo_site.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a> (Uses <code>--chrome</code> by default)</p>
283
268
 
284
269
  ```bash
285
270
  cd examples/
@@ -288,12 +273,10 @@ pytest test_demo_site.py
288
273
 
289
274
  <p align="left"><a href="https://seleniumbase.io/demo_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/demo_page_5.gif" width="480" alt="SeleniumBase Example" title="SeleniumBase Example" /></a></p>
290
275
 
291
- > Type text, click, select, toggle, drag-and-drop, etc. Even handle iframes.
276
+ > Easy to type, click, select, toggle, drag-and-drop, etc.
292
277
 
293
278
  --------
294
279
 
295
- Looking for overpriced coffee? Try running this test:
296
-
297
280
  <p align="left"><b>Example:</b> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">test_coffee_cart.py</a> from <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank">./examples/</a></p>
298
281
 
299
282
  ```bash
@@ -327,6 +310,8 @@ class CoffeeCartTest(BaseCase):
327
310
  self.assert_text("Thanks for your purchase.", "#app .success")
328
311
  ```
329
312
 
313
+ (For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.)
314
+
330
315
  --------
331
316
 
332
317
  <details>
@@ -556,7 +541,7 @@ Making [chromedriver 114.0.5735.90] executable ...
556
541
 
557
542
 
558
543
  <a id="basic_example_and_usage"></a>
559
- <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example & Usage:</h2>
544
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Basic Example / Usage:</h2>
560
545
 
561
546
  🔵 If you've cloned SeleniumBase, you can run tests from the [examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder.
562
547
 
@@ -667,8 +652,8 @@ self.type("input", "dogs\n")
667
652
  Most SeleniumBase scripts can be run with <code>pytest</code>, <code>pynose</code>, or pure <code>python</code>. Not all test runners can run all test formats. For example, tests that use the ``sb`` pytest fixture can only be run with ``pytest``. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
668
653
 
669
654
  ```bash
670
- pytest test_sb_fixture.py
671
655
  pytest coffee_cart_tests.py --rs
656
+ pytest test_sb_fixture.py
672
657
  pytest test_suite.py --rs --html=report.html --dashboard
673
658
 
674
659
  pynose basic_test.py --mobile
@@ -686,7 +671,7 @@ behave calculator.feature -D rs -D dashboard
686
671
  * Python files that start with ``test_`` or end with ``_test.py``.
687
672
  * Python methods that start with ``test_``.
688
673
 
689
- With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/pytest.ini) file present, you can modify default discovery settings. The Python class name can be anything because ``seleniumbase.BaseCase`` inherits ``unittest.TestCase``, which triggers autodiscovery.
674
+ With a SeleniumBase [pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/pytest.ini) file present, you can modify default discovery settings. The Python class name can be anything because ``seleniumbase.BaseCase`` inherits ``unittest.TestCase`` to trigger autodiscovery.
690
675
 
691
676
  <p>✅ You can do a pre-flight check to see which tests would get discovered by <code>pytest</code> before the real flight:</p>
692
677
 
@@ -712,29 +697,36 @@ pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
712
697
  ✅ SeleniumBase works on all popular CI/CD platforms:
713
698
  <p><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md"><img alt="GitHub Actions integration" src="https://img.shields.io/badge/GitHub_Actions-12B2C2.svg?logo=GitHubActions&logoColor=CFFFC2" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md"><img alt="Jenkins integration" src="https://img.shields.io/badge/Jenkins-32B242.svg?logo=jenkins&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/azure_pipelines/ReadMe.md"><img alt="Azure integration" src="https://img.shields.io/badge/Azure-2288EE.svg?logo=AzurePipelines&logoColor=white" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md"><img alt="Google Cloud integration" src="https://img.shields.io/badge/Google_Cloud-11CAE8.svg?logo=GoogleCloud&logoColor=EE0066" /></a> <a href="#utilizing_advanced_features"><img alt="AWS integration" src="https://img.shields.io/badge/AWS-4488DD.svg?logo=AmazonAWS&logoColor=FFFF44" /></a> <a href="https://en.wikipedia.org/wiki/Personal_computer" target="_blank"><img alt="Your Computer" src="https://img.shields.io/badge/💻_Your_Computer-44E6E6.svg" /></a></p>
714
699
 
715
- <p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b>, which speeds up manual testing by having automation perform all the browser actions while the manual tester handles validation.</p>
700
+ <p>✅ SeleniumBase includes an automated/manual hybrid solution called <b><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">MasterQA</a></b> to speed up manual testing with automation while the manual tester handles validation.</p>
716
701
 
717
702
  <p>✅ For a full list of SeleniumBase features, <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">Click Here</a>.</p>
718
703
 
719
704
 
720
- <a id="detailed_instructions"></a>
721
- <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Detailed Instructions:</h2>
722
-
723
705
  <a id="demo_mode_and_debugging"></a>
724
- 🔵 <b>Demo Mode</b> helps you see what a test is doing. If a test is moving too fast for your eyes, run it in <b>Demo Mode</b>, which pauses the browser briefly between actions, highlights page elements being acted on, and displays assertions:
706
+ <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Demo Mode / Debugging:</h2>
707
+
708
+ 🔵 <b>Demo Mode</b> helps you see what a test is doing. If a test is moving too fast for your eyes, run it in <b>Demo Mode</b> to pause the browser briefly between actions, highlight page elements being acted on, and display assertions:
725
709
 
726
710
  ```bash
727
711
  pytest my_first_test.py --demo
728
712
  ```
729
713
 
730
- 🔵 You can use the following calls in your scripts to help you debug issues:
714
+ 🔵 ``time.sleep(seconds)`` can be used to make a test wait at a specific spot:
731
715
 
732
716
  ```python
733
- import time; time.sleep(5) # Makes the test wait and do nothing for 5 seconds.
734
- import pdb; pdb.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
735
- import pytest; pytest.set_trace() # Debug Mode. n: next, c: continue, s: step, u: up, d: down.
717
+ import time; time.sleep(3) # Do nothing for 3 seconds.
736
718
  ```
737
719
 
720
+ 🔵 **Debug Mode** with Python's built-in **[pdb](https://docs.python.org/3/library/pdb.html)** library helps you debug tests:
721
+
722
+ ```python
723
+ import pdb; pdb.set_trace()
724
+ import pytest; pytest.set_trace()
725
+ breakpoint() # Shortcut for "import pdb; pdb.set_trace()"
726
+ ```
727
+
728
+ > (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``)
729
+
738
730
  🔵 To pause an active test that throws an exception or error, (*and keep the browser window open while **Debug Mode** begins in the console*), add **``--pdb``** as a ``pytest`` option:
739
731
 
740
732
  ```bash
@@ -747,10 +739,14 @@ pytest test_fail.py --pdb
747
739
  pytest test_coffee_cart.py --trace
748
740
  ```
749
741
 
750
- (**``pdb``** commands: ``n``, ``c``, ``s``, ``u``, ``d`` => ``next``, ``continue``, ``step``, ``up``, ``down``).
742
+ <a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/cdn/gif/coffee_pdbp.gif" alt="SeleniumBase test with the pdbp (Pdb+) debugger" title="SeleniumBase test with the pdbp (Pdb+) debugger" /></a>
743
+
744
+
745
+ <a id="command_line_options"></a>
746
+ <h2>🔵 Command-line Options:</h2>
751
747
 
752
748
  <a id="pytest_options"></a>
753
- 🔵 Here are some useful command-line options that come with <code>pytest</code>:
749
+ Here are some useful command-line options that come with <code>pytest</code>:
754
750
 
755
751
  ```bash
756
752
  -v # Verbose mode. Prints the full name of each test and shows more details.
@@ -767,7 +763,7 @@ pytest test_coffee_cart.py --trace
767
763
  ```
768
764
 
769
765
  <a id="new_pytest_options"></a>
770
- 🔵 SeleniumBase provides additional <code>pytest</code> command-line options for tests:
766
+ SeleniumBase provides additional <code>pytest</code> command-line options for tests:
771
767
 
772
768
  ```bash
773
769
  --browser=BROWSER # (The web browser to use. Default: "chrome".)
@@ -864,7 +860,9 @@ pytest test_coffee_cart.py --trace
864
860
 
865
861
  (See the full list of command-line option definitions **[here](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/plugins/pytest_plugin.py)**. For detailed examples of command-line options, see **[customizing_test_runs.md](https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md)**)
866
862
 
867
- 🔵 During test failures, logs and screenshots from the most recent test run will get saved to the ``latest_logs/`` folder. Those logs will get moved to ``archived_logs/`` if you add --archive_logs to command-line options, or have ARCHIVE_EXISTING_LOGS set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), otherwise log files with be cleaned up at the start of the next test run. The ``test_suite.py`` collection contains tests that fail on purpose so that you can see how logging works.
863
+ --------
864
+
865
+ 🔵 During test failures, logs and screenshots from the most recent test run will get saved to the ``latest_logs/`` folder. Those logs will get moved to ``archived_logs/`` if you add --archive_logs to command-line options, or have ``ARCHIVE_EXISTING_LOGS`` set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), otherwise log files with be cleaned up at the start of the next test run. The ``test_suite.py`` collection contains tests that fail on purpose so that you can see how logging works.
868
866
 
869
867
  ```bash
870
868
  cd examples/
@@ -885,7 +883,7 @@ Inside your tests, you can use ``self.data`` to access that.
885
883
  <a id="directory_configuration"></a>
886
884
  <h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Directory Configuration:</h2>
887
885
 
888
- 🔵 When running tests with **pytest**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **pynose**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Folders should also include a blank ``__init__.py`` file, which allows your tests to import files from that folder.
886
+ 🔵 When running tests with **pytest**, you'll want a copy of **[pytest.ini](https://github.com/seleniumbase/SeleniumBase/blob/master/pytest.ini)** in your root folders. When running tests with **pynose**, you'll want a copy of **[setup.cfg](https://github.com/seleniumbase/SeleniumBase/blob/master/setup.cfg)** in your root folders. These files specify default configuration details for tests. Folders should also include a blank ``__init__.py`` file to allow your tests to import files from that folder.
889
887
 
890
888
  🔵 ``sbase mkdir DIR`` creates a folder with config files and sample tests:
891
889
 
@@ -1133,7 +1131,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
1133
1131
  <ul>
1134
1132
  <li>You can set up a <a href="https://jenkins.io/" target="_blank">Jenkins</a> build server for running tests at regular intervals. For a real-world Jenkins example of headless browser automation in action, check out the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/azure/jenkins/ReadMe.md">SeleniumBase Jenkins example on Azure</a> or the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/google_cloud/ReadMe.md">SeleniumBase Jenkins example on Google Cloud</a>.</li>
1135
1133
 
1136
- <li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a>, which will help you get started.</li>
1134
+ <li>You can use <a href="https://selenium.dev/documentation/en/grid/" target="_blank">the Selenium Grid</a> to scale your testing by distributing tests on several machines with parallel execution. To do this, check out the <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/utilities/selenium_grid">SeleniumBase selenium_grid folder</a>, which should have everything you need, including the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">Selenium Grid ReadMe</a> to help you get started.</li>
1137
1135
 
1138
1136
  <li>If you're using the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mysql_installation.md">SeleniumBase MySQL feature</a> to save results from tests running on a server machine, you can install <a href="https://dev.mysql.com/downloads/tools/workbench/">MySQL Workbench</a> to help you read & write from your DB more easily.</li>
1139
1137
 
@@ -1476,10 +1474,15 @@ pytest --reruns=1 --reruns-delay=1
1476
1474
 
1477
1475
  <p>You can use the <code>@retry_on_exception()</code> decorator to retry failing methods. (First import: <code>from seleniumbase import decorators</code>). To learn more about SeleniumBase decorators, <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/seleniumbase/common">click here</a>.</p>
1478
1476
 
1477
+ --------
1479
1478
 
1480
- <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
1479
+ > "Catch bugs in QA before deploying code to Production!"
1480
+
1481
+ <p align="left"><a href="https://seleniumbase.io/error_page" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/error_page.gif" alt="Catch bugs in QA before deploying code to Production!" title="Catch bugs in QA before deploying code to Production!" /></a></p>
1481
1482
 
1482
- <b>Congratulations on getting started with SeleniumBase!</b>
1483
+ --------
1484
+
1485
+ <h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Wrap-Up</h3>
1483
1486
 
1484
1487
  <p>
1485
1488
  <div><b>If you see something, say something!</b></div>
@@ -1499,10 +1502,9 @@ pytest --reruns=1 --reruns-delay=1
1499
1502
  <p><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a></p>
1500
1503
 
1501
1504
  <p><div>
1502
- <span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="54" /></a></span>
1503
- <span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="50" /></a></span>
1504
- <span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="38" /></a></span>
1505
- <span><a href="https://twitter.com/seleniumbase" target="_blank"><img src="https://seleniumbase.io/img/social/share_twitter.svg" title="SeleniumBase on Twitter" alt="SeleniumBase on Twitter" width="50" /></a></span>
1505
+ <span><a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://seleniumbase.github.io/cdn/img/youtube.png" title="SeleniumBase Playlist on YouTube" alt="SeleniumBase Playlist on YouTube" width="70" /></a></span>
1506
+ <span><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://seleniumbase.github.io/img/social/share_github.svg" title="SeleniumBase on GitHub" alt="SeleniumBase on GitHub" width="64" /></a></span>
1507
+ <span><a href="https://gitter.im/seleniumbase/SeleniumBase" target="_blank"><img src="https://seleniumbase.github.io/img/social/share_gitter.svg" title="SeleniumBase on Gitter" alt="SeleniumBase on Gitter" width="52" /></a></span>
1506
1508
  </div></p>
1507
1509
 
1508
1510
  --------
@@ -5,7 +5,7 @@ sbase/steps.py,sha256=RCZ_tKo7kFvgzVrHpIHb090c0on14ObIEkmMHjDURWE,38261
5
5
  seleniumbase/ReadMe.md,sha256=5Bnv8gsyKQGABhLj0S4HXZdtVic98puQlIGYc7YHUm8,3612
6
6
  seleniumbase/__init__.py,sha256=UKfONr7JsfKiXKvqdO5KJ1gMOBzvQ66PHHVAfE636ro,2068
7
7
  seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
8
- seleniumbase/__version__.py,sha256=_1eNtciJYmBkDBb0aHgwkk4EGIGovLAxO-Eg0ppIAhg,47
8
+ seleniumbase/__version__.py,sha256=6-8BwblcgF0gGsFAXl-3F66xw-nBfl-5y2B6MmbqBo0,47
9
9
  seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  seleniumbase/behave/behave_helper.py,sha256=KQ4rgOcWkMFSbD8QBUmevxO47M9UoSDenfoBHy9VaPk,22206
11
11
  seleniumbase/behave/behave_sb.py,sha256=fU8dLa-5Ohb5xVXq9nqVXHeLV4z3RDu5AnDJVvSD60c,54220
@@ -49,7 +49,7 @@ seleniumbase/core/download_helper.py,sha256=YHEsFhm3sb5RRocpB9RBwAtaqUUTO6ZeQPA-
49
49
  seleniumbase/core/encoded_images.py,sha256=rDKJ4cNJSuKiRcFViYU7bjyTS9_moI57gUPRXVg3u2k,14209
50
50
  seleniumbase/core/jqc_helper.py,sha256=QANgoYpFm6rI2hlzBmfJbSqWw3XiiSESnl6laQADSUE,10423
51
51
  seleniumbase/core/log_helper.py,sha256=EhN1QKxmD4gp0_F1wAWYP1bK9nJblYX50xpvdfDePQc,21822
52
- seleniumbase/core/mysql.py,sha256=yGWyztP_EyLZjAJgSWx80WfJHA9vB1I1v4-zavz1WT0,3391
52
+ seleniumbase/core/mysql.py,sha256=yA-KNsHN-D0YtYFxulv8ZaQOa1mNQ7pXO5_4nbSPIoA,3423
53
53
  seleniumbase/core/proxy_helper.py,sha256=-1mvsxWAQ22-ckhwnZh23-A1txNZWLGTp1fB1Pq8Xi8,5103
54
54
  seleniumbase/core/recorder_helper.py,sha256=RQxaD4enuQhM6gQanFVWoly57MR9TjbOoqvRorpYFh4,23021
55
55
  seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
@@ -136,9 +136,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443
136
136
  seleniumbase/utilities/selenium_ide/ReadMe.md,sha256=hznGeuMpkIimqMiZBW-4goIy2ltW4l8X9kb0YSPUQfE,4483
137
137
  seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
138
  seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
139
- seleniumbase-4.15.10.dist-info/LICENSE,sha256=9CweYVs2pqSWEApWewHooJ5p5F44GV0wSXi-jV0kA_U,1085
140
- seleniumbase-4.15.10.dist-info/METADATA,sha256=rCt5nN10IGPr8rcQKJmRLSF0Jef6N_8HRn_TdfPrF4M,81697
141
- seleniumbase-4.15.10.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
142
- seleniumbase-4.15.10.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
143
- seleniumbase-4.15.10.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
144
- seleniumbase-4.15.10.dist-info/RECORD,,
139
+ seleniumbase-4.15.12.dist-info/LICENSE,sha256=9CweYVs2pqSWEApWewHooJ5p5F44GV0wSXi-jV0kA_U,1085
140
+ seleniumbase-4.15.12.dist-info/METADATA,sha256=zgYLtpphMqIutEHm4lrA5RPlwKmt5r6xMB4kdMo6qyI,81504
141
+ seleniumbase-4.15.12.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
142
+ seleniumbase-4.15.12.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
143
+ seleniumbase-4.15.12.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
144
+ seleniumbase-4.15.12.dist-info/RECORD,,