selenium-base 4.24.12__py3-none-any.whl → 4.45.7__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.
- {selenium_base-4.24.12.dist-info → selenium_base-4.45.7.dist-info}/METADATA +191 -152
- selenium_base-4.45.7.dist-info/RECORD +4 -0
- {selenium_base-4.24.12.dist-info → selenium_base-4.45.7.dist-info}/WHEEL +1 -1
- selenium_base-4.24.12.dist-info/RECORD +0 -4
- {selenium_base-4.24.12.dist-info → selenium_base-4.45.7.dist-info}/top_level.txt +0 -0
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: selenium-base
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.45.7
|
|
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
|
|
7
7
|
Author-email: mdmintz@gmail.com
|
|
8
8
|
Maintainer: Michael Mintz
|
|
9
9
|
License: MIT
|
|
10
|
+
Project-URL: Homepage, https://github.com/seleniumbase/SeleniumBase
|
|
10
11
|
Project-URL: Changelog, https://github.com/seleniumbase/SeleniumBase/releases
|
|
11
12
|
Project-URL: Download, https://pypi.org/project/seleniumbase/#files
|
|
12
|
-
Project-URL: Gitter, https://gitter.im/seleniumbase/SeleniumBase
|
|
13
13
|
Project-URL: Blog, https://seleniumbase.com/
|
|
14
|
+
Project-URL: Discord, https://discord.gg/EdhQTn3EyE
|
|
14
15
|
Project-URL: PyPI, https://pypi.org/project/seleniumbase/
|
|
15
16
|
Project-URL: Source, https://github.com/seleniumbase/SeleniumBase
|
|
17
|
+
Project-URL: Repository, https://github.com/seleniumbase/SeleniumBase
|
|
16
18
|
Project-URL: Documentation, https://seleniumbase.io/
|
|
17
19
|
Platform: Windows
|
|
18
20
|
Platform: Linux
|
|
@@ -25,19 +27,17 @@ Classifier: Environment :: Web Environment
|
|
|
25
27
|
Classifier: Framework :: Pytest
|
|
26
28
|
Classifier: Intended Audience :: Developers
|
|
27
29
|
Classifier: Intended Audience :: Information Technology
|
|
28
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
29
30
|
Classifier: Operating System :: MacOS :: MacOS X
|
|
30
31
|
Classifier: Operating System :: Microsoft :: Windows
|
|
31
32
|
Classifier: Operating System :: POSIX :: Linux
|
|
32
33
|
Classifier: Programming Language :: Python
|
|
33
34
|
Classifier: Programming Language :: Python :: 3
|
|
34
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
35
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
36
35
|
Classifier: Programming Language :: Python :: 3.9
|
|
37
36
|
Classifier: Programming Language :: Python :: 3.10
|
|
38
37
|
Classifier: Programming Language :: Python :: 3.11
|
|
39
38
|
Classifier: Programming Language :: Python :: 3.12
|
|
40
39
|
Classifier: Programming Language :: Python :: 3.13
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
41
41
|
Classifier: Topic :: Internet
|
|
42
42
|
Classifier: Topic :: Scientific/Engineering
|
|
43
43
|
Classifier: Topic :: Software Development
|
|
@@ -49,51 +49,68 @@ Classifier: Topic :: Software Development :: Testing
|
|
|
49
49
|
Classifier: Topic :: Software Development :: Testing :: Acceptance
|
|
50
50
|
Classifier: Topic :: Software Development :: Testing :: Traffic Generation
|
|
51
51
|
Classifier: Topic :: Utilities
|
|
52
|
-
Requires-Python: >=3.
|
|
52
|
+
Requires-Python: >=3.9
|
|
53
53
|
Description-Content-Type: text/markdown
|
|
54
|
-
Requires-Dist: seleniumbase
|
|
54
|
+
Requires-Dist: seleniumbase>=4.45.7
|
|
55
|
+
Dynamic: author
|
|
56
|
+
Dynamic: author-email
|
|
57
|
+
Dynamic: classifier
|
|
58
|
+
Dynamic: home-page
|
|
59
|
+
Dynamic: license
|
|
60
|
+
Dynamic: maintainer
|
|
61
|
+
Dynamic: platform
|
|
62
|
+
Dynamic: requires-dist
|
|
63
|
+
Dynamic: requires-python
|
|
64
|
+
Dynamic: summary
|
|
55
65
|
|
|
56
66
|
**[<img src="https://img.shields.io/badge/pypi-selenium--base-22AAEE.svg" alt="pypi" />](https://pypi.python.org/pypi/selenium-base) is a proxy for [<img src="https://img.shields.io/badge/pypi-seleniumbase-22AAEE.svg" alt="pypi" />](https://pypi.python.org/pypi/seleniumbase)**
|
|
57
67
|
****
|
|
58
68
|
|
|
59
69
|
<!-- SeleniumBase Docs -->
|
|
60
70
|
|
|
71
|
+
<meta property="og:site_name" content="SeleniumBase">
|
|
72
|
+
<meta property="og:title" content="SeleniumBase: Python Web Automation and E2E Testing" />
|
|
73
|
+
<meta property="og:description" content="Fast, easy, and reliable Web/UI testing with Python." />
|
|
74
|
+
<meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots">
|
|
75
|
+
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
|
|
76
|
+
<link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
|
|
61
77
|
|
|
62
78
|
<h1>SeleniumBase</h1>
|
|
63
79
|
|
|
64
|
-
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/
|
|
80
|
+
<p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="350" /></a></p>
|
|
65
81
|
|
|
66
|
-
<p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Scraping / Testing / Reporting</b></p>
|
|
67
82
|
|
|
68
|
-
<p align="center"
|
|
83
|
+
<p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
|
|
84
|
+
|
|
85
|
+
<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://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/badge/join-discord-infomational" alt="Join the SeleniumBase chat on Discord"/></a></p>
|
|
69
86
|
|
|
70
87
|
<p align="center">
|
|
71
88
|
<a href="#python_installation">🚀 Start</a> |
|
|
72
89
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/features_list.md">🏰 Features</a> |
|
|
73
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
|
|
74
90
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">🎛️ Options</a> |
|
|
91
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
|
|
75
92
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">🌠 Scripts</a> |
|
|
76
93
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/mobile_testing.md">📱 Mobile</a>
|
|
77
94
|
<br />
|
|
78
95
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📘 APIs</a> |
|
|
79
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">
|
|
80
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a> |
|
|
96
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 Formats</a> |
|
|
81
97
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md">🔴 Recorder</a> |
|
|
98
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a> |
|
|
82
99
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locales</a> |
|
|
83
|
-
<a href="https://
|
|
100
|
+
<a href="https://seleniumbase.io/devices/?url=seleniumbase.com">💻 Farm</a>
|
|
84
101
|
<br />
|
|
85
102
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
|
|
86
103
|
<a href="https://seleniumbase.io/demo_page">📰 TestPage</a> |
|
|
87
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/case_plans.md">🗂️ CasePlans</a> |
|
|
88
104
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
|
|
89
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/
|
|
90
|
-
<a href="https://
|
|
105
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">🐙 CDP Mode</a> |
|
|
106
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
|
|
107
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/utilities/selenium_grid/ReadMe.md">🌐 Grid</a>
|
|
91
108
|
<br />
|
|
92
109
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/how_it_works.md">👁️ How</a> |
|
|
93
110
|
<a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/migration/raw_selenium">🚝 Migrate</a> |
|
|
94
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/
|
|
95
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/tree/master/
|
|
96
|
-
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/
|
|
111
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/case_plans.md">🗂️ CasePlans</a> |
|
|
112
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples/boilerplates">♻️ Template</a> |
|
|
113
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/master_qa/ReadMe.md">🧬 Hybrid</a> |
|
|
97
114
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">🚎 Tours</a>
|
|
98
115
|
<br />
|
|
99
116
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/integrations/github/workflows/ReadMe.md">🤖 CI/CD</a> |
|
|
@@ -105,19 +122,82 @@ Requires-Dist: seleniumbase >=4.24.12
|
|
|
105
122
|
<br />
|
|
106
123
|
</p>
|
|
107
124
|
|
|
125
|
+
<p>SeleniumBase is the professional toolkit for web automation activities. Built for testing websites, bypassing CAPTCHAs, enhancing productivity, completing tasks, and scaling your business.</p>
|
|
126
|
+
|
|
108
127
|
--------
|
|
109
128
|
|
|
110
|
-
📚 Learn from [**over 200 examples** in the **SeleniumBase/examples/**](https://github.com/seleniumbase/SeleniumBase/tree/master/examples)
|
|
129
|
+
📚 Learn from [**over 200 examples** in the **SeleniumBase/examples/** folder](https://github.com/seleniumbase/SeleniumBase/tree/master/examples).
|
|
111
130
|
|
|
112
|
-
<
|
|
131
|
+
🐙 Note that <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> (Stealth Mode) have their own ReadMe files.
|
|
113
132
|
|
|
114
|
-
|
|
115
|
-
|
|
133
|
+
ℹ️ Most scripts run with raw <code translate="no"><b>python</b></code>, although some scripts use <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a> that expect <a href="https://docs.pytest.org/en/latest/how-to/usage.html" translate="no"><b>pytest</b></a> (a Python unit-testing framework included with SeleniumBase that can discover, collect, and run tests automatically).
|
|
134
|
+
|
|
135
|
+
--------
|
|
136
|
+
|
|
137
|
+
<p align="left">📗 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">raw_google.py</a>, which performs a Google search:</p>
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
from seleniumbase import SB
|
|
141
|
+
|
|
142
|
+
with SB(test=True, uc=True) as sb:
|
|
143
|
+
sb.open("https://google.com/ncr")
|
|
144
|
+
sb.type('[title="Search"]', "SeleniumBase GitHub page\n")
|
|
145
|
+
sb.click('[href*="github.com/seleniumbase/"]')
|
|
146
|
+
sb.save_screenshot_to_logs() # ./latest_logs/
|
|
147
|
+
print(sb.get_page_title())
|
|
116
148
|
```
|
|
117
149
|
|
|
118
|
-
|
|
150
|
+
> `python raw_google.py`
|
|
151
|
+
|
|
152
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py"><img src="https://seleniumbase.github.io/cdn/gif/google_search.gif" alt="SeleniumBase Test" title="SeleniumBase Test" width="420" /></a>
|
|
153
|
+
|
|
154
|
+
--------
|
|
155
|
+
|
|
156
|
+
<p align="left">📗 Here's an example of bypassing Cloudflare's challenge page: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
|
|
119
157
|
|
|
120
|
-
|
|
158
|
+
```python
|
|
159
|
+
from seleniumbase import SB
|
|
160
|
+
|
|
161
|
+
with SB(uc=True, test=True, locale="en") as sb:
|
|
162
|
+
url = "https://gitlab.com/users/sign_in"
|
|
163
|
+
sb.activate_cdp_mode(url)
|
|
164
|
+
sb.uc_gui_click_captcha()
|
|
165
|
+
sb.sleep(2)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
<img src="https://seleniumbase.github.io/other/cf_sec.jpg" title="SeleniumBase" width="332"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" title="SeleniumBase" width="288">
|
|
169
|
+
|
|
170
|
+
--------
|
|
171
|
+
|
|
172
|
+
<p align="left">📗 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py">test_get_swag.py</a>, which tests an e-commerce site:</p>
|
|
173
|
+
|
|
174
|
+
```python
|
|
175
|
+
from seleniumbase import BaseCase
|
|
176
|
+
BaseCase.main(__name__, __file__) # Call pytest
|
|
177
|
+
|
|
178
|
+
class MyTestClass(BaseCase):
|
|
179
|
+
def test_swag_labs(self):
|
|
180
|
+
self.open("https://www.saucedemo.com")
|
|
181
|
+
self.type("#user-name", "standard_user")
|
|
182
|
+
self.type("#password", "secret_sauce\n")
|
|
183
|
+
self.assert_element("div.inventory_list")
|
|
184
|
+
self.click('button[name*="backpack"]')
|
|
185
|
+
self.click("#shopping_cart_container a")
|
|
186
|
+
self.assert_text("Backpack", "div.cart_item")
|
|
187
|
+
self.click("button#checkout")
|
|
188
|
+
self.type("input#first-name", "SeleniumBase")
|
|
189
|
+
self.type("input#last-name", "Automation")
|
|
190
|
+
self.type("input#postal-code", "77123")
|
|
191
|
+
self.click("input#continue")
|
|
192
|
+
self.click("button#finish")
|
|
193
|
+
self.assert_text("Thank you for your order!")
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
> `pytest test_get_swag.py`
|
|
197
|
+
|
|
198
|
+
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" title="SeleniumBase Test" width="480" /></a>
|
|
199
|
+
|
|
200
|
+
> (The default browser is ``--chrome`` if not set.)
|
|
121
201
|
|
|
122
202
|
--------
|
|
123
203
|
|
|
@@ -149,7 +229,7 @@ pytest test_demo_site.py
|
|
|
149
229
|
|
|
150
230
|
--------
|
|
151
231
|
|
|
152
|
-
<p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/
|
|
232
|
+
<p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="232" /></a></p>
|
|
153
233
|
|
|
154
234
|
<blockquote>
|
|
155
235
|
<p dir="auto"><strong>Explore the README:</strong></p>
|
|
@@ -211,7 +291,7 @@ With raw Selenium, that requires more code:<br />
|
|
|
211
291
|
|
|
212
292
|
<p>📚 <b>Learn about different ways of writing tests:</b></p>
|
|
213
293
|
|
|
214
|
-
<p align="left"
|
|
294
|
+
<p align="left">📗📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_simple_login.py">test_simple_login.py</a>, which uses <code translate="no"><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/fixtures/base_case.py">BaseCase</a></code> class inheritance, and runs with <a href="https://docs.pytest.org/en/latest/how-to/usage.html">pytest</a> or <a href="https://github.com/mdmintz/pynose">pynose</a>. (Use <code translate="no">self.driver</code> to access Selenium's raw <code translate="no">driver</code>.)</p>
|
|
215
295
|
|
|
216
296
|
```python
|
|
217
297
|
from seleniumbase import BaseCase
|
|
@@ -230,22 +310,7 @@ class TestSimpleLogin(BaseCase):
|
|
|
230
310
|
self.assert_text("signed out", "#top_message")
|
|
231
311
|
```
|
|
232
312
|
|
|
233
|
-
<p align="left"
|
|
234
|
-
|
|
235
|
-
```python
|
|
236
|
-
def test_sb_fixture_with_no_class(sb):
|
|
237
|
-
sb.open("seleniumbase.io/simple/login")
|
|
238
|
-
sb.type("#username", "demo_user")
|
|
239
|
-
sb.type("#password", "secret_pass")
|
|
240
|
-
sb.click('a:contains("Sign in")')
|
|
241
|
-
sb.assert_exact_text("Welcome!", "h1")
|
|
242
|
-
sb.assert_element("img#image1")
|
|
243
|
-
sb.highlight("#image1")
|
|
244
|
-
sb.click_link("Sign out")
|
|
245
|
-
sb.assert_text("signed out", "#top_message")
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
<p align="left">📙📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_login_sb.py">raw_login_sb.py</a>, which uses the <b><code translate="no">SB</code></b> Context Manager. Runs with pure <code translate="no">python</code>. (Use <code translate="no">sb.driver</code> to access Selenium's raw <code translate="no">driver</code>.)</p>
|
|
313
|
+
<p align="left">📘📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_login_sb.py">raw_login_sb.py</a>, which uses the <b><code translate="no">SB</code></b> Context Manager. Runs with pure <code translate="no">python</code>. (Use <code translate="no">sb.driver</code> to access Selenium's raw <code translate="no">driver</code>.)</p>
|
|
249
314
|
|
|
250
315
|
```python
|
|
251
316
|
from seleniumbase import SB
|
|
@@ -262,24 +327,7 @@ with SB() as sb:
|
|
|
262
327
|
sb.assert_text("signed out", "#top_message")
|
|
263
328
|
```
|
|
264
329
|
|
|
265
|
-
<p align="left"
|
|
266
|
-
|
|
267
|
-
```python
|
|
268
|
-
from seleniumbase import DriverContext
|
|
269
|
-
|
|
270
|
-
with DriverContext() as driver:
|
|
271
|
-
driver.open("seleniumbase.io/simple/login")
|
|
272
|
-
driver.type("#username", "demo_user")
|
|
273
|
-
driver.type("#password", "secret_pass")
|
|
274
|
-
driver.click('a:contains("Sign in")')
|
|
275
|
-
driver.assert_exact_text("Welcome!", "h1")
|
|
276
|
-
driver.assert_element("img#image1")
|
|
277
|
-
driver.highlight("#image1")
|
|
278
|
-
driver.click_link("Sign out")
|
|
279
|
-
driver.assert_text("signed out", "#top_message")
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
<p align="left">📔📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_login_driver.py">raw_login_driver.py</a>, which uses the <b><code translate="no">Driver</code></b> Manager. Runs with pure <code translate="no">python</code>. (The <code>driver</code> is an improved version of Selenium's raw <code translate="no">driver</code>, with more methods.)</p>
|
|
330
|
+
<p align="left">📙📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_login_driver.py">raw_login_driver.py</a>, which uses the <b><code translate="no">Driver</code></b> Manager. Runs with pure <code translate="no">python</code>. (The <code>driver</code> is an improved version of Selenium's raw <code translate="no">driver</code>, with more methods.)</p>
|
|
283
331
|
|
|
284
332
|
```python
|
|
285
333
|
from seleniumbase import Driver
|
|
@@ -299,23 +347,6 @@ finally:
|
|
|
299
347
|
driver.quit()
|
|
300
348
|
```
|
|
301
349
|
|
|
302
|
-
<p align="left">📕📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/features/login_app.feature">login_app.feature</a>, which uses <a translate="no" href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank">behave-BDD Gherkin</a> syntax. Runs with <code translate="no">behave</code>. (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">Learn about the <b>SeleniumBase behave-BDD</b> integration</a>)</p>
|
|
303
|
-
|
|
304
|
-
```gherkin
|
|
305
|
-
Feature: SeleniumBase scenarios for the Simple App
|
|
306
|
-
|
|
307
|
-
Scenario: Verify the Simple App (Login / Logout)
|
|
308
|
-
Given Open "seleniumbase.io/simple/login"
|
|
309
|
-
And Type "demo_user" into "#username"
|
|
310
|
-
And Type "secret_pass" into "#password"
|
|
311
|
-
And Click 'a:contains("Sign in")'
|
|
312
|
-
And Assert exact text "Welcome!" in "h1"
|
|
313
|
-
And Assert element "img#image1"
|
|
314
|
-
And Highlight "#image1"
|
|
315
|
-
And Click link "Sign out"
|
|
316
|
-
And Assert text "signed out" in "#top_message"
|
|
317
|
-
```
|
|
318
|
-
|
|
319
350
|
--------
|
|
320
351
|
|
|
321
352
|
<a id="python_installation"></a>
|
|
@@ -360,48 +391,49 @@ pip install -e .
|
|
|
360
391
|
🔵 **Type ``seleniumbase`` or ``sbase`` to verify that SeleniumBase was installed successfully:**
|
|
361
392
|
|
|
362
393
|
```bash
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
COMMANDS:
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
394
|
+
___ _ _ ___
|
|
395
|
+
/ __| ___| |___ _ _ (_)_ _ _ __ | _ ) __ _ ______
|
|
396
|
+
\__ \/ -_) / -_) ' \| | \| | ' \ | _ \/ _` (_-< -_)
|
|
397
|
+
|___/\___|_\___|_||_|_|\_,_|_|_|_\|___/\__,_/__|___|
|
|
398
|
+
----------------------------------------------------
|
|
399
|
+
|
|
400
|
+
╭──────────────────────────────────────────────────╮
|
|
401
|
+
│ * USAGE: "seleniumbase [COMMAND] [PARAMETERS]" │
|
|
402
|
+
│ * OR: "sbase [COMMAND] [PARAMETERS]" │
|
|
403
|
+
│ │
|
|
404
|
+
│ COMMANDS: PARAMETERS / DESCRIPTIONS: │
|
|
405
|
+
│ get / install [DRIVER_NAME] [OPTIONS] │
|
|
406
|
+
│ methods (List common Python methods) │
|
|
407
|
+
│ options (List common pytest options) │
|
|
408
|
+
│ behave-options (List common behave options) │
|
|
409
|
+
│ gui / commander [OPTIONAL PATH or TEST FILE] │
|
|
410
|
+
│ behave-gui (SBase Commander for Behave) │
|
|
411
|
+
│ caseplans [OPTIONAL PATH or TEST FILE] │
|
|
412
|
+
│ mkdir [DIRECTORY] [OPTIONS] │
|
|
413
|
+
│ mkfile [FILE.py] [OPTIONS] │
|
|
414
|
+
│ mkrec / codegen [FILE.py] [OPTIONS] │
|
|
415
|
+
│ recorder (Open Recorder Desktop App.) │
|
|
416
|
+
│ record (If args: mkrec. Else: App.) │
|
|
417
|
+
│ mkpres [FILE.py] [LANG] │
|
|
418
|
+
│ mkchart [FILE.py] [LANG] │
|
|
419
|
+
│ print [FILE] [OPTIONS] │
|
|
420
|
+
│ translate [SB_FILE.py] [LANG] [ACTION] │
|
|
421
|
+
│ convert [WEBDRIVER_UNITTEST_FILE.py] │
|
|
422
|
+
│ extract-objects [SB_FILE.py] │
|
|
423
|
+
│ inject-objects [SB_FILE.py] [OPTIONS] │
|
|
424
|
+
│ objectify [SB_FILE.py] [OPTIONS] │
|
|
425
|
+
│ revert-objects [SB_FILE.py] [OPTIONS] │
|
|
426
|
+
│ encrypt / obfuscate │
|
|
427
|
+
│ decrypt / unobfuscate │
|
|
428
|
+
│ proxy (Start a basic proxy server) │
|
|
429
|
+
│ download server (Get Selenium Grid JAR file) │
|
|
430
|
+
│ grid-hub [start|stop] [OPTIONS] │
|
|
431
|
+
│ grid-node [start|stop] --hub=[HOST/IP] │
|
|
432
|
+
│ │
|
|
433
|
+
│ * EXAMPLE => "sbase get chromedriver stable" │
|
|
434
|
+
│ * For command info => "sbase help [COMMAND]" │
|
|
435
|
+
│ * For info on all commands => "sbase --help" │
|
|
436
|
+
╰──────────────────────────────────────────────────╯
|
|
405
437
|
```
|
|
406
438
|
|
|
407
439
|
<h3>🔵 Downloading webdrivers:</h3>
|
|
@@ -413,20 +445,21 @@ COMMANDS:
|
|
|
413
445
|
<summary> ▶️ Here's sample output from a chromedriver download. (<b>click to expand</b>)</summary>
|
|
414
446
|
|
|
415
447
|
```bash
|
|
416
|
-
*** chromedriver to download =
|
|
448
|
+
*** chromedriver to download = 131.0.6778.108 (Latest Stable)
|
|
417
449
|
|
|
418
450
|
Downloading chromedriver-mac-arm64.zip from:
|
|
419
|
-
https://storage.googleapis.com/chrome-for-testing-public/
|
|
451
|
+
https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.108/mac-arm64/chromedriver-mac-arm64.zip ...
|
|
420
452
|
Download Complete!
|
|
421
453
|
|
|
422
454
|
Extracting ['chromedriver'] from chromedriver-mac-arm64.zip ...
|
|
423
455
|
Unzip Complete!
|
|
424
456
|
|
|
425
457
|
The file [chromedriver] was saved to:
|
|
426
|
-
|
|
458
|
+
~/github/SeleniumBase/seleniumbase/drivers/
|
|
459
|
+
chromedriver
|
|
427
460
|
|
|
428
|
-
Making [chromedriver
|
|
429
|
-
[chromedriver
|
|
461
|
+
Making [chromedriver 131.0.6778.108] executable ...
|
|
462
|
+
[chromedriver 131.0.6778.108] is now ready for use!
|
|
430
463
|
```
|
|
431
464
|
|
|
432
465
|
</details>
|
|
@@ -446,7 +479,7 @@ pytest my_first_test.py
|
|
|
446
479
|
|
|
447
480
|
<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" title="SeleniumBase Test" width="480" /></a>
|
|
448
481
|
|
|
449
|
-
<p align="left"><b>Here's the code for <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py">my_first_test.py</a>:</b></p>
|
|
482
|
+
<p align="left"><b>Here's the full code for <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/my_first_test.py">my_first_test.py</a>:</b></p>
|
|
450
483
|
|
|
451
484
|
```python
|
|
452
485
|
from seleniumbase import BaseCase
|
|
@@ -696,11 +729,14 @@ pytest test_coffee_cart.py --trace
|
|
|
696
729
|
--binary-location=PATH # (Set path of the Chromium browser binary to use.)
|
|
697
730
|
--driver-version=VER # (Set the chromedriver or uc_driver version to use.)
|
|
698
731
|
--sjw # (Skip JS Waits for readyState to be "complete" or Angular to load.)
|
|
732
|
+
--wfa # (Wait for AngularJS to be done loading after specific web actions.)
|
|
699
733
|
--pls=PLS # (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
|
|
700
|
-
--headless # (
|
|
701
|
-
--
|
|
734
|
+
--headless # (The default headless mode. Linux uses this mode by default.)
|
|
735
|
+
--headless1 # (Use Chrome's old headless mode. Fast, but has limitations.)
|
|
736
|
+
--headless2 # (Use Chrome's new headless mode, which supports extensions.)
|
|
702
737
|
--headed # (Run tests in headed/GUI mode on Linux OS, where not default.)
|
|
703
738
|
--xvfb # (Run tests using the Xvfb virtual display server on Linux OS.)
|
|
739
|
+
--xvfb-metrics=STRING # (Set Xvfb display size on Linux: "Width,Height".)
|
|
704
740
|
--locale=LOCALE_CODE # (Set the Language Locale Code for the web browser.)
|
|
705
741
|
--interval=SECONDS # (The autoplay interval for presentations & tour steps)
|
|
706
742
|
--start-page=URL # (The starting URL for the web browser when tests begin.)
|
|
@@ -718,10 +754,12 @@ pytest test_coffee_cart.py --trace
|
|
|
718
754
|
--block-images # (Block images from loading during tests.)
|
|
719
755
|
--do-not-track # (Indicate to websites that you don't want to be tracked.)
|
|
720
756
|
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
|
|
757
|
+
--ee | --esc-end # (Lets the user end the current test via the ESC key.)
|
|
721
758
|
--recorder # (Enables the Recorder for turning browser actions into code.)
|
|
722
759
|
--rec-behave # (Same as Recorder Mode, but also generates behave-gherkin.)
|
|
723
760
|
--rec-sleep # (If the Recorder is enabled, also records self.sleep calls.)
|
|
724
761
|
--rec-print # (If the Recorder is enabled, prints output after tests end.)
|
|
762
|
+
--disable-cookies # (Disable Cookies on websites. Pages might break!)
|
|
725
763
|
--disable-js # (Disable JavaScript on websites. Pages might break!)
|
|
726
764
|
--disable-csp # (Disable the Content Security Policy of websites.)
|
|
727
765
|
--disable-ws # (Disable Web Security on Chromium-based browsers.)
|
|
@@ -744,6 +782,7 @@ pytest test_coffee_cart.py --trace
|
|
|
744
782
|
--rcs | --reuse-class-session # (Reuse session for tests in class.)
|
|
745
783
|
--crumbs # (Delete all cookies between tests reusing a session.)
|
|
746
784
|
--disable-beforeunload # (Disable the "beforeunload" event on Chrome.)
|
|
785
|
+
--window-position=X,Y # (Set the browser's starting window position.)
|
|
747
786
|
--window-size=WIDTH,HEIGHT # (Set the browser's starting window size.)
|
|
748
787
|
--maximize # (Start tests with the browser window maximized.)
|
|
749
788
|
--screenshot # (Save a screenshot at the end of each test.)
|
|
@@ -856,7 +895,7 @@ You can run it from the ``examples/`` folder like this:
|
|
|
856
895
|
pytest test_fail.py
|
|
857
896
|
```
|
|
858
897
|
|
|
859
|
-
🔵 You'll notice that a logs folder,
|
|
898
|
+
🔵 You'll notice that a logs folder, ``./latest_logs/``, was created to hold information (and screenshots) about the failing test. During test runs, past results get moved to the archived_logs folder if you have ARCHIVE_EXISTING_LOGS set to True in [settings.py](https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/config/settings.py), or if your run tests with ``--archive-logs``. If you choose not to archive existing logs, they will be deleted and replaced by the logs of the latest test run.
|
|
860
899
|
|
|
861
900
|
--------
|
|
862
901
|
|
|
@@ -885,14 +924,14 @@ python -m http.server 1948
|
|
|
885
924
|
pytest test_suite.py test_image_saving.py --dashboard --rs --headless
|
|
886
925
|
```
|
|
887
926
|
|
|
888
|
-
<img src="https://seleniumbase.github.io/cdn/img/dashboard_2.png" alt="The SeleniumBase Dashboard" title="The SeleniumBase Dashboard" width="
|
|
927
|
+
<img src="https://seleniumbase.github.io/cdn/img/dashboard_2.png" alt="The SeleniumBase Dashboard" title="The SeleniumBase Dashboard" width="520" />
|
|
889
928
|
|
|
890
929
|
--------
|
|
891
930
|
|
|
892
931
|
<a id="creating_visual_reports"></a>
|
|
893
932
|
<h2><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Generating Test Reports:</h2>
|
|
894
933
|
|
|
895
|
-
<h3>🔵
|
|
934
|
+
<h3>🔵 <code>pytest</code> HTML Reports:</h3>
|
|
896
935
|
|
|
897
936
|
✅ Using ``--html=report.html`` gives you a fancy report of the name specified after your test suite completes.
|
|
898
937
|
|
|
@@ -912,7 +951,7 @@ pytest test_suite.py --dashboard --html=report.html
|
|
|
912
951
|
|
|
913
952
|
<img src="https://seleniumbase.github.io/cdn/img/dash_report.jpg" alt="Dashboard Pytest HTML Report" title="Dashboard Pytest HTML Report" width="520" />
|
|
914
953
|
|
|
915
|
-
If viewing pytest html reports in [Jenkins](https://www.jenkins.io/), you may need to [configure Jenkins settings](https://stackoverflow.com/a/46197356) for the html to render correctly. This is due to [Jenkins CSP changes](https://www.jenkins.io/doc/book/system-administration/security/configuring-content-security-policy/).
|
|
954
|
+
If viewing pytest html reports in [Jenkins](https://www.jenkins.io/), you may need to [configure Jenkins settings](https://stackoverflow.com/a/46197356/7058266) for the html to render correctly. This is due to [Jenkins CSP changes](https://www.jenkins.io/doc/book/system-administration/security/configuring-content-security-policy/).
|
|
916
955
|
|
|
917
956
|
You can also use ``--junit-xml=report.xml`` to get an xml report instead. Jenkins can use this file to display better reporting for your tests.
|
|
918
957
|
|
|
@@ -920,7 +959,7 @@ You can also use ``--junit-xml=report.xml`` to get an xml report instead. Jenkin
|
|
|
920
959
|
pytest test_suite.py --junit-xml=report.xml
|
|
921
960
|
```
|
|
922
961
|
|
|
923
|
-
<h3>🔵 pynose Reports:</h3>
|
|
962
|
+
<h3>🔵 <code>pynose</code> Reports:</h3>
|
|
924
963
|
|
|
925
964
|
The ``--report`` option gives you a fancy report after your test suite completes.
|
|
926
965
|
|
|
@@ -932,7 +971,7 @@ pynose test_suite.py --report
|
|
|
932
971
|
|
|
933
972
|
(NOTE: You can add ``--show-report`` to immediately display pynose reports after the test suite completes. Only use ``--show-report`` when running tests locally because it pauses the test run.)
|
|
934
973
|
|
|
935
|
-
<h3>🔵
|
|
974
|
+
<h3>🔵 <code>behave</code> Dashboard & Reports:</h3>
|
|
936
975
|
|
|
937
976
|
(The [behave_bdd/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/behave_bdd) folder can be found in the [examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder.)
|
|
938
977
|
|
|
@@ -940,7 +979,7 @@ pynose test_suite.py --report
|
|
|
940
979
|
behave behave_bdd/features/ -D dashboard -D headless
|
|
941
980
|
```
|
|
942
981
|
|
|
943
|
-
<img src="https://seleniumbase.github.io/cdn/img/sb_behave_dashboard.png" title="SeleniumBase" width="
|
|
982
|
+
<img src="https://seleniumbase.github.io/cdn/img/sb_behave_dashboard.png" title="SeleniumBase" width="520">
|
|
944
983
|
|
|
945
984
|
You can also use ``--junit`` to get ``.xml`` reports for each <code translate="no">behave</code> feature. Jenkins can use these files to display better reporting for your tests.
|
|
946
985
|
|
|
@@ -1004,7 +1043,7 @@ pytest user_agent_test.py --agent="Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1
|
|
|
1004
1043
|
```
|
|
1005
1044
|
|
|
1006
1045
|
|
|
1007
|
-
<h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Handling Pop-Up
|
|
1046
|
+
<h3><img src="https://seleniumbase.github.io/img/logo7.png" title="SeleniumBase" width="32" /> Handling Pop-Up Alerts:</h3>
|
|
1008
1047
|
|
|
1009
1048
|
🔵 <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.
|
|
1010
1049
|
|
|
@@ -1402,25 +1441,25 @@ pytest --reruns=1 --reruns-delay=1
|
|
|
1402
1441
|
|
|
1403
1442
|
<p>
|
|
1404
1443
|
<div><b>If you see something, say something!</b></div>
|
|
1405
|
-
<div><a href="https://github.com/seleniumbase/SeleniumBase/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/seleniumbase/SeleniumBase.svg?color=22BB88" title="Closed Issues" /></a>
|
|
1444
|
+
<div><a href="https://github.com/seleniumbase/SeleniumBase/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/seleniumbase/SeleniumBase.svg?color=22BB88" title="Closed Issues" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/pulls?q=is%3Apr+is%3Aclosed"><img src="https://img.shields.io/github/issues-pr-closed/seleniumbase/SeleniumBase.svg?logo=github&logoColor=white&color=22BB99" title="Closed Pull Requests" /></a></div>
|
|
1406
1445
|
</p>
|
|
1407
1446
|
|
|
1408
|
-
<p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_10t.png" alt="SeleniumBase" title="SeleniumBase" width="
|
|
1447
|
+
<p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sb_logo_10t.png" alt="SeleniumBase" title="SeleniumBase" width="274" /></a></p>
|
|
1448
|
+
|
|
1449
|
+
<a href="https://pypi.org/project/seleniumbase/" target="_blank"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" /></a>
|
|
1409
1450
|
|
|
1410
1451
|
<p><div>
|
|
1411
|
-
<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="
|
|
1412
|
-
<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="
|
|
1413
|
-
<span><a href="https://
|
|
1414
|
-
<span><a href="https://
|
|
1452
|
+
<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>
|
|
1453
|
+
<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>
|
|
1454
|
+
<span><a href="https://discord.gg/EdhQTn3EyE"><img src="https://seleniumbase.github.io/other/discord_icon.png" title="SeleniumBase on Discord" alt="SeleniumBase on Discord" width="66" /></a></span>
|
|
1455
|
+
<span><a href="https://www.facebook.com/SeleniumBase"><img src="https://seleniumbase.io/img/social/share_facebook.svg" title="SeleniumBase on Facebook" alt="SeleniumBase on Facebook" width="62" /></a></span>
|
|
1415
1456
|
</div></p>
|
|
1416
1457
|
|
|
1417
1458
|
<p><div><b><a href="https://github.com/mdmintz">https://github.com/mdmintz</a></b></div></p>
|
|
1418
1459
|
|
|
1419
|
-
<div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/
|
|
1420
|
-
<div><a href="https://
|
|
1421
|
-
<div><a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/seleniumbase.svg?color=19A57B" title="Stargazers" /></a></div>
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
<p><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb.png" alt="SeleniumBase" title="SeleniumBase" width="300" /></a></p>
|
|
1426
|
-
<p><a href="https://pypi.org/project/seleniumbase/" target="_blank"><img src="https://img.shields.io/pypi/pyversions/seleniumbase.svg?color=22AAEE&logo=python&logoColor=FEDC54" title="Supported Python Versions" /></a></p>
|
|
1460
|
+
<div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="274" /></a></div>
|
|
1461
|
+
<div><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/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" /></a></div>
|
|
1462
|
+
<div><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://img.shields.io/badge/tested%20with-SeleniumBase-04C38E.svg" alt="Tested with SeleniumBase" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/stargazers"><img src="https://img.shields.io/github/stars/seleniumbase/seleniumbase.svg?color=19A57B" title="Stargazers" /></a></div>
|
|
1463
|
+
<div><a href="https://hellogithub.com/repository/c6be2d0f1969448697683d11a4ff915e" target="_blank"><img src="https://abroad.hellogithub.com/v1/widgets/recommend.svg?rid=c6be2d0f1969448697683d11a4ff915e&claim_uid=xcrm4p9j3d6JCO5&theme=small" alt="Featured|HelloGitHub" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank"><img src="https://img.shields.io/badge/join-discord-infomational" alt="Join the SeleniumBase chat on Discord"/></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></div>
|
|
1464
|
+
<div><a href="https://pepy.tech/project/seleniumbase" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" /></a> <img src="https://views.whatilearened.today/views/github/seleniumbase/SeleniumBase.svg" width="98px" height="20px" alt="Views" /></div>
|
|
1465
|
+
<div align="left"></div>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
selenium_base-4.45.7.dist-info/METADATA,sha256=Q7ZIr0C8uD782a7lvd31bv_CaEkG3kEGvC6cZBpxHg8,80766
|
|
2
|
+
selenium_base-4.45.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
3
|
+
selenium_base-4.45.7.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
4
|
+
selenium_base-4.45.7.dist-info/RECORD,,
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
selenium_base-4.24.12.dist-info/METADATA,sha256=Kl3WQDy3Lulgd0XpiELlkRnrl3zQQkDvlUtbqWSnWYQ,78059
|
|
2
|
-
selenium_base-4.24.12.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
3
|
-
selenium_base-4.24.12.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
4
|
-
selenium_base-4.24.12.dist-info/RECORD,,
|
|
File without changes
|