seleniumbase 4.30.8__py3-none-any.whl → 4.31.0__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/__init__.py +1 -0
 - seleniumbase/__init__.py +2 -3
 - seleniumbase/__version__.py +1 -1
 - seleniumbase/behave/behave_sb.py +47 -9
 - seleniumbase/config/settings.py +4 -0
 - seleniumbase/console_scripts/sb_behave_gui.py +5 -5
 - seleniumbase/console_scripts/sb_caseplans.py +6 -6
 - seleniumbase/console_scripts/sb_commander.py +5 -5
 - seleniumbase/console_scripts/sb_install.py +10 -2
 - seleniumbase/console_scripts/sb_recorder.py +4 -4
 - seleniumbase/core/browser_launcher.py +138 -103
 - seleniumbase/core/mysql.py +1 -4
 - seleniumbase/core/recorder_helper.py +24 -5
 - seleniumbase/core/sb_driver.py +2 -3
 - seleniumbase/core/settings_parser.py +4 -0
 - seleniumbase/fixtures/base_case.py +307 -492
 - seleniumbase/fixtures/js_utils.py +19 -52
 - seleniumbase/fixtures/page_actions.py +3 -6
 - seleniumbase/fixtures/page_utils.py +20 -58
 - seleniumbase/plugins/base_plugin.py +2 -3
 - seleniumbase/plugins/driver_manager.py +169 -3
 - seleniumbase/plugins/pytest_plugin.py +34 -21
 - seleniumbase/plugins/sb_manager.py +170 -3
 - seleniumbase/plugins/selenium_plugin.py +52 -6
 - seleniumbase/undetected/__init__.py +13 -38
 - seleniumbase/undetected/dprocess.py +4 -6
 - seleniumbase/undetected/options.py +3 -6
 - seleniumbase/undetected/patcher.py +2 -3
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/METADATA +108 -123
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/RECORD +34 -45
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/WHEEL +1 -1
 - sbase/ReadMe.txt +0 -2
 - seleniumbase/ReadMe.md +0 -25
 - seleniumbase/common/ReadMe.md +0 -71
 - seleniumbase/console_scripts/ReadMe.md +0 -734
 - seleniumbase/drivers/ReadMe.md +0 -27
 - seleniumbase/extensions/ReadMe.md +0 -12
 - seleniumbase/masterqa/ReadMe.md +0 -61
 - seleniumbase/resources/ReadMe.md +0 -31
 - seleniumbase/resources/favicon.ico +0 -0
 - seleniumbase/utilities/selenium_grid/ReadMe.md +0 -84
 - seleniumbase/utilities/selenium_ide/ReadMe.md +0 -111
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/LICENSE +0 -0
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/entry_points.txt +0 -0
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/top_level.txt +0 -0
 
| 
         @@ -10,6 +10,7 @@ import selenium.webdriver.chrome.service 
     | 
|
| 
       10 
10 
     | 
    
         
             
            import selenium.webdriver.chrome.webdriver
         
     | 
| 
       11 
11 
     | 
    
         
             
            import selenium.webdriver.common.service
         
     | 
| 
       12 
12 
     | 
    
         
             
            import selenium.webdriver.remote.command
         
     | 
| 
      
 13 
     | 
    
         
            +
            from contextlib import suppress
         
     | 
| 
       13 
14 
     | 
    
         
             
            from .cdp import CDP
         
     | 
| 
       14 
15 
     | 
    
         
             
            from .cdp import PageElement
         
     | 
| 
       15 
16 
     | 
    
         
             
            from .dprocess import start_detached
         
     | 
| 
         @@ -201,11 +202,9 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       201 
202 
     | 
    
         
             
                            # Create a temporary folder for the user-data profile.
         
     | 
| 
       202 
203 
     | 
    
         
             
                            options.add_argument(arg)
         
     | 
| 
       203 
204 
     | 
    
         
             
                    if not language:
         
     | 
| 
       204 
     | 
    
         
            -
                         
     | 
| 
      
 205 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       205 
206 
     | 
    
         
             
                            import locale
         
     | 
| 
       206 
207 
     | 
    
         
             
                            language = locale.getlocale()[0].replace("_", "-")
         
     | 
| 
       207 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       208 
     | 
    
         
            -
                            pass
         
     | 
| 
       209 
208 
     | 
    
         
             
                        if (
         
     | 
| 
       210 
209 
     | 
    
         
             
                            not language
         
     | 
| 
       211 
210 
     | 
    
         
             
                            or "English" in language
         
     | 
| 
         @@ -242,7 +241,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       242 
241 
     | 
    
         
             
                    )
         
     | 
| 
       243 
242 
     | 
    
         
             
                    if hasattr(options, 'handle_prefs'):
         
     | 
| 
       244 
243 
     | 
    
         
             
                        options.handle_prefs(user_data_dir)
         
     | 
| 
       245 
     | 
    
         
            -
                     
     | 
| 
      
 244 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       246 
245 
     | 
    
         
             
                        import json
         
     | 
| 
       247 
