seleniumbase 4.16.1__py3-none-any.whl → 4.16.3__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.
- sbase/steps.py +65 -0
- seleniumbase/__version__.py +1 -1
- seleniumbase/behave/behave_helper.py +29 -1
- seleniumbase/common/exceptions.py +6 -1
- seleniumbase/console_scripts/sb_install.py +20 -4
- seleniumbase/core/browser_launcher.py +63 -8
- seleniumbase/core/recorder_helper.py +29 -1
- seleniumbase/fixtures/base_case.py +238 -10
- seleniumbase/fixtures/page_actions.py +131 -4
- seleniumbase/fixtures/shared_utils.py +5 -0
- seleniumbase/fixtures/words.py +15 -1
- seleniumbase/translate/chinese.py +4 -0
- seleniumbase/translate/dutch.py +4 -0
- seleniumbase/translate/french.py +4 -0
- seleniumbase/translate/italian.py +4 -0
- seleniumbase/translate/japanese.py +4 -0
- seleniumbase/translate/korean.py +4 -0
- seleniumbase/translate/master_dict.py +25 -0
- seleniumbase/translate/portuguese.py +4 -0
- seleniumbase/translate/russian.py +4 -0
- seleniumbase/translate/spanish.py +4 -0
- seleniumbase/undetected/patcher.py +5 -0
- {seleniumbase-4.16.1.dist-info → seleniumbase-4.16.3.dist-info}/METADATA +45 -45
- {seleniumbase-4.16.1.dist-info → seleniumbase-4.16.3.dist-info}/RECORD +28 -28
- {seleniumbase-4.16.1.dist-info → seleniumbase-4.16.3.dist-info}/WHEEL +1 -1
- {seleniumbase-4.16.1.dist-info → seleniumbase-4.16.3.dist-info}/LICENSE +0 -0
- {seleniumbase-4.16.1.dist-info → seleniumbase-4.16.3.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.16.1.dist-info → seleniumbase-4.16.3.dist-info}/top_level.txt +0 -0
@@ -460,6 +460,18 @@ class MD:
|
|
460
460
|
md["assert_link_text"][8] = "подтвердить_ссылку"
|
461
461
|
md["assert_link_text"][9] = "verificar_texto_del_enlace"
|
462
462
|
|
463
|
+
md["assert_non_empty_text"] = ["*"] * num_langs
|
464
|
+
md["assert_non_empty_text"][0] = "assert_non_empty_text"
|
465
|
+
md["assert_non_empty_text"][1] = "断言非空文本"
|
466
|
+
md["assert_non_empty_text"][2] = "controleren_niet_lege_tekst"
|
467
|
+
md["assert_non_empty_text"][3] = "vérifier_texte_non_vide"
|
468
|
+
md["assert_non_empty_text"][4] = "verificare_testo_non_vuoto"
|
469
|
+
md["assert_non_empty_text"][5] = "空ではないテキストを確認する"
|
470
|
+
md["assert_non_empty_text"][6] = "비어_있지_않은_텍스트_확인하는"
|
471
|
+
md["assert_non_empty_text"][7] = "verificar_texto_não_vazio"
|
472
|
+
md["assert_non_empty_text"][8] = "подтвердить_непустой_текст"
|
473
|
+
md["assert_non_empty_text"][9] = "verificar_texto_no_vacío"
|
474
|
+
|
463
475
|
md["assert_text_not_visible"] = ["*"] * num_langs
|
464
476
|
md["assert_text_not_visible"][0] = "assert_text_not_visible"
|
465
477
|
md["assert_text_not_visible"][1] = "断言文本不可见"
|
@@ -2418,6 +2430,19 @@ class MD:
|
|
2418
2430
|
md["assert_text_visible"][8] = "подтвердить_текст"
|
2419
2431
|
md["assert_text_visible"][9] = "verificar_texto"
|
2420
2432
|
|
2433
|
+
# "assert_link" -> duplicate of "assert_link_text"
|
2434
|
+
md["assert_link"] = ["*"] * num_langs
|
2435
|
+
md["assert_link"][0] = "assert_link"
|
2436
|
+
md["assert_link"][1] = "断言链接文本"
|
2437
|
+
md["assert_link"][2] = "controleren_linktekst"
|
2438
|
+
md["assert_link"][3] = "vérifier_texte_du_lien"
|
2439
|
+
md["assert_link"][4] = "verificare_testo_del_collegamento"
|
2440
|
+
md["assert_link"][5] = "リンクテキストを確認する"
|
2441
|
+
md["assert_link"][6] = "링크_텍스트_확인"
|
2442
|
+
md["assert_link"][7] = "verificar_texto_do_link"
|
2443
|
+
md["assert_link"][8] = "подтвердить_ссылку"
|
2444
|
+
md["assert_link"][9] = "verificar_texto_del_enlace"
|
2445
|
+
|
2421
2446
|
# "assert_no_broken_links" -> duplicate of "assert_no_404_errors"
|
2422
2447
|
md["assert_no_broken_links"] = ["*"] * num_langs
|
2423
2448
|
md["assert_no_broken_links"][0] = "assert_no_broken_links"
|
@@ -77,6 +77,10 @@ class CasoDeTeste(BaseCase):
|
|
77
77
|
# assert_link_text(link_text)
|
78
78
|
return self.assert_link_text(*args, **kwargs)
|
79
79
|
|
80
|
+
def verificar_texto_não_vazio(self, *args, **kwargs):
|
81
|
+
# assert_non_empty_text(selector)
|
82
|
+
return self.assert_non_empty_text(*args, **kwargs)
|
83
|
+
|
80
84
|
def verificar_texto_não_visível(self, *args, **kwargs):
|
81
85
|
# assert_text_not_visible(text, selector)
|
82
86
|
return self.assert_text_not_visible(*args, **kwargs)
|
@@ -77,6 +77,10 @@ class ТестНаСелен(BaseCase):
|
|
77
77
|
# assert_link_text(link_text)
|
78
78
|
return self.assert_link_text(*args, **kwargs)
|
79
79
|
|
80
|
+
def подтвердить_непустой_текст(self, *args, **kwargs):
|
81
|
+
# assert_non_empty_text(selector)
|
82
|
+
return self.assert_non_empty_text(*args, **kwargs)
|
83
|
+
|
80
84
|
def подтвердить_текст_не_виден(self, *args, **kwargs):
|
81
85
|
# assert_text_not_visible(text, selector)
|
82
86
|
return self.assert_text_not_visible(*args, **kwargs)
|
@@ -77,6 +77,10 @@ class CasoDePrueba(BaseCase):
|
|
77
77
|
# assert_link_text(link_text)
|
78
78
|
return self.assert_link_text(*args, **kwargs)
|
79
79
|
|
80
|
+
def verificar_texto_no_vacío(self, *args, **kwargs):
|
81
|
+
# assert_non_empty_text(selector)
|
82
|
+
return self.assert_non_empty_text(*args, **kwargs)
|
83
|
+
|
80
84
|
def verificar_texto_no_se_muestra(self, *args, **kwargs):
|
81
85
|
# assert_text_not_visible(text, selector)
|
82
86
|
return self.assert_text_not_visible(*args, **kwargs)
|
@@ -208,6 +208,11 @@ class Patcher(object):
|
|
208
208
|
gen_js_whitespaces,
|
209
209
|
file_bin,
|
210
210
|
)
|
211
|
+
file_bin = re.sub(
|
212
|
+
b"window\\.cdc_[a-zA-Z0-9]{22}_(Array|Promise|Symbol)",
|
213
|
+
b"window\\.ccd_adoQpoasnaf67pfcZLmcfl_(Array|Promise|Symbol)",
|
214
|
+
file_bin,
|
215
|
+
)
|
211
216
|
file_bin = re.sub(
|
212
217
|
b"'\\$cdc_[a-zA-Z0-9]{22}_';",
|
213
218
|
gen_call_function_js_cache_name,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.16.
|
3
|
+
Version: 4.16.3
|
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,12 +56,12 @@ Classifier: Topic :: Utilities
|
|
56
56
|
Requires-Python: >=3.6
|
57
57
|
Description-Content-Type: text/markdown
|
58
58
|
License-File: LICENSE
|
59
|
-
Requires-Dist: certifi (>=2023.
|
59
|
+
Requires-Dist: certifi (>=2023.7.22)
|
60
60
|
Requires-Dist: parse (>=1.19.1)
|
61
61
|
Requires-Dist: parse-type (>=0.6.2)
|
62
62
|
Requires-Dist: six (==1.16.0)
|
63
63
|
Requires-Dist: idna (==3.4)
|
64
|
-
Requires-Dist: pynose (==1.4.
|
64
|
+
Requires-Dist: pynose (==1.4.7)
|
65
65
|
Requires-Dist: sortedcontainers (==2.4.0)
|
66
66
|
Requires-Dist: py (==1.11.0)
|
67
67
|
Requires-Dist: pytest-html (==2.0.1)
|
@@ -106,13 +106,13 @@ Requires-Dist: commonmark (==0.9.1) ; python_version < "3.7"
|
|
106
106
|
Requires-Dist: rich (==12.6.0) ; python_version < "3.7"
|
107
107
|
Requires-Dist: importlib-metadata (==4.2.0) ; python_version < "3.8"
|
108
108
|
Requires-Dist: urllib3 (<2.1.0,>=1.26.16) ; python_version >= "3.10"
|
109
|
-
Requires-Dist: pip (>=23.2) ; python_version >= "3.7"
|
109
|
+
Requires-Dist: pip (>=23.2.1) ; python_version >= "3.7"
|
110
110
|
Requires-Dist: packaging (>=23.1) ; python_version >= "3.7"
|
111
111
|
Requires-Dist: setuptools (>=68.0.0) ; python_version >= "3.7"
|
112
|
-
Requires-Dist: wheel (>=0.
|
112
|
+
Requires-Dist: wheel (>=0.41.0) ; python_version >= "3.7"
|
113
113
|
Requires-Dist: attrs (>=23.1.0) ; python_version >= "3.7"
|
114
114
|
Requires-Dist: filelock (>=3.12.2) ; python_version >= "3.7"
|
115
|
-
Requires-Dist: platformdirs (>=3.
|
115
|
+
Requires-Dist: platformdirs (>=3.10.0) ; python_version >= "3.7"
|
116
116
|
Requires-Dist: chardet (==5.1.0) ; python_version >= "3.7"
|
117
117
|
Requires-Dist: charset-normalizer (==3.2.0) ; python_version >= "3.7"
|
118
118
|
Requires-Dist: requests (==2.31.0) ; python_version >= "3.7"
|
@@ -137,9 +137,9 @@ Requires-Dist: soupsieve (==2.4.1) ; python_version >= "3.7"
|
|
137
137
|
Requires-Dist: pygments (==2.15.1) ; python_version >= "3.7"
|
138
138
|
Requires-Dist: colorama (==0.4.6) ; python_version >= "3.7"
|
139
139
|
Requires-Dist: exceptiongroup (==1.1.2) ; python_version >= "3.7"
|
140
|
-
Requires-Dist: pyotp (==2.
|
140
|
+
Requires-Dist: pyotp (==2.9.0) ; python_version >= "3.7"
|
141
141
|
Requires-Dist: mdurl (==0.1.2) ; python_version >= "3.7"
|
142
|
-
Requires-Dist: rich (==13.
|
142
|
+
Requires-Dist: rich (==13.5.0) ; python_version >= "3.7"
|
143
143
|
Requires-Dist: urllib3 (<2,>=1.26.16) ; python_version >= "3.7" and python_version < "3.10"
|
144
144
|
Requires-Dist: markdown-it-py (==3.0.0) ; python_version >= "3.8"
|
145
145
|
Provides-Extra: allure
|
@@ -159,9 +159,9 @@ Requires-Dist: mccabe (==0.7.0) ; extra == 'flake8'
|
|
159
159
|
Requires-Dist: flake8 (==5.0.4) ; (python_version < "3.9") and extra == 'flake8'
|
160
160
|
Requires-Dist: pyflakes (==2.5.0) ; (python_version < "3.9") and extra == 'flake8'
|
161
161
|
Requires-Dist: pycodestyle (==2.9.1) ; (python_version < "3.9") and extra == 'flake8'
|
162
|
-
Requires-Dist: flake8 (==6.
|
163
|
-
Requires-Dist: pyflakes (==3.0
|
164
|
-
Requires-Dist: pycodestyle (==2.
|
162
|
+
Requires-Dist: flake8 (==6.1.0) ; (python_version >= "3.9") and extra == 'flake8'
|
163
|
+
Requires-Dist: pyflakes (==3.1.0) ; (python_version >= "3.9") and extra == 'flake8'
|
164
|
+
Requires-Dist: pycodestyle (==2.11.0) ; (python_version >= "3.9") and extra == 'flake8'
|
165
165
|
Provides-Extra: ipdb
|
166
166
|
Requires-Dist: ipdb (==0.13.11) ; extra == 'ipdb'
|
167
167
|
Requires-Dist: ipython (==7.16.3) ; (python_version < "3.7") and extra == 'ipdb'
|
@@ -246,7 +246,7 @@ Requires-Dist: zstandard (==0.21.0) ; (python_version >= "3.7") and extra == 'se
|
|
246
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
247
|
|
248
248
|
<blockquote>
|
249
|
-
<p dir="auto"><strong>
|
249
|
+
<p dir="auto"><strong>Explore the README:</strong></p>
|
250
250
|
<ul dir="auto">
|
251
251
|
<li><a href="#install_seleniumbase" ><strong>Get Started / Installation</strong></a></li>
|
252
252
|
<li><a href="#basic_example_and_usage"><strong>Basic Example / Usage</strong></a></li>
|
@@ -264,7 +264,7 @@ Requires-Dist: zstandard (==0.21.0) ; (python_version >= "3.7") and extra == 'se
|
|
264
264
|
|
265
265
|
<a id="multiple_examples"></a>
|
266
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>
|
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 translate="no">--chrome</code> by default)</p>
|
268
268
|
|
269
269
|
```bash
|
270
270
|
cd examples/
|
@@ -284,7 +284,7 @@ cd examples/
|
|
284
284
|
pytest test_coffee_cart.py --demo
|
285
285
|
```
|
286
286
|
|
287
|
-
<p>(<code>--demo</code> mode slows down tests and highlights actions)</p>
|
287
|
+
<p>(<code translate="no">--demo</code> mode slows down tests and highlights actions)</p>
|
288
288
|
|
289
289
|
<p align="left"><a href="https://seleniumbase.io/coffee/" target="_blank"><img src="https://seleniumbase.github.io/cdn/gif/coffee_cart.gif" width="480" alt="SeleniumBase Coffee Cart Test" title="SeleniumBase Coffee Cart Test" /></a></p>
|
290
290
|
|
@@ -318,29 +318,29 @@ class CoffeeCartTest(BaseCase):
|
|
318
318
|
<summary> ▶️ How is <b>SeleniumBase</b> different from raw Selenium? (<b>click to expand</b>)</summary>
|
319
319
|
<div>
|
320
320
|
|
321
|
-
<p>💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses <a href="https://www.w3.org/TR/webdriver2/#endpoints" target="_blank">Selenium/WebDriver</a> APIs, and incorporates test-runners such as <code>pytest</code>, <code>pynose</code>, and <code>behave</code> to provide organized structure, test discovery, test execution, test state (<i>eg. passed, failed, or skipped</i>), and command-line options for changing default settings (<i>such as choosing the browser to use</i>). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.</p>
|
321
|
+
<p>💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses <a href="https://www.w3.org/TR/webdriver2/#endpoints" target="_blank">Selenium/WebDriver</a> APIs, and incorporates test-runners such as <code translate="no">pytest</code>, <code translate="no">pynose</code>, and <code translate="no">behave</code> to provide organized structure, test discovery, test execution, test state (<i>eg. passed, failed, or skipped</i>), and command-line options for changing default settings (<i>such as choosing the browser to use</i>). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.</p>
|
322
322
|
|
323
|
-
<p>💡 With raw Selenium, commands that use selectors need to specify the type of selector (eg. <code>"css selector", "button#myButton"</code>). With SeleniumBase, there's auto-detection between CSS Selectors and XPath, which means you don't need to specify the type of selector in your commands (<i>but optionally you could</i>).</p>
|
323
|
+
<p>💡 With raw Selenium, commands that use selectors need to specify the type of selector (eg. <code translate="no">"css selector", "button#myButton"</code>). With SeleniumBase, there's auto-detection between CSS Selectors and XPath, which means you don't need to specify the type of selector in your commands (<i>but optionally you could</i>).</p>
|
324
324
|
|
325
|
-
<p>💡 SeleniumBase methods often perform multiple actions in a single method call. For example, <code>self.type(selector,text)</code> does the following:<br />1. Waits for the element to be visible.<br />2. Waits for the element to be interactive.<br />3. Clears the text field.<br />4. Types in the new text.<br />5. Presses Enter/Submit if the text ends in <code>"\n"</code>.<br />With raw Selenium, those actions require multiple method calls.</p>
|
325
|
+
<p>💡 SeleniumBase methods often perform multiple actions in a single method call. For example, <code translate="no">self.type(selector,text)</code> does the following:<br />1. Waits for the element to be visible.<br />2. Waits for the element to be interactive.<br />3. Clears the text field.<br />4. Types in the new text.<br />5. Presses Enter/Submit if the text ends in <code translate="no">"\n"</code>.<br />With raw Selenium, those actions require multiple method calls.</p>
|
326
326
|
|
327
327
|
<p>💡 SeleniumBase uses default timeout values when not set:<br />
|
328
|
-
✅<code>self.click("button")</code><br />
|
328
|
+
✅<code translate="no">self.click("button")</code><br />
|
329
329
|
With raw Selenium, methods would fail instantly (<i>by default</i>) if an element needed more time to load:<br />
|
330
|
-
❌<code>self.driver.find_element(by="css selector", value="button").click()</code><br />
|
330
|
+
❌<code translate="no">self.driver.find_element(by="css selector", value="button").click()</code><br />
|
331
331
|
(Reliable code is better than unreliable code.)</p>
|
332
332
|
|
333
333
|
<p>💡 SeleniumBase lets you change the explicit timeout values of methods:<br />
|
334
|
-
✅<code>self.click("button",timeout=10)</code><br />
|
334
|
+
✅<code translate="no">self.click("button",timeout=10)</code><br />
|
335
335
|
With raw Selenium, that requires more code:<br />
|
336
|
-
❌<code>WebDriverWait(driver,10).until(EC.element_to_be_clickable("css selector", "button")).click()</code><br />
|
336
|
+
❌<code translate="no">WebDriverWait(driver,10).until(EC.element_to_be_clickable("css selector", "button")).click()</code><br />
|
337
337
|
(Simple code is better than complex code.)</p>
|
338
338
|
|
339
339
|
<p>💡 SeleniumBase gives you clean error output when a test fails. With raw Selenium, error messages can get very messy.</p>
|
340
340
|
|
341
|
-
<p>💡 SeleniumBase gives you the option to generate a dashboard and reports for tests. It also saves screenshots from failing tests to the <code>./latest_logs/</code> folder. Raw <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">Selenium</a> does not have these options out-of-the-box.</p>
|
341
|
+
<p>💡 SeleniumBase gives you the option to generate a dashboard and reports for tests. It also saves screenshots from failing tests to the <code translate="no">./latest_logs/</code> folder. Raw <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">Selenium</a> does not have these options out-of-the-box.</p>
|
342
342
|
|
343
|
-
<p>💡 SeleniumBase includes desktop GUI apps for running tests, such as <b>SeleniumBase Commander</b> for <code>pytest</code> and <b>SeleniumBase Behave GUI for <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md"><code>behave</code></a>.</b></p>
|
343
|
+
<p>💡 SeleniumBase includes desktop GUI apps for running tests, such as <b>SeleniumBase Commander</b> for <code translate="no">pytest</code> and <b>SeleniumBase Behave GUI for <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md"><code translate="no">behave</code></a>.</b></p>
|
344
344
|
|
345
345
|
<p>💡 SeleniumBase has its own Recorder / Test Generator that can create tests from manual browser actions. SeleniumBase also includes other useful tools and console scripts for getting things done quickly. (<i>See the documentation for more details!</i>)</p>
|
346
346
|
|
@@ -371,7 +371,7 @@ class TestMFALogin(BaseCase):
|
|
371
371
|
self.save_screenshot_to_logs()
|
372
372
|
```
|
373
373
|
|
374
|
-
<p align="left">📗📝 An example test with the <b><code>sb</code></b> <code>pytest</code> fixture. Runs with <b><a href="https://docs.pytest.org/en/latest/how-to/usage.html">pytest</a></b>.</p>
|
374
|
+
<p align="left">📗📝 An example test with the <b><code translate="no">sb</code></b> <code translate="no">pytest</code> fixture. Runs with <b><a href="https://docs.pytest.org/en/latest/how-to/usage.html">pytest</a></b>.</p>
|
375
375
|
|
376
376
|
```python
|
377
377
|
def test_mfa_login(sb):
|
@@ -385,7 +385,7 @@ def test_mfa_login(sb):
|
|
385
385
|
sb.save_screenshot_to_logs()
|
386
386
|
```
|
387
387
|
|
388
|
-
<p align="left">📙📝 An example test with the <b><code>SB</code></b> Context Manager. Runs with pure <b><code>python</code></b>.</p>
|
388
|
+
<p align="left">📙📝 An example test with the <b><code translate="no">SB</code></b> Context Manager. Runs with pure <b><code translate="no">python</code></b>.</p>
|
389
389
|
|
390
390
|
```python
|
391
391
|
from seleniumbase import SB
|
@@ -403,7 +403,7 @@ with SB() as sb: # By default, browser="chrome" if not set.
|
|
403
403
|
sb.assert_exact_text("You have been signed out!", "#top_message")
|
404
404
|
```
|
405
405
|
|
406
|
-
<p align="left">📕📝 An example test with <b>behave-BDD</b> <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> structure. Runs with <b><code>behave</code></b>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">Learn more</a>)</p>
|
406
|
+
<p align="left">📕📝 An example test with <b>behave-BDD</b> <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">Gherkin</a> structure. Runs with <b><code translate="no">behave</code></b>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">Learn more</a>)</p>
|
407
407
|
|
408
408
|
```gherkin
|
409
409
|
Feature: SeleniumBase scenarios for the RealWorld App
|
@@ -647,7 +647,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
|
|
647
647
|
self.type("input", "dogs\n") # (The "\n" presses ENTER)
|
648
648
|
```
|
649
649
|
|
650
|
-
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>.
|
650
|
+
Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">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>.
|
651
651
|
|
652
652
|
```bash
|
653
653
|
pytest coffee_cart_tests.py --rs
|
@@ -664,20 +664,20 @@ behave realworld.feature
|
|
664
664
|
behave calculator.feature -D rs -D dashboard
|
665
665
|
```
|
666
666
|
|
667
|
-
<p>✅ <code>pytest</code> includes automatic test discovery. If you don't specify a specific file or folder to run, <code>pytest</code> will automatically search through all subdirectories for tests to run based on the following criteria:</p>
|
667
|
+
<p>✅ <code translate="no">pytest</code> includes automatic test discovery. If you don't specify a specific file or folder to run, <code translate="no">pytest</code> will automatically search through all subdirectories for tests to run based on the following criteria:</p>
|
668
668
|
|
669
669
|
* Python files that start with ``test_`` or end with ``_test.py``.
|
670
670
|
* Python methods that start with ``test_``.
|
671
671
|
|
672
672
|
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.
|
673
673
|
|
674
|
-
<p>✅ You can do a pre-flight check to see which tests would get discovered by <code>pytest</code> before the real flight:</p>
|
674
|
+
<p>✅ You can do a pre-flight check to see which tests would get discovered by <code translate="no">pytest</code> before the real flight:</p>
|
675
675
|
|
676
676
|
```bash
|
677
677
|
pytest --collect-only -q
|
678
678
|
```
|
679
679
|
|
680
|
-
<p>✅ You can be more specific when calling <code>pytest</code> or <code>pynose</code> on a file:</p>
|
680
|
+
<p>✅ You can be more specific when calling <code translate="no">pytest</code> or <code translate="no">pynose</code> on a file:</p>
|
681
681
|
|
682
682
|
```bash
|
683
683
|
pytest [FILE_NAME.py]::[CLASS_NAME]::[METHOD_NAME]
|
@@ -685,7 +685,7 @@ pytest [FILE_NAME.py]::[CLASS_NAME]::[METHOD_NAME]
|
|
685
685
|
pynose [FILE_NAME.py]:[CLASS_NAME].[METHOD_NAME]
|
686
686
|
```
|
687
687
|
|
688
|
-
<p>✅ No More Flaky Tests! SeleniumBase methods automatically wait for page elements to finish loading before interacting with them (<i>up to a timeout limit</i>). This means <b>you no longer need random <span><code>time.sleep()</code></span> statements</b> in your scripts.</p>
|
688
|
+
<p>✅ No More Flaky Tests! SeleniumBase methods automatically wait for page elements to finish loading before interacting with them (<i>up to a timeout limit</i>). This means <b>you no longer need random <span><code translate="no">time.sleep()</code></span> statements</b> in your scripts.</p>
|
689
689
|
<img src="https://img.shields.io/badge/Flaky%20Tests%3F-%20NO%21-11BBDD.svg" alt="NO MORE FLAKY TESTS!" />
|
690
690
|
|
691
691
|
✅ SeleniumBase supports all major browsers and operating systems:
|
@@ -746,7 +746,7 @@ pytest test_coffee_cart.py --trace
|
|
746
746
|
<h2>🔵 Command-line Options:</h2>
|
747
747
|
|
748
748
|
<a id="pytest_options"></a>
|
749
|
-
✅ 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 translate="no">pytest</code>:
|
750
750
|
|
751
751
|
```bash
|
752
752
|
-v # Verbose mode. Prints the full name of each test and shows more details.
|
@@ -763,7 +763,7 @@ pytest test_coffee_cart.py --trace
|
|
763
763
|
```
|
764
764
|
|
765
765
|
<a id="new_pytest_options"></a>
|
766
|
-
✅ SeleniumBase provides additional <code>pytest</code> command-line options for tests:
|
766
|
+
✅ SeleniumBase provides additional <code translate="no">pytest</code> command-line options for tests:
|
767
767
|
|
768
768
|
```bash
|
769
769
|
--browser=BROWSER # (The web browser to use. Default: "chrome".)
|
@@ -1109,7 +1109,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
|
|
1109
1109
|
|
1110
1110
|
<h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Handling Pop-Up / Pop Up Alerts:</h3>
|
1111
1111
|
|
1112
|
-
🔵 <code>self.accept_alert()</code> automatically waits for and accepts alert pop-ups. <code>self.dismiss_alert()</code> automatically waits for and dismisses alert pop-ups. On occasion, some methods like <code>self.click(SELECTOR)</code> might dismiss a pop-up on its own because they call JavaScript to make sure that the <code>readyState</code> of the page is <code>complete</code> before advancing. If you're trying to accept a pop-up that got dismissed this way, use this workaround: Call <code>self.find_element(SELECTOR).click()</code> instead, (which will let the pop-up remain on the screen), and then use <code>self.accept_alert()</code> to accept the pop-up (<a href="https://github.com/seleniumbase/SeleniumBase/issues/600#issuecomment-647270426">more on that here</a>). If pop-ups are intermittent, wrap code in a try/except block.
|
1112
|
+
🔵 <code translate="no">self.accept_alert()</code> automatically waits for and accepts alert pop-ups. <code translate="no">self.dismiss_alert()</code> automatically waits for and dismisses alert pop-ups. On occasion, some methods like <code translate="no">self.click(SELECTOR)</code> might dismiss a pop-up on its own because they call JavaScript to make sure that the <code translate="no">readyState</code> of the page is <code translate="no">complete</code> before advancing. If you're trying to accept a pop-up that got dismissed this way, use this workaround: Call <code translate="no">self.find_element(SELECTOR).click()</code> instead, (which will let the pop-up remain on the screen), and then use <code translate="no">self.accept_alert()</code> to accept the pop-up (<a href="https://github.com/seleniumbase/SeleniumBase/issues/600#issuecomment-647270426">more on that here</a>). If pop-ups are intermittent, wrap code in a try/except block.
|
1113
1113
|
|
1114
1114
|
|
1115
1115
|
<h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Building Guided Tours for Websites:</h3>
|
@@ -1135,7 +1135,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
|
|
1135
1135
|
|
1136
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>
|
1137
1137
|
|
1138
|
-
<li>If you're using AWS, you can set up an <a href="https://aws.amazon.com/s3/" target="_blank">Amazon S3</a> account for saving log files and screenshots from your tests. To activate this feature, modify <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py">settings.py</a> with connection details in the S3 section, and add <code>--with-s3-logging</code> on the command-line when running your tests.</li>
|
1138
|
+
<li>If you're using AWS, you can set up an <a href="https://aws.amazon.com/s3/" target="_blank">Amazon S3</a> account for saving log files and screenshots from your tests. To activate this feature, modify <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py">settings.py</a> with connection details in the S3 section, and add <code translate="no">--with-s3-logging</code> on the command-line when running your tests.</li>
|
1139
1139
|
</ul>
|
1140
1140
|
|
1141
1141
|
Here's an example of running tests with some additional features enabled:
|
@@ -1166,7 +1166,7 @@ self.get_current_url() # This method returns the current page URL.
|
|
1166
1166
|
self.get_page_source() # This method returns the current page source.
|
1167
1167
|
```
|
1168
1168
|
|
1169
|
-
<b>ProTip™:</b> You can use the <code>self.get_page_source()</code> method with Python's <code>find()</code> command to parse through HTML to find something specific. (For more advanced parsing, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_parse_soup.py">BeautifulSoup example</a>.)
|
1169
|
+
<b>ProTip™:</b> You can use the <code translate="no">self.get_page_source()</code> method with Python's <code translate="no">find()</code> command to parse through HTML to find something specific. (For more advanced parsing, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_parse_soup.py">BeautifulSoup example</a>.)
|
1170
1170
|
|
1171
1171
|
```python
|
1172
1172
|
source = self.get_page_source()
|
@@ -1187,13 +1187,13 @@ self.click("div#my_id")
|
|
1187
1187
|
|
1188
1188
|
🔵 **Typing Text:**
|
1189
1189
|
|
1190
|
-
<code>self.type(selector, text)</code> # updates the text from the specified element with the specified value. An exception is raised if the element is missing or if the text field is not editable. Example:
|
1190
|
+
<code translate="no">self.type(selector, text)</code> # updates the text from the specified element with the specified value. An exception is raised if the element is missing or if the text field is not editable. Example:
|
1191
1191
|
|
1192
1192
|
```python
|
1193
1193
|
self.type("input#id_value", "2012")
|
1194
1194
|
```
|
1195
1195
|
|
1196
|
-
You can also use <code>self.add_text()</code> or the <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a> <code>.send_keys()</code> command, but those won't clear the text box first if there's already text inside.
|
1196
|
+
You can also use <code translate="no">self.add_text()</code> or the <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a> <code translate="no">.send_keys()</code> command, but those won't clear the text box first if there's already text inside.
|
1197
1197
|
|
1198
1198
|
🔵 **Getting the text from an element on a page:**
|
1199
1199
|
|
@@ -1295,7 +1295,7 @@ if self.is_text_visible("You Shall Not Pass!", "h1"):
|
|
1295
1295
|
|
1296
1296
|
<div></div>
|
1297
1297
|
<details>
|
1298
|
-
<summary> ▶️ Click for a longer example of <code>is_text_visible():</code></summary>
|
1298
|
+
<summary> ▶️ Click for a longer example of <code translate="no">is_text_visible():</code></summary>
|
1299
1299
|
|
1300
1300
|
```python
|
1301
1301
|
def get_mirror_universe_captain_picard_superbowl_ad(superbowl_year):
|
@@ -1335,7 +1335,7 @@ if self.is_link_text_visible("Stop! Hammer time!"):
|
|
1335
1335
|
|
1336
1336
|
<h3>🔵 Switching Tabs:</h3>
|
1337
1337
|
|
1338
|
-
<p>If your test opens up a new tab/window, you can switch to it. (SeleniumBase automatically switches to new tabs that don't open to <code>about:blank</code> URLs.)</p>
|
1338
|
+
<p>If your test opens up a new tab/window, you can switch to it. (SeleniumBase automatically switches to new tabs that don't open to <code translate="no">about:blank</code> URLs.)</p>
|
1339
1339
|
|
1340
1340
|
```python
|
1341
1341
|
self.switch_to_window(1) # This switches to the new tab (0 is the first one)
|
@@ -1424,7 +1424,7 @@ self.execute_script('''document.body.innerHTML = \"%s\"''' % referral_link)
|
|
1424
1424
|
self.click("a.analytics") # Clicks the generated button
|
1425
1425
|
```
|
1426
1426
|
|
1427
|
-
(Due to popular demand, this traffic generation example has been included in SeleniumBase with the <code>self.generate_referral(start_page, end_page)</code> and the <code>self.generate_traffic(start_page, end_page, loops)</code> methods.)
|
1427
|
+
(Due to popular demand, this traffic generation example has been included in SeleniumBase with the <code translate="no">self.generate_referral(start_page, end_page)</code> and the <code translate="no">self.generate_traffic(start_page, end_page, loops)</code> methods.)
|
1428
1428
|
|
1429
1429
|
</details>
|
1430
1430
|
|
@@ -1449,8 +1449,8 @@ class MyTestClass(BaseCase):
|
|
1449
1449
|
self.process_deferred_asserts()
|
1450
1450
|
```
|
1451
1451
|
|
1452
|
-
<code>deferred_assert_element()</code> and <code>deferred_assert_text()</code> will save any exceptions that would be raised.
|
1453
|
-
To flush out all the failed deferred asserts into a single exception, make sure to call <code>self.process_deferred_asserts()</code> at the end of your test method. If your test hits multiple pages, you can call <code>self.process_deferred_asserts()</code> before navigating to a new page so that the screenshot from your log files matches the URL where the deferred asserts were made.
|
1452
|
+
<code translate="no">deferred_assert_element()</code> and <code translate="no">deferred_assert_text()</code> will save any exceptions that would be raised.
|
1453
|
+
To flush out all the failed deferred asserts into a single exception, make sure to call <code translate="no">self.process_deferred_asserts()</code> at the end of your test method. If your test hits multiple pages, you can call <code translate="no">self.process_deferred_asserts()</code> before navigating to a new page so that the screenshot from your log files matches the URL where the deferred asserts were made.
|
1454
1454
|
|
1455
1455
|
<h3>🔵 How to access raw <a href="https://www.selenium.dev/documentation/webdriver/" target="_blank">WebDriver</a>:</h3>
|
1456
1456
|
|
@@ -1466,13 +1466,13 @@ self.driver.find_elements("partial link text", "GitHub")
|
|
1466
1466
|
|
1467
1467
|
<h3>🔵 How to retry failing tests automatically:</h3>
|
1468
1468
|
|
1469
|
-
<p>You can use <code>pytest --reruns=NUM</code> to retry failing tests that many times. Add <code>--reruns-delay=SECONDS</code> to wait that many seconds between retries. Example:</p>
|
1469
|
+
<p>You can use <code translate="no">pytest --reruns=NUM</code> to retry failing tests that many times. Add <code translate="no">--reruns-delay=SECONDS</code> to wait that many seconds between retries. Example:</p>
|
1470
1470
|
|
1471
1471
|
```bash
|
1472
1472
|
pytest --reruns=1 --reruns-delay=1
|
1473
1473
|
```
|
1474
1474
|
|
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>
|
1475
|
+
<p>You can use the <code translate="no">@retry_on_exception()</code> decorator to retry failing methods. (First import: <code translate="no">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>
|
1476
1476
|
|
1477
1477
|
--------
|
1478
1478
|
|
@@ -1,20 +1,20 @@
|
|
1
1
|
sbase/ReadMe.txt,sha256=F_8szskzdRlPQ5DChxbsFTA0GOszvxtVQs6W8GCv6gw,90
|
2
2
|
sbase/__init__.py,sha256=Kgq4COxq3G8FCBJHrLAMXQG3wGrmKjJ6L9tlaUi5PYo,562
|
3
3
|
sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
|
4
|
-
sbase/steps.py,sha256=
|
4
|
+
sbase/steps.py,sha256=XoRFgYGa0NADBZ0Pw1JhN_8bojMWox5-oRN0FwyfP5s,41310
|
5
5
|
seleniumbase/ReadMe.md,sha256=5Bnv8gsyKQGABhLj0S4HXZdtVic98puQlIGYc7YHUm8,3612
|
6
6
|
seleniumbase/__init__.py,sha256=Mw4ShIWUF2Efjx-JuwUQLWF9nIbxcX-vu9AOGBp32ec,2123
|
7
7
|
seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
|
8
|
-
seleniumbase/__version__.py,sha256=
|
8
|
+
seleniumbase/__version__.py,sha256=2vuiqA-1G2Xu3shpTtw2R0gqBpuJZonOgvvlB-gFTns,46
|
9
9
|
seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
|
-
seleniumbase/behave/behave_helper.py,sha256=
|
10
|
+
seleniumbase/behave/behave_helper.py,sha256=LVQlVEQjNHbYmG42njlg58cLv1QtPV5x86cWWqouM60,23415
|
11
11
|
seleniumbase/behave/behave_sb.py,sha256=TtTFIZpUfDpElNmoBDB46QVbCZDPJPgvl9XWZab8MkM,54130
|
12
12
|
seleniumbase/behave/steps.py,sha256=8-N-NB2tnDsxaP4LSg-uSBgbwZYMS6ZEL1oggO1PCoU,390
|
13
13
|
seleniumbase/common/ReadMe.md,sha256=PwQsRSPRCXejL-fg4YyDzED_Yr6e7ddmGu3g2OcDrcQ,3286
|
14
14
|
seleniumbase/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
15
|
seleniumbase/common/decorators.py,sha256=LJnAgg0RG3kDOFb8tpyq1zjmpv9ks6Tjg8GwgIn1YuY,7633
|
16
16
|
seleniumbase/common/encryption.py,sha256=IfAuE0hdrd3y-_qAQUWdSOKRGQ4QN24uTOBiQ9Eeq2s,5593
|
17
|
-
seleniumbase/common/exceptions.py,sha256=
|
17
|
+
seleniumbase/common/exceptions.py,sha256=SbdHOTbg7ycrioWleAVw9kG9vBtDfbYoj3e7ikkYYz0,3257
|
18
18
|
seleniumbase/common/obfuscate.py,sha256=VrwPbVigPH_Jk6ADCk5_miMoq1VK4M9SKnYScDkk-DQ,1204
|
19
19
|
seleniumbase/common/unobfuscate.py,sha256=MgP6MMT9Wam6ECFVIA84WsQczfl_dFiumFu9m3eXFDg,771
|
20
20
|
seleniumbase/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -29,7 +29,7 @@ seleniumbase/console_scripts/run.py,sha256=IQRoIlIK0_JJqX7RRQ_qY0mWgk3Uh-ZlTZZr2
|
|
29
29
|
seleniumbase/console_scripts/sb_behave_gui.py,sha256=GjM8NsTgcjte3Rwvl6fTWhWVSniKKF9tOugHH8iLToE,15153
|
30
30
|
seleniumbase/console_scripts/sb_caseplans.py,sha256=ykweMa0fbd-C7fBeE7JUrRfl8GmXdi71NGhJh0nS-EE,18023
|
31
31
|
seleniumbase/console_scripts/sb_commander.py,sha256=zM39kzAYp3b8V9aoqZ7ED2_Ns5dbqbMAnMpjUaYBD3s,13210
|
32
|
-
seleniumbase/console_scripts/sb_install.py,sha256=
|
32
|
+
seleniumbase/console_scripts/sb_install.py,sha256=EbdPeS1YZlSRcFBZs79FfMmb6XKuTwp7KqrPxtH3s3o,41857
|
33
33
|
seleniumbase/console_scripts/sb_mkchart.py,sha256=BYzgzxRA66MeIBhEjeJKa9BqvViWX8YHSqjquWMLh1w,11044
|
34
34
|
seleniumbase/console_scripts/sb_mkdir.py,sha256=UkD3TqaObvsItE7UwIERXOSFlQQqSjf0lUkwaJbN7I8,29782
|
35
35
|
seleniumbase/console_scripts/sb_mkfile.py,sha256=wvv22cYCVVmFNEE4TDws1S6Rdd8vGhl9beebVvyXl7U,15515
|
@@ -40,7 +40,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=PJyZ3jnaI6y1A-wL_PmuNhDwjIFSnKsD
|
|
40
40
|
seleniumbase/console_scripts/sb_recorder.py,sha256=hKJXYLEd2sGKjc_mhUGI9rYHRqTD4kkzPc1G6xqw72Y,10628
|
41
41
|
seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
42
42
|
seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
|
43
|
-
seleniumbase/core/browser_launcher.py,sha256=
|
43
|
+
seleniumbase/core/browser_launcher.py,sha256=iAUwvBLaPM0psL8CdDReeB2NYLpXCG_pPqE2PLvqSY4,140059
|
44
44
|
seleniumbase/core/capabilities_parser.py,sha256=lu2W7O1JrU9tLgvhx5gQ_Baqnkf3IjcPDzze0P2Ou-Y,5736
|
45
45
|
seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
|
46
46
|
seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
|
@@ -51,7 +51,7 @@ seleniumbase/core/jqc_helper.py,sha256=-_GvIoKXJsOb7DBZ2WH8c7cAxAn0x3-U0HeZaIqdk
|
|
51
51
|
seleniumbase/core/log_helper.py,sha256=EhN1QKxmD4gp0_F1wAWYP1bK9nJblYX50xpvdfDePQc,21822
|
52
52
|
seleniumbase/core/mysql.py,sha256=BaOdm8KB89grfwyFUQ7Qt_p65kDivrEVoXH0WBpi9R4,3482
|
53
53
|
seleniumbase/core/proxy_helper.py,sha256=R00kmFWlj5yew9Yid_P4HWv7G6VKu2AQq0Ee5GbQ7Gs,7594
|
54
|
-
seleniumbase/core/recorder_helper.py,sha256=
|
54
|
+
seleniumbase/core/recorder_helper.py,sha256=Tme-mnxvlWMvJJvM_3tjtIUJIcRc2SvdLOmPKlxdASg,24207
|
55
55
|
seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
|
56
56
|
seleniumbase/core/s3_manager.py,sha256=bkeI8I4y19ebWuQG1oEZV5qJbotC6eN8vin31OCNWJk,3521
|
57
57
|
seleniumbase/core/session_helper.py,sha256=0mhZWOJxHpWR8t0Wo1-jwofQBGVJebLXS8Gr8rlWvxo,686
|
@@ -69,16 +69,16 @@ seleniumbase/extensions/disable_csp.zip,sha256=YMifIIgEBiLrEFrS1sfW4Exh4br1V4oK1
|
|
69
69
|
seleniumbase/extensions/recorder.zip,sha256=wAyF8K9vPkmMyDAqpgKUEmL_WprHWuesv38FMidmgwQ,11876
|
70
70
|
seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
|
71
71
|
seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
|
-
seleniumbase/fixtures/base_case.py,sha256=
|
72
|
+
seleniumbase/fixtures/base_case.py,sha256=FC-flPWDb_8DlU7k5-RouFZLCwgmPyYxOI0bTODCAZE,667720
|
73
73
|
seleniumbase/fixtures/constants.py,sha256=jBbLJQgDnQdx8OjVsxysiRM35N1NruKzFiUIqzcL6o0,11886
|
74
74
|
seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
|
75
75
|
seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
|
76
76
|
seleniumbase/fixtures/js_utils.py,sha256=u-zvTRpYwjABB8aO1fUDEcEBzcF2glybWSOaZha_LDs,44528
|
77
|
-
seleniumbase/fixtures/page_actions.py,sha256=
|
77
|
+
seleniumbase/fixtures/page_actions.py,sha256=UsCpRXaUkVBxhljRVmnX1n0ocAG8pZ0ENy2db8A11XM,53389
|
78
78
|
seleniumbase/fixtures/page_utils.py,sha256=4n1HhzUYNRqs3Ci_YjZ9nJKEqeeqMiTaaMq_8xx2gd4,9639
|
79
|
-
seleniumbase/fixtures/shared_utils.py,sha256=
|
79
|
+
seleniumbase/fixtures/shared_utils.py,sha256=zWly5TqDr-zQ6oPjqLopi3SF0dKEh68VHNldc_o0kF8,5653
|
80
80
|
seleniumbase/fixtures/unittest_helper.py,sha256=sfZ92rZeBAn_sF_yQ3I6_I7h3lyU5-cV_UMegBNoEm8,1294
|
81
|
-
seleniumbase/fixtures/words.py,sha256=
|
81
|
+
seleniumbase/fixtures/words.py,sha256=FOA4mAYvl3EPVpBTvgvK6YwCL8BdlRCmed685kEe7Vg,7827
|
82
82
|
seleniumbase/fixtures/xpath_to_css.py,sha256=SIqctvTav-sGZPfDMPpzLyO4fxOrmLVpW8vuQW9SKX0,8875
|
83
83
|
seleniumbase/js_code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
84
84
|
seleniumbase/js_code/active_css_js.py,sha256=EGIGYnfh_Tcmp10dYSdtUXSu0tU_p0U44gx8HUerGxw,9777
|
@@ -102,22 +102,22 @@ seleniumbase/resources/ReadMe.md,sha256=uminnO5_Uv-UZDKcc9a9s9kxisaYUps-H98Fp5PJ
|
|
102
102
|
seleniumbase/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
103
103
|
seleniumbase/resources/favicon.ico,sha256=QPf_YK0QXa_--C4_CH-odh6OTHRQ9k-4O6WcCpXSdwM,1150
|
104
104
|
seleniumbase/translate/__init__.py,sha256=N2i5XntTwJZmwr9-qvdX5gC6Rdm5-ClIbnQ8yyPn4Oo,459
|
105
|
-
seleniumbase/translate/chinese.py,sha256=
|
106
|
-
seleniumbase/translate/dutch.py,sha256=-
|
107
|
-
seleniumbase/translate/french.py,sha256=
|
108
|
-
seleniumbase/translate/italian.py,sha256=
|
109
|
-
seleniumbase/translate/japanese.py,sha256=
|
110
|
-
seleniumbase/translate/korean.py,sha256=
|
111
|
-
seleniumbase/translate/master_dict.py,sha256=
|
112
|
-
seleniumbase/translate/portuguese.py,sha256=
|
113
|
-
seleniumbase/translate/russian.py,sha256=
|
114
|
-
seleniumbase/translate/spanish.py,sha256=
|
105
|
+
seleniumbase/translate/chinese.py,sha256=0QhK2eadtsdN4KCvwki1J7jBCe8I4xxWbKzteJKJozY,24698
|
106
|
+
seleniumbase/translate/dutch.py,sha256=-sazERTpITu8rGsiDrA5sDdbviitnNeBc1wyaVsoksI,25338
|
107
|
+
seleniumbase/translate/french.py,sha256=oAvfj7G5jMNnZJXaiRv5bzbo77QOs14y9tJhpbKsB2c,25589
|
108
|
+
seleniumbase/translate/italian.py,sha256=e-f8D34VHCp4p_T9XNny8Mjh5VkJu-DrCGHyOecaEY0,25424
|
109
|
+
seleniumbase/translate/japanese.py,sha256=Rk4F3M8m4e4ThCxZWcuKbwb1OjxVELb63XfTqB__8K8,26995
|
110
|
+
seleniumbase/translate/korean.py,sha256=m9_dMMBrqFeL6YDQ_4eHutWqIKvXwZRth0m31eUJhxI,25916
|
111
|
+
seleniumbase/translate/master_dict.py,sha256=LJxFoQN7qZ32Dp9dtcM5DymtAJw5ycfJsJHe10Uf2ZM,123039
|
112
|
+
seleniumbase/translate/portuguese.py,sha256=x3P4qxp56UiI41GoaL7JbUvFRYsgXU1EKjTgrt2GFtM,25369
|
113
|
+
seleniumbase/translate/russian.py,sha256=TyN9n0b4GRWDEYnHRGw1rfNAscdDmP3F3Y3aySM3C7s,27978
|
114
|
+
seleniumbase/translate/spanish.py,sha256=hh3xgW1Pq122SHYVvJAxFaXhFrjniOVncVbJbfWqOUM,25528
|
115
115
|
seleniumbase/translate/translator.py,sha256=lM9ISYjrTE9WAnqJPq2NJaUTJjkbxcOycgDZlMH42tc,49211
|
116
116
|
seleniumbase/undetected/__init__.py,sha256=DSvC5DmY9DKgzgfh8byTw8_gBU2yO0omfjRD5TtYKzE,19440
|
117
117
|
seleniumbase/undetected/cdp.py,sha256=EralLQm8diG5i6EoHFXHIQEc7Uf7PWtzyPH_upS5RIs,4047
|
118
118
|
seleniumbase/undetected/dprocess.py,sha256=WWQ_X_-Q7Lfx1m6oxkYHU0eTIc76Jodph4n1QnK4GEE,1706
|
119
119
|
seleniumbase/undetected/options.py,sha256=SGuz8iqlVPYN7IexNiGauupWF0xP3mqO72-9tgIqeuI,2999
|
120
|
-
seleniumbase/undetected/patcher.py,sha256=
|
120
|
+
seleniumbase/undetected/patcher.py,sha256=kBInbMf_Z2uhF4o4eiYOAkaSg4-4jiGjZVuXDhKPH3U,10605
|
121
121
|
seleniumbase/undetected/reactor.py,sha256=4_SVkQvc7d_S6sj0OMSGBx3PkbeAEXq1aAEFPws4QPY,2882
|
122
122
|
seleniumbase/undetected/webelement.py,sha256=QBf53_F9Bd_d3gAbhSFu8bU8Za7W32tjyfg42lB6qYs,417
|
123
123
|
seleniumbase/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -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.16.
|
140
|
-
seleniumbase-4.16.
|
141
|
-
seleniumbase-4.16.
|
142
|
-
seleniumbase-4.16.
|
143
|
-
seleniumbase-4.16.
|
144
|
-
seleniumbase-4.16.
|
139
|
+
seleniumbase-4.16.3.dist-info/LICENSE,sha256=9CweYVs2pqSWEApWewHooJ5p5F44GV0wSXi-jV0kA_U,1085
|
140
|
+
seleniumbase-4.16.3.dist-info/METADATA,sha256=aeLr4frADJ73swcKLpdH5ITwCH-2c_HrlpzLb8pzblA,82763
|
141
|
+
seleniumbase-4.16.3.dist-info/WHEEL,sha256=AtBG6SXL3KF_v0NxLf0ehyVOh0cold-JbJYXNGorC6Q,92
|
142
|
+
seleniumbase-4.16.3.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
143
|
+
seleniumbase-4.16.3.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
144
|
+
seleniumbase-4.16.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|