246 
     | 
    
         
             
                        with open(
         
     | 
| 
       248 
247 
     | 
    
         
             
                            os.path.join(
         
     | 
| 
         @@ -263,8 +262,6 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       263 
262 
     | 
    
         
             
                            fs.seek(0, 0)
         
     | 
| 
       264 
263 
     | 
    
         
             
                            fs.truncate()
         
     | 
| 
       265 
264 
     | 
    
         
             
                            json.dump(config, fs)
         
     | 
| 
       266 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       267 
     | 
    
         
            -
                        pass
         
     | 
| 
       268 
265 
     | 
    
         
             
                    creationflags = 0
         
     | 
| 
       269 
266 
     | 
    
         
             
                    if "win32" in sys.platform:
         
     | 
| 
       270 
267 
     | 
    
         
             
                        creationflags = subprocess.CREATE_NO_WINDOW
         
     | 
| 
         @@ -293,8 +290,6 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       293 
290 
     | 
    
         
             
                                self.browser_pid = browser.pid
         
     | 
| 
       294 
291 
     | 
    
         
             
                        service_ = None
         
     | 
| 
       295 
292 
     | 
    
         
             
                        log_output = subprocess.PIPE
         
     | 
| 
       296 
     | 
    
         
            -
                        if sys.version_info < (3, 8):
         
     | 
| 
       297 
     | 
    
         
            -
                            log_output = os.devnull
         
     | 
| 
       298 
293 
     | 
    
         
             
                        if patch_driver:
         
     | 
| 
       299 
294 
     | 
    
         
             
                            service_ = selenium.webdriver.chrome.service.Service(
         
     | 
| 
       300 
295 
     | 
    
         
             
                                executable_path=self.patcher.executable_path,
         
     | 
| 
         @@ -342,7 +337,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       342 
337 
     | 
    
         | 
| 
       343 
338 
     | 
    
         
             
                def _get_cdc_props(self):
         
     | 
| 
       344 
339 
     | 
    
         
             
                    cdc_props = []
         
     | 
| 
       345 
     | 
    
         
            -
                     
     | 
| 
      
 340 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       346 
341 
     | 
    
         
             
                        cdc_props = self.execute_script(
         
     | 
| 
       347 
342 
     | 
    
         
             
                            """
         
     | 
| 
       348 
343 
     | 
    
         
             
                            let objectToInspect = window,
         
     | 
| 
         @@ -355,8 +350,6 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       355 
350 
     | 
    
         
             
                            return result.filter(i => i.match(/^[a-z]{3}_[a-z]{22}_.*/i))
         
     | 
| 
       356 
351 
     | 
    
         
             
                            """
         
     | 
| 
       357 
352 
     | 
    
         
             
                        )
         
     | 
| 
       358 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       359 
     | 
    
         
            -
                        pass
         
     | 
| 
       360 
353 
     | 
    
         
             
                    return cdc_props
         
     | 
| 
       361 
354 
     | 
    
         | 
| 
       362 
355 
     | 
    
         
             
                def _hook_remove_cdc_props(self, cdc_props):
         
     | 
| 
         @@ -427,50 +420,38 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       427 
420 
     | 
    
         
             
                    - Starts the chromedriver service that runs in the background.
         
     | 
| 
       428 
421 
     | 
    
         
             
                    - Recreates the session."""
         
     | 
| 
       429 
422 
     | 
    
         
             
                    if hasattr(self, "service"):
         
     | 
| 
       430 
     | 
    
         
            -
                         
     | 
| 
      
 423 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       431 
424 
     | 
    
         
             
                            self.service.stop()
         
     | 
| 
       432 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       433 
     | 
    
         
            -
                            pass
         
     | 
| 
       434 
425 
     | 
    
         
             
                        if isinstance(timeout, str):
         
     | 
| 
       435 
426 
     | 
    
         
             
                            if timeout.lower() == "breakpoint":
         
     | 
| 
       436 
427 
     | 
    
         
             
                                breakpoint()  # To continue:
         
     | 
| 
       437 
428 
     | 
    
         
             
                                pass  # Type "c" & press ENTER!
         
     | 
| 
       438 
429 
     | 
    
         
             
                        else:
         
     | 
| 
       439 
430 
     | 
    
         
             
                            time.sleep(timeout)
         
     | 
| 
       440 
     | 
    
         
            -
                         
     | 
| 
      
 431 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       441 
432 
     | 
    
         
             
                            self.service.start()
         
     | 
| 
       442 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       443 
     | 
    
         
            -
                            pass
         
     | 
| 
       444 
433 
     | 
    
         
             
                        time.sleep(0.012)
         
     | 
| 
       445 
     | 
    
         
            -
                     
     | 
| 
      
 434 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       446 
435 
     | 
    
         
             
                        self.start_session()
         
     | 
| 
       447 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       448 
     | 
    
         
            -
                        pass
         
     | 
| 
       449 
436 
     | 
    
         
             
                    time.sleep(0.012)
         
     | 
| 
       450 
437 
     | 
    
         | 
| 
       451 
438 
     | 
    
         
             
                def disconnect(self):
         
     | 
| 
       452 
439 
     | 
    
         
             
                    """Stops the chromedriver service that runs in the background.
         
     | 
| 
       453 
440 
     | 
    
         
             
                    To use driver methods again, you MUST call driver.connect()"""
         
     | 
| 
       454 
441 
     | 
    
         
             
                    if hasattr(self, "service"):
         
     | 
| 
       455 
     | 
    
         
            -
                         
     | 
| 
      
 442 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       456 
443 
     | 
    
         
             
                            self.service.stop()
         
     | 
| 
       457 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       458 
     | 
    
         
            -
                            pass
         
     | 
| 
       459 
444 
     | 
    
         
             
                        time.sleep(0.012)
         
     | 
| 
       460 
445 
     | 
    
         | 
| 
       461 
446 
     | 
    
         
             
                def connect(self):
         
     | 
| 
       462 
447 
     | 
    
         
             
                    """Starts the chromedriver service that runs in the background
         
     | 
| 
       463 
448 
     | 
    
         
             
                    and recreates the session."""
         
     | 
| 
       464 
449 
     | 
    
         
             
                    if hasattr(self, "service"):
         
     | 
| 
       465 
     | 
    
         
            -
                         
     | 
| 
      
 450 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       466 
451 
     | 
    
         
             
                            self.service.start()
         
     | 
| 
       467 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       468 
     | 
    
         
            -
                            pass
         
     | 
| 
       469 
452 
     | 
    
         
             
                        time.sleep(0.012)
         
     | 
| 
       470 
     | 
    
         
            -
                     
     | 
| 
      
 453 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       471 
454 
     | 
    
         
             
                        self.start_session()
         
     | 
| 
       472 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       473 
     | 
    
         
            -
                        pass
         
     | 
| 
       474 
455 
     | 
    
         
             
                    time.sleep(0.012)
         
     | 
| 
       475 
456 
     | 
    
         | 
| 
       476 
457 
     | 
    
         
             
                def start_session(self, capabilities=None):
         
     | 
| 
         @@ -496,12 +477,10 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       496 
477 
     | 
    
         
             
                    if hasattr(self, "service") and getattr(self.service, "process", None):
         
     | 
| 
       497 
478 
     | 
    
         
             
                        logger.debug("Stopping webdriver service")
         
     | 
| 
       498 
479 
     | 
    
         
             
                        self.service.stop()
         
     | 
| 
       499 
     | 
    
         
            -
                     
     | 
| 
      
 480 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       500 
481 
     | 
    
         
             
                        if self.reactor and isinstance(self.reactor, Reactor):
         
     | 
| 
       501 
482 
     | 
    
         
             
                            logger.debug("Shutting down Reactor")
         
     | 
| 
       502 
483 
     | 
    
         
             
                            self.reactor.event.set()
         
     | 
| 
       503 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       504 
     | 
    
         
            -
                        pass
         
     | 
| 
       505 
484 
     | 
    
         
             
                    if (
         
     | 
| 
       506 
485 
     | 
    
         
             
                        hasattr(self, "keep_user_data_dir")
         
     | 
| 
       507 
486 
     | 
    
         
             
                        and hasattr(self, "user_data_dir")
         
     | 
| 
         @@ -530,18 +509,14 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver): 
     | 
|
| 
       530 
509 
     | 
    
         
             
                    self.patcher = None
         
     | 
| 
       531 
510 
     | 
    
         | 
| 
       532 
511 
     | 
    
         
             
                def __del__(self):
         
     | 
| 
       533 
     | 
    
         
            -
                     
     | 
| 
      
 512 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       534 
513 
     | 
    
         
             
                        if "win32" in sys.platform:
         
     | 
| 
       535 
514 
     | 
    
         
             
                            self.stop_client()
         
     | 
| 
       536 
515 
     | 
    
         
             
                            self.command_executor.close()
         
     | 
| 
       537 
516 
     | 
    
         
             
                        else:
         
     | 
| 
       538 
517 
     | 
    
         
             
                            super().quit()
         
     | 
| 
       539 
     | 
    
         
            -
                     
     | 
| 
       540 
     | 
    
         
            -
                        pass
         
     | 
| 
       541 
     | 
    
         
            -
                    try:
         
     | 
| 
      
 518 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       542 
519 
     | 
    
         
             
                        self.quit()
         
     | 
| 
       543 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       544 
     | 
    
         
            -
                        pass
         
     | 
| 
       545 
520 
     | 
    
         | 
| 
       546 
521 
     | 
    
         
             
                def __enter__(self):
         
     | 
| 
       547 
522 
     | 
    
         
             
                    return self
         
     | 
| 
         @@ -3,7 +3,10 @@ import os 
     | 
|
| 
       3 
3 
     | 
    
         
             
            import sys
         
     | 
| 
       4 
4 
     | 
    
         
             
            import atexit
         
     | 
| 
       5 
5 
     | 
    
         
             
            import logging
         
     | 
| 
      
 6 
     | 
    
         
            +
            import platform
         
     | 
| 
      
 7 
     | 
    
         
            +
            from contextlib import suppress
         
     | 
| 
       6 
8 
     | 
    
         
             
            from subprocess import PIPE
         
     | 
| 
      
 9 
     | 
    
         
            +
            from subprocess import Popen
         
     | 
| 
       7 
10 
     | 
    
         | 
| 
       8 
11 
     | 
    
         
             
            CREATE_NEW_PROCESS_GROUP = 0x00000200
         
     | 
| 
       9 
12 
     | 
    
         
             
            DETACHED_PROCESS = 0x00000008
         
     | 
| 
         @@ -37,9 +40,6 @@ def start_detached(executable, *args): 
     | 
|
| 
       37 
40 
     | 
    
         
             
            def _start_detached(executable, *args, writer=None):
         
     | 
| 
       38 
41 
     | 
    
         
             
                # Configure Launch
         
     | 
| 
       39 
42 
     | 
    
         
             
                kwargs = {}
         
     | 
| 
       40 
     | 
    
         
            -
                import platform
         
     | 
| 
       41 
     | 
    
         
            -
                from subprocess import Popen
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
43 
     | 
    
         
             
                if platform.system() == "Windows":
         
     | 
| 
       44 
44 
     | 
    
         
             
                    kwargs.update(
         
     | 
| 
       45 
45 
     | 
    
         
             
                        creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP
         
     | 
| 
         @@ -58,11 +58,9 @@ def _cleanup(): 
     | 
|
| 
       58 
58 
     | 
    
         
             
                import signal
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
                for pid in REGISTERED:
         
     | 
| 
       61 
     | 
    
         
            -
                     
     | 
| 
      
 61 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       62 
62 
     | 
    
         
             
                        logging.getLogger(__name__).debug("cleaning up pid %d " % pid)
         
     | 
| 
       63 
63 
     | 
    
         
             
                        os.kill(pid, signal.SIGTERM)
         
     | 
| 
       64 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       65 
     | 
    
         
            -
                        pass
         
     | 
| 
       66 
64 
     | 
    
         | 
| 
       67 
65 
     | 
    
         | 
| 
       68 
66 
     | 
    
         
             
            atexit.register(_cleanup)
         
     | 
| 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #!/usr/bin/env python3
         
     | 
| 
       2 
2 
     | 
    
         
             
            import json
         
     | 
| 
       3 
3 
     | 
    
         
             
            import os
         
     | 
| 
      
 4 
     | 
    
         
            +
            from contextlib import suppress
         
     | 
| 
       4 
5 
     | 
    
         
             
            from selenium.webdriver.chromium.options import ChromiumOptions
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         | 
| 
         @@ -49,7 +50,7 @@ class ChromeOptions(ChromiumOptions): 
     | 
|
| 
       49 
50 
     | 
    
         
             
                                undot_prefs, self._undot_key(key, value)
         
     | 
| 
       50 
51 
     | 
    
         
             
                            )
         
     | 
| 
       51 
52 
     | 
    
         
             
                        prefs_file = os.path.join(default_path, "Preferences")
         
     | 
| 
       52 
     | 
    
         
            -
                         
     | 
| 
      
 53 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       53 
54 
     | 
    
         
             
                            if os.path.exists(prefs_file):
         
     | 
| 
       54 
55 
     | 
    
         
             
                                with open(
         
     | 
| 
       55 
56 
     | 
    
         
             
                                    prefs_file, encoding="utf-8", mode="r", errors="ignore"
         
     | 
| 
         @@ -57,13 +58,9 @@ class ChromeOptions(ChromiumOptions): 
     | 
|
| 
       57 
58 
     | 
    
         
             
                                    undot_prefs = self._merge_nested(
         
     | 
| 
       58 
59 
     | 
    
         
             
                                        json.load(f), undot_prefs
         
     | 
| 
       59 
60 
     | 
    
         
             
                                    )
         
     | 
| 
       60 
     | 
    
         
            -
                         
     | 
| 
       61 
     | 
    
         
            -
                            pass
         
     | 
| 
       62 
     | 
    
         
            -
                        try:
         
     | 
| 
      
 61 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       63 
62 
     | 
    
         
             
                            with open(prefs_file, encoding="utf-8", mode="w") as f:
         
     | 
| 
       64 
63 
     | 
    
         
             
                                json.dump(undot_prefs, f)
         
     | 
| 
       65 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       66 
     | 
    
         
            -
                            pass
         
     | 
| 
       67 
64 
     | 
    
         
             
                        # Remove experimental_options to avoid errors
         
     | 
| 
       68 
65 
     | 
    
         
             
                        del self._experimental_options["prefs"]
         
     | 
| 
       69 
66 
     | 
    
         
             
                    exclude_switches = self.experimental_options.get("excludeSwitches")
         
     | 
| 
         @@ -8,6 +8,7 @@ import string 
     | 
|
| 
       8 
8 
     | 
    
         
             
            import sys
         
     | 
| 
       9 
9 
     | 
    
         
             
            import time
         
     | 
| 
       10 
10 
     | 
    
         
             
            import zipfile
         
     | 
| 
      
 11 
     | 
    
         
            +
            from contextlib import suppress
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            logger = logging.getLogger(__name__)
         
     | 
| 
       13 
14 
     | 
    
         
             
            IS_POSIX = sys.platform.startswith(("darwin", "cygwin", "linux"))
         
     | 
| 
         @@ -53,10 +54,8 @@ class Patcher(object): 
     | 
|
| 
       53 
54 
     | 
    
         
             
                    self.executable_path = None
         
     | 
| 
       54 
55 
     | 
    
         
             
                    prefix = "undetected"
         
     | 
| 
       55 
56 
     | 
    
         
             
                    if not os.path.exists(self.data_path):
         
     | 
| 
       56 
     | 
    
         
            -
                         
     | 
| 
      
 57 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       57 
58 
     | 
    
         
             
                            os.makedirs(self.data_path, exist_ok=True)
         
     | 
| 
       58 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       59 
     | 
    
         
            -
                            pass
         
     | 
| 
       60 
59 
     | 
    
         
             
                    if not executable_path:
         
     | 
| 
       61 
60 
     | 
    
         
             
                        self.executable_path = os.path.join(
         
     | 
| 
       62 
61 
     | 
    
         
             
                            self.data_path, "_".join([prefix, self.exe_name])
         
     | 
| 
         @@ -1,18 +1,20 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Metadata-Version: 2.1
         
     | 
| 
       2 
2 
     | 
    
         
             
            Name: seleniumbase
         
     | 
| 
       3 
     | 
    
         
            -
            Version: 4. 
     | 
| 
      
 3 
     | 
    
         
            +
            Version: 4.31.0
         
     | 
| 
       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 
     | 
    
         
             
            Keywords: pytest,selenium,framework,automation,browser,testing,webdriver,seleniumbase,sbase,crawling,scraping
         
     | 
| 
       18 
20 
     | 
    
         
             
            Platform: Windows
         
     | 
| 
         @@ -32,7 +34,6 @@ Classifier: Operating System :: Microsoft :: Windows 
     | 
|
| 
       32 
34 
     | 
    
         
             
            Classifier: Operating System :: POSIX :: Linux
         
     | 
| 
       33 
35 
     | 
    
         
             
            Classifier: Programming Language :: Python
         
     | 
| 
       34 
36 
     | 
    
         
             
            Classifier: Programming Language :: Python :: 3
         
     | 
| 
       35 
     | 
    
         
            -
            Classifier: Programming Language :: Python :: 3.7
         
     | 
| 
       36 
37 
     | 
    
         
             
            Classifier: Programming Language :: Python :: 3.8
         
     | 
| 
       37 
38 
     | 
    
         
             
            Classifier: Programming Language :: Python :: 3.9
         
     | 
| 
       38 
39 
     | 
    
         
             
            Classifier: Programming Language :: Python :: 3.10
         
     | 
| 
         @@ -55,142 +56,124 @@ Classifier: Topic :: Software Development :: Testing 
     | 
|
| 
       55 
56 
     | 
    
         
             
            Classifier: Topic :: Software Development :: Testing :: Acceptance
         
     | 
| 
       56 
57 
     | 
    
         
             
            Classifier: Topic :: Software Development :: Testing :: Traffic Generation
         
     | 
| 
       57 
58 
     | 
    
         
             
            Classifier: Topic :: Utilities
         
     | 
| 
       58 
     | 
    
         
            -
            Requires-Python: >=3. 
     | 
| 
      
 59 
     | 
    
         
            +
            Requires-Python: >=3.8
         
     | 
| 
       59 
60 
     | 
    
         
             
            Description-Content-Type: text/markdown
         
     | 
| 
       60 
61 
     | 
    
         
             
            License-File: LICENSE
         
     | 
| 
       61 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       62 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       63 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       64 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       65 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       66 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       67 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       68 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       69 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       70 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       71 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       72 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       73 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       74 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       75 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       76 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       77 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       78 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       79 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       80 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       81 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       82 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       83 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       84 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       85 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       86 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       87 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       88 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       89 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       90 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       91 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       92 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       93 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       94 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       95 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       96 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       97 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       98 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       99 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       100 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       101 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       102 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       103 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       104 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       105 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       106 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       107 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       108 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       109 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       110 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       111 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       112 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       113 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       114 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       115 
     | 
    
         
            -
            Requires-Dist: setuptools 
     | 
| 
       116 
     | 
    
         
            -
            Requires-Dist: urllib3 
     | 
| 
       117 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       118 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       119 
     | 
    
         
            -
            Requires-Dist: wheel >=0.44.0 ; python_version >= "3.8"
         
     | 
| 
       120 
     | 
    
         
            -
            Requires-Dist: filelock >=3.16.0 ; python_version >= "3.8"
         
     | 
| 
       121 
     | 
    
         
            -
            Requires-Dist: platformdirs >=4.3.2 ; python_version >= "3.8"
         
     | 
| 
       122 
     | 
    
         
            -
            Requires-Dist: typing-extensions >=4.12.2 ; python_version >= "3.8"
         
     | 
| 
       123 
     | 
    
         
            -
            Requires-Dist: pyyaml >=6.0.2 ; python_version >= "3.8"
         
     | 
| 
       124 
     | 
    
         
            -
            Requires-Dist: trio ==0.26.2 ; python_version >= "3.8"
         
     | 
| 
       125 
     | 
    
         
            -
            Requires-Dist: websocket-client ==1.8.0 ; python_version >= "3.8"
         
     | 
| 
       126 
     | 
    
         
            -
            Requires-Dist: selenium ==4.24.0 ; python_version >= "3.8"
         
     | 
| 
       127 
     | 
    
         
            -
            Requires-Dist: execnet ==2.1.1 ; python_version >= "3.8"
         
     | 
| 
       128 
     | 
    
         
            -
            Requires-Dist: pluggy ==1.5.0 ; python_version >= "3.8"
         
     | 
| 
       129 
     | 
    
         
            -
            Requires-Dist: pytest ==8.3.3 ; python_version >= "3.8"
         
     | 
| 
       130 
     | 
    
         
            -
            Requires-Dist: pytest-metadata ==3.1.1 ; python_version >= "3.8"
         
     | 
| 
       131 
     | 
    
         
            -
            Requires-Dist: pytest-rerunfailures ==14.0 ; python_version >= "3.8"
         
     | 
| 
       132 
     | 
    
         
            -
            Requires-Dist: pytest-xdist ==3.6.1 ; python_version >= "3.8"
         
     | 
| 
       133 
     | 
    
         
            -
            Requires-Dist: soupsieve ==2.6 ; python_version >= "3.8"
         
     | 
| 
       134 
     | 
    
         
            -
            Requires-Dist: pygments ==2.18.0 ; python_version >= "3.8"
         
     | 
| 
       135 
     | 
    
         
            -
            Requires-Dist: markdown-it-py ==3.0.0 ; python_version >= "3.8"
         
     | 
| 
       136 
     | 
    
         
            -
            Requires-Dist: setuptools ~=70.2 ; python_version >= "3.8" and python_version < "3.10"
         
     | 
| 
      
 62 
     | 
    
         
            +
            Requires-Dist: pip>=24.1.2
         
     | 
| 
      
 63 
     | 
    
         
            +
            Requires-Dist: packaging>=24.1
         
     | 
| 
      
 64 
     | 
    
         
            +
            Requires-Dist: wheel>=0.44.0
         
     | 
| 
      
 65 
     | 
    
         
            +
            Requires-Dist: attrs>=24.2.0
         
     | 
| 
      
 66 
     | 
    
         
            +
            Requires-Dist: certifi>=2024.8.30
         
     | 
| 
      
 67 
     | 
    
         
            +
            Requires-Dist: exceptiongroup>=1.2.2
         
     | 
| 
      
 68 
     | 
    
         
            +
            Requires-Dist: filelock>=3.16.1
         
     | 
| 
      
 69 
     | 
    
         
            +
            Requires-Dist: fasteners>=0.19
         
     | 
| 
      
 70 
     | 
    
         
            +
            Requires-Dist: pynose>=1.5.3
         
     | 
| 
      
 71 
     | 
    
         
            +
            Requires-Dist: platformdirs>=4.3.6
         
     | 
| 
      
 72 
     | 
    
         
            +
            Requires-Dist: typing-extensions>=4.12.2
         
     | 
| 
      
 73 
     | 
    
         
            +
            Requires-Dist: sbvirtualdisplay>=1.3.0
         
     | 
| 
      
 74 
     | 
    
         
            +
            Requires-Dist: six>=1.16.0
         
     | 
| 
      
 75 
     | 
    
         
            +
            Requires-Dist: parse>=1.20.2
         
     | 
| 
      
 76 
     | 
    
         
            +
            Requires-Dist: parse-type>=0.6.3
         
     | 
| 
      
 77 
     | 
    
         
            +
            Requires-Dist: colorama>=0.4.6
         
     | 
| 
      
 78 
     | 
    
         
            +
            Requires-Dist: pyyaml>=6.0.2
         
     | 
| 
      
 79 
     | 
    
         
            +
            Requires-Dist: pygments>=2.18.0
         
     | 
| 
      
 80 
     | 
    
         
            +
            Requires-Dist: tabcompleter>=1.3.3
         
     | 
| 
      
 81 
     | 
    
         
            +
            Requires-Dist: pdbp>=1.5.4
         
     | 
| 
      
 82 
     | 
    
         
            +
            Requires-Dist: idna==3.10
         
     | 
| 
      
 83 
     | 
    
         
            +
            Requires-Dist: chardet==5.2.0
         
     | 
| 
      
 84 
     | 
    
         
            +
            Requires-Dist: charset-normalizer==3.3.2
         
     | 
| 
      
 85 
     | 
    
         
            +
            Requires-Dist: requests==2.31.0
         
     | 
| 
      
 86 
     | 
    
         
            +
            Requires-Dist: sniffio==1.3.1
         
     | 
| 
      
 87 
     | 
    
         
            +
            Requires-Dist: h11==0.14.0
         
     | 
| 
      
 88 
     | 
    
         
            +
            Requires-Dist: outcome==1.3.0.post0
         
     | 
| 
      
 89 
     | 
    
         
            +
            Requires-Dist: trio==0.26.2
         
     | 
| 
      
 90 
     | 
    
         
            +
            Requires-Dist: trio-websocket==0.11.1
         
     | 
| 
      
 91 
     | 
    
         
            +
            Requires-Dist: wsproto==1.2.0
         
     | 
| 
      
 92 
     | 
    
         
            +
            Requires-Dist: websocket-client==1.8.0
         
     | 
| 
      
 93 
     | 
    
         
            +
            Requires-Dist: selenium==4.25.0
         
     | 
| 
      
 94 
     | 
    
         
            +
            Requires-Dist: cssselect==1.2.0
         
     | 
| 
      
 95 
     | 
    
         
            +
            Requires-Dist: sortedcontainers==2.4.0
         
     | 
| 
      
 96 
     | 
    
         
            +
            Requires-Dist: execnet==2.1.1
         
     | 
| 
      
 97 
     | 
    
         
            +
            Requires-Dist: iniconfig==2.0.0
         
     | 
| 
      
 98 
     | 
    
         
            +
            Requires-Dist: pluggy==1.5.0
         
     | 
| 
      
 99 
     | 
    
         
            +
            Requires-Dist: py==1.11.0
         
     | 
| 
      
 100 
     | 
    
         
            +
            Requires-Dist: pytest==8.3.3
         
     | 
| 
      
 101 
     | 
    
         
            +
            Requires-Dist: pytest-html==2.0.1
         
     | 
| 
      
 102 
     | 
    
         
            +
            Requires-Dist: pytest-metadata==3.1.1
         
     | 
| 
      
 103 
     | 
    
         
            +
            Requires-Dist: pytest-ordering==0.6
         
     | 
| 
      
 104 
     | 
    
         
            +
            Requires-Dist: pytest-rerunfailures==14.0
         
     | 
| 
      
 105 
     | 
    
         
            +
            Requires-Dist: pytest-xdist==3.6.1
         
     | 
| 
      
 106 
     | 
    
         
            +
            Requires-Dist: parameterized==0.9.0
         
     | 
| 
      
 107 
     | 
    
         
            +
            Requires-Dist: behave==1.2.6
         
     | 
| 
      
 108 
     | 
    
         
            +
            Requires-Dist: soupsieve==2.6
         
     | 
| 
      
 109 
     | 
    
         
            +
            Requires-Dist: beautifulsoup4==4.12.3
         
     | 
| 
      
 110 
     | 
    
         
            +
            Requires-Dist: pyotp==2.9.0
         
     | 
| 
      
 111 
     | 
    
         
            +
            Requires-Dist: markdown-it-py==3.0.0
         
     | 
| 
      
 112 
     | 
    
         
            +
            Requires-Dist: mdurl==0.1.2
         
     | 
| 
      
 113 
     | 
    
         
            +
            Requires-Dist: rich==13.8.1
         
     | 
| 
      
 114 
     | 
    
         
            +
            Requires-Dist: python-xlib==0.33; platform_system == "Linux"
         
     | 
| 
      
 115 
     | 
    
         
            +
            Requires-Dist: pyreadline3>=3.5.3; platform_system == "Windows"
         
     | 
| 
      
 116 
     | 
    
         
            +
            Requires-Dist: setuptools~=70.2; python_version < "3.10"
         
     | 
| 
      
 117 
     | 
    
         
            +
            Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
         
     | 
| 
      
 118 
     | 
    
         
            +
            Requires-Dist: setuptools>=70.2.0; python_version >= "3.10"
         
     | 
| 
      
 119 
     | 
    
         
            +
            Requires-Dist: urllib3<2.3.0,>=1.26.20; python_version >= "3.10"
         
     | 
| 
       137 
120 
     | 
    
         
             
            Provides-Extra: allure
         
     | 
| 
       138 
     | 
    
         
            -
            Requires-Dist: allure-pytest 
     | 
| 
       139 
     | 
    
         
            -
            Requires-Dist: allure-python-commons 
     | 
| 
       140 
     | 
    
         
            -
            Requires-Dist: allure-behave 
     | 
| 
      
 121 
     | 
    
         
            +
            Requires-Dist: allure-pytest>=2.13.5; extra == "allure"
         
     | 
| 
      
 122 
     | 
    
         
            +
            Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
         
     | 
| 
      
 123 
     | 
    
         
            +
            Requires-Dist: allure-behave>=2.13.5; extra == "allure"
         
     | 
| 
       141 
124 
     | 
    
         
             
            Provides-Extra: coverage
         
     | 
| 
       142 
     | 
    
         
            -
            Requires-Dist: coverage 
     | 
| 
       143 
     | 
    
         
            -
            Requires-Dist: pytest-cov 
     | 
| 
       144 
     | 
    
         
            -
            Requires-Dist: coverage >=7.6.1 ; (python_version >= "3.8") and extra == 'coverage'
         
     | 
| 
       145 
     | 
    
         
            -
            Requires-Dist: pytest-cov >=5.0.0 ; (python_version >= "3.8") and extra == 'coverage'
         
     | 
| 
      
 125 
     | 
    
         
            +
            Requires-Dist: coverage>=7.6.1; extra == "coverage"
         
     | 
| 
      
 126 
     | 
    
         
            +
            Requires-Dist: pytest-cov>=5.0.0; extra == "coverage"
         
     | 
| 
       146 
127 
     | 
    
         
             
            Provides-Extra: flake8
         
     | 
| 
       147 
     | 
    
         
            -
            Requires-Dist: mccabe 
     | 
| 
       148 
     | 
    
         
            -
            Requires-Dist: flake8 
     | 
| 
       149 
     | 
    
         
            -
            Requires-Dist: pyflakes 
     | 
| 
       150 
     | 
    
         
            -
            Requires-Dist: pycodestyle 
     | 
| 
       151 
     | 
    
         
            -
            Requires-Dist: flake8 
     | 
| 
       152 
     | 
    
         
            -
            Requires-Dist: pyflakes 
     | 
| 
       153 
     | 
    
         
            -
            Requires-Dist: pycodestyle 
     | 
| 
      
 128 
     | 
    
         
            +
            Requires-Dist: mccabe==0.7.0; extra == "flake8"
         
     | 
| 
      
 129 
     | 
    
         
            +
            Requires-Dist: flake8==5.0.4; python_version < "3.9" and extra == "flake8"
         
     | 
| 
      
 130 
     | 
    
         
            +
            Requires-Dist: pyflakes==2.5.0; python_version < "3.9" and extra == "flake8"
         
     | 
| 
      
 131 
     | 
    
         
            +
            Requires-Dist: pycodestyle==2.9.1; python_version < "3.9" and extra == "flake8"
         
     | 
| 
      
 132 
     | 
    
         
            +
            Requires-Dist: flake8==7.1.1; python_version >= "3.9" and extra == "flake8"
         
     | 
| 
      
 133 
     | 
    
         
            +
            Requires-Dist: pyflakes==3.2.0; python_version >= "3.9" and extra == "flake8"
         
     | 
| 
      
 134 
     | 
    
         
            +
            Requires-Dist: pycodestyle==2.12.1; python_version >= "3.9" and extra == "flake8"
         
     | 
| 
       154 
135 
     | 
    
         
             
            Provides-Extra: ipdb
         
     | 
| 
       155 
     | 
    
         
            -
            Requires-Dist: ipdb 
     | 
| 
       156 
     | 
    
         
            -
            Requires-Dist: ipython 
     | 
| 
      
 136 
     | 
    
         
            +
            Requires-Dist: ipdb==0.13.13; extra == "ipdb"
         
     | 
| 
      
 137 
     | 
    
         
            +
            Requires-Dist: ipython==7.34.0; extra == "ipdb"
         
     | 
| 
       157 
138 
     | 
    
         
             
            Provides-Extra: pdfminer
         
     | 
| 
       158 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       159 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       160 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       161 
     | 
    
         
            -
            Requires-Dist: cryptography 
     | 
| 
       162 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       163 
     | 
    
         
            -
            Requires-Dist: cffi ==1.17.1 ; (python_version >= "3.8") and extra == 'pdfminer'
         
     | 
| 
       164 
     | 
    
         
            -
            Requires-Dist: cryptography ==43.0.1 ; (python_version >= "3.9") and extra == 'pdfminer'
         
     | 
| 
      
 139 
     | 
    
         
            +
            Requires-Dist: pdfminer.six==20240706; extra == "pdfminer"
         
     | 
| 
      
 140 
     | 
    
         
            +
            Requires-Dist: cffi==1.17.1; extra == "pdfminer"
         
     | 
| 
      
 141 
     | 
    
         
            +
            Requires-Dist: pycparser==2.22; extra == "pdfminer"
         
     | 
| 
      
 142 
     | 
    
         
            +
            Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
         
     | 
| 
      
 143 
     | 
    
         
            +
            Requires-Dist: cryptography==43.0.1; python_version >= "3.9" and extra == "pdfminer"
         
     | 
| 
       165 
144 
     | 
    
         
             
            Provides-Extra: pillow
         
     | 
| 
       166 
     | 
    
         
            -
            Requires-Dist: Pillow 
     | 
| 
       167 
     | 
    
         
            -
            Requires-Dist: Pillow >=10.4.0 ; (python_version >= "3.8") and extra == 'pillow'
         
     | 
| 
      
 145 
     | 
    
         
            +
            Requires-Dist: Pillow>=10.4.0; extra == "pillow"
         
     | 
| 
       168 
146 
     | 
    
         
             
            Provides-Extra: pip-system-certs
         
     | 
| 
       169 
     | 
    
         
            -
            Requires-Dist: pip-system-certs 
     | 
| 
      
 147 
     | 
    
         
            +
            Requires-Dist: pip-system-certs==4.0; platform_system == "Windows" and extra == "pip-system-certs"
         
     | 
| 
       170 
148 
     | 
    
         
             
            Provides-Extra: proxy
         
     | 
| 
       171 
     | 
    
         
            -
            Requires-Dist: proxy.py 
     | 
| 
      
 149 
     | 
    
         
            +
            Requires-Dist: proxy.py==2.4.3; extra == "proxy"
         
     | 
| 
       172 
150 
     | 
    
         
             
            Provides-Extra: psutil
         
     | 
| 
       173 
     | 
    
         
            -
            Requires-Dist: psutil 
     | 
| 
      
 151 
     | 
    
         
            +
            Requires-Dist: psutil==6.0.0; extra == "psutil"
         
     | 
| 
       174 
152 
     | 
    
         
             
            Provides-Extra: pyautogui
         
     | 
| 
       175 
     | 
    
         
            -
            Requires-Dist: PyAutoGUI 
     | 
| 
      
 153 
     | 
    
         
            +
            Requires-Dist: PyAutoGUI==0.9.54; extra == "pyautogui"
         
     | 
| 
       176 
154 
     | 
    
         
             
            Provides-Extra: selenium-stealth
         
     | 
| 
       177 
     | 
    
         
            -
            Requires-Dist: selenium-stealth 
     | 
| 
      
 155 
     | 
    
         
            +
            Requires-Dist: selenium-stealth==1.0.6; extra == "selenium-stealth"
         
     | 
| 
       178 
156 
     | 
    
         
             
            Provides-Extra: selenium-wire
         
     | 
| 
       179 
     | 
    
         
            -
            Requires-Dist: selenium-wire 
     | 
| 
       180 
     | 
    
         
            -
            Requires-Dist: pyOpenSSL 
     | 
| 
       181 
     | 
    
         
            -
            Requires-Dist: pyparsing 
     | 
| 
       182 
     | 
    
         
            -
            Requires-Dist: Brotli 
     | 
| 
       183 
     | 
    
         
            -
            Requires-Dist: blinker 
     | 
| 
       184 
     | 
    
         
            -
            Requires-Dist: h2 
     | 
| 
       185 
     | 
    
         
            -
            Requires-Dist: hpack 
     | 
| 
       186 
     | 
    
         
            -
            Requires-Dist: hyperframe 
     | 
| 
       187 
     | 
    
         
            -
            Requires-Dist: kaitaistruct 
     | 
| 
       188 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       189 
     | 
    
         
            -
            Requires-Dist:  
     | 
| 
       190 
     | 
    
         
            -
            Requires-Dist: pyasn1 ==0.6.1 ; (python_version >= "3.8") and extra == 'selenium-wire'
         
     | 
| 
      
 157 
     | 
    
         
            +
            Requires-Dist: selenium-wire==5.1.0; extra == "selenium-wire"
         
     | 
| 
      
 158 
     | 
    
         
            +
            Requires-Dist: pyOpenSSL==24.2.1; extra == "selenium-wire"
         
     | 
| 
      
 159 
     | 
    
         
            +
            Requires-Dist: pyparsing>=3.1.4; extra == "selenium-wire"
         
     | 
| 
      
 160 
     | 
    
         
            +
            Requires-Dist: Brotli==1.1.0; extra == "selenium-wire"
         
     | 
| 
      
 161 
     | 
    
         
            +
            Requires-Dist: blinker==1.7.0; extra == "selenium-wire"
         
     | 
| 
      
 162 
     | 
    
         
            +
            Requires-Dist: h2==4.1.0; extra == "selenium-wire"
         
     | 
| 
      
 163 
     | 
    
         
            +
            Requires-Dist: hpack==4.0.0; extra == "selenium-wire"
         
     | 
| 
      
 164 
     | 
    
         
            +
            Requires-Dist: hyperframe==6.0.1; extra == "selenium-wire"
         
     | 
| 
      
 165 
     | 
    
         
            +
            Requires-Dist: kaitaistruct==0.10; extra == "selenium-wire"
         
     | 
| 
      
 166 
     | 
    
         
            +
            Requires-Dist: pyasn1==0.6.1; extra == "selenium-wire"
         
     | 
| 
      
 167 
     | 
    
         
            +
            Requires-Dist: zstandard==0.23.0; extra == "selenium-wire"
         
     | 
| 
       191 
168 
     | 
    
         | 
| 
       192 
169 
     | 
    
         
             
            <!-- SeleniumBase Docs -->
         
     | 
| 
       193 
170 
     | 
    
         | 
| 
      
 171 
     | 
    
         
            +
            <meta property="og:site_name" content="SeleniumBase">
         
     | 
| 
      
 172 
     | 
    
         
            +
            <meta property="og:title" content="SeleniumBase: Python Web Automation and E2E Testing" />
         
     | 
| 
      
 173 
     | 
    
         
            +
            <meta property="og:description" content="Fast, easy, and reliable Web/UI testing with Python." />
         
     | 
| 
      
 174 
     | 
    
         
            +
            <meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots">
         
     | 
| 
      
 175 
     | 
    
         
            +
            <meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
         
     | 
| 
      
 176 
     | 
    
         
            +
            <link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
         
     | 
| 
       194 
177 
     | 
    
         | 
| 
       195 
178 
     | 
    
         
             
            <h1>SeleniumBase</h1>
         
     | 
| 
       196 
179 
     | 
    
         | 
| 
         @@ -842,6 +825,7 @@ pytest test_coffee_cart.py --trace 
     | 
|
| 
       842 
825 
     | 
    
         
             
            --headless2  # (Use the new headless mode, which supports extensions.)
         
     | 
| 
       843 
826 
     | 
    
         
             
            --headed  # (Run tests in headed/GUI mode on Linux OS, where not default.)
         
     | 
| 
       844 
827 
     | 
    
         
             
            --xvfb  # (Run tests using the Xvfb virtual display server on Linux OS.)
         
     | 
| 
      
 828 
     | 
    
         
            +
            --xvfb-metrics=STRING  # (Set Xvfb display size on Linux: "Width,Height".)
         
     | 
| 
       845 
829 
     | 
    
         
             
            --locale=LOCALE_CODE  # (Set the Language Locale Code for the web browser.)
         
     | 
| 
       846 
830 
     | 
    
         
             
            --interval=SECONDS  # (The autoplay interval for presentations & tour steps)
         
     | 
| 
       847 
831 
     | 
    
         
             
            --start-page=URL  # (The starting URL for the web browser when tests begin.)
         
     | 
| 
         @@ -886,6 +870,7 @@ pytest test_coffee_cart.py --trace 
     | 
|
| 
       886 
870 
     | 
    
         
             
            --rcs | --reuse-class-session  # (Reuse session for tests in class.)
         
     | 
| 
       887 
871 
     | 
    
         
             
            --crumbs  # (Delete all cookies between tests reusing a session.)
         
     | 
| 
       888 
872 
     | 
    
         
             
            --disable-beforeunload  # (Disable the "beforeunload" event on Chrome.)
         
     | 
| 
      
 873 
     | 
    
         
            +
            --window-position=X,Y  # (Set the browser's starting window position.)
         
     | 
| 
       889 
874 
     | 
    
         
             
            --window-size=WIDTH,HEIGHT  # (Set the browser's starting window size.)
         
     | 
| 
       890 
875 
     | 
    
         
             
            --maximize  # (Start tests with the browser window maximized.)
         
     | 
| 
       891 
876 
     | 
    
         
             
            --screenshot  # (Save a screenshot at the end of each test.)
         
     | 
| 
         @@ -1054,7 +1039,7 @@ pytest test_suite.py --dashboard --html=report.html 
     | 
|
| 
       1054 
1039 
     | 
    
         | 
| 
       1055 
1040 
     | 
    
         
             
            <img src="https://seleniumbase.github.io/cdn/img/dash_report.jpg" alt="Dashboard Pytest HTML Report" title="Dashboard Pytest HTML Report" width="520" />
         
     | 
| 
       1056 
1041 
     | 
    
         | 
| 
       1057 
     | 
    
         
            -
            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/).
         
     | 
| 
      
 1042 
     | 
    
         
            +
            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/).
         
     | 
| 
       1058 
1043 
     | 
    
         | 
| 
       1059 
1044 
     | 
    
         
             
            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.
         
     | 
| 
       1060 
1045 
     | 
    
         |