seleniumbase 4.24.11__py3-none-any.whl → 4.33.15__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
 - sbase/steps.py +7 -0
 - seleniumbase/__init__.py +16 -7
 - seleniumbase/__version__.py +1 -1
 - seleniumbase/behave/behave_sb.py +97 -32
 - seleniumbase/common/decorators.py +16 -7
 - seleniumbase/config/proxy_list.py +3 -3
 - seleniumbase/config/settings.py +4 -0
 - seleniumbase/console_scripts/logo_helper.py +47 -8
 - seleniumbase/console_scripts/run.py +345 -335
 - seleniumbase/console_scripts/sb_behave_gui.py +5 -12
 - seleniumbase/console_scripts/sb_caseplans.py +6 -13
 - seleniumbase/console_scripts/sb_commander.py +5 -12
 - seleniumbase/console_scripts/sb_install.py +62 -54
 - seleniumbase/console_scripts/sb_mkchart.py +13 -20
 - seleniumbase/console_scripts/sb_mkdir.py +11 -17
 - seleniumbase/console_scripts/sb_mkfile.py +69 -43
 - seleniumbase/console_scripts/sb_mkpres.py +13 -20
 - seleniumbase/console_scripts/sb_mkrec.py +88 -21
 - seleniumbase/console_scripts/sb_objectify.py +30 -30
 - seleniumbase/console_scripts/sb_print.py +5 -12
 - seleniumbase/console_scripts/sb_recorder.py +16 -11
 - seleniumbase/core/browser_launcher.py +1658 -221
 - seleniumbase/core/log_helper.py +42 -27
 - seleniumbase/core/mysql.py +1 -4
 - seleniumbase/core/proxy_helper.py +35 -30
 - seleniumbase/core/recorder_helper.py +24 -5
 - seleniumbase/core/sb_cdp.py +1951 -0
 - seleniumbase/core/sb_driver.py +162 -8
 - seleniumbase/core/settings_parser.py +6 -0
 - seleniumbase/core/style_sheet.py +10 -0
 - seleniumbase/extensions/recorder.zip +0 -0
 - seleniumbase/fixtures/base_case.py +1225 -614
 - seleniumbase/fixtures/constants.py +10 -1
 - seleniumbase/fixtures/js_utils.py +171 -144
 - seleniumbase/fixtures/page_actions.py +177 -13
 - seleniumbase/fixtures/page_utils.py +25 -53
 - seleniumbase/fixtures/shared_utils.py +97 -11
 - seleniumbase/js_code/active_css_js.py +1 -1
 - seleniumbase/js_code/recorder_js.py +1 -1
 - seleniumbase/plugins/base_plugin.py +2 -3
 - seleniumbase/plugins/driver_manager.py +340 -65
 - seleniumbase/plugins/pytest_plugin.py +276 -47
 - seleniumbase/plugins/sb_manager.py +412 -99
 - seleniumbase/plugins/selenium_plugin.py +122 -17
 - seleniumbase/translate/translator.py +0 -7
 - seleniumbase/undetected/__init__.py +59 -52
 - seleniumbase/undetected/cdp.py +0 -1
 - seleniumbase/undetected/cdp_driver/__init__.py +1 -0
 - seleniumbase/undetected/cdp_driver/_contradict.py +110 -0
 - seleniumbase/undetected/cdp_driver/browser.py +829 -0
 - seleniumbase/undetected/cdp_driver/cdp_util.py +458 -0
 - seleniumbase/undetected/cdp_driver/config.py +334 -0
 - seleniumbase/undetected/cdp_driver/connection.py +639 -0
 - seleniumbase/undetected/cdp_driver/element.py +1168 -0
 - seleniumbase/undetected/cdp_driver/tab.py +1323 -0
 - seleniumbase/undetected/dprocess.py +4 -7
 - seleniumbase/undetected/options.py +6 -8
 - seleniumbase/undetected/patcher.py +11 -13
 - seleniumbase/undetected/reactor.py +0 -1
 - seleniumbase/undetected/webelement.py +16 -3
 - {seleniumbase-4.24.11.dist-info → seleniumbase-4.33.15.dist-info}/LICENSE +1 -1
 - {seleniumbase-4.24.11.dist-info → seleniumbase-4.33.15.dist-info}/METADATA +299 -252
 - {seleniumbase-4.24.11.dist-info → seleniumbase-4.33.15.dist-info}/RECORD +67 -69
 - {seleniumbase-4.24.11.dist-info → seleniumbase-4.33.15.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 -731
 - 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.24.11.dist-info → seleniumbase-4.33.15.dist-info}/entry_points.txt +0 -0
 - {seleniumbase-4.24.11.dist-info → seleniumbase-4.33.15.dist-info}/top_level.txt +0 -0
 
| 
         @@ -7,7 +7,7 @@ Usage --> ``with SB() as sb:`` 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            Example -->
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            ```
         
     | 
| 
      
 10 
     | 
    
         
            +
            ```python
         
     | 
| 
       11 
11 
     | 
    
         
             
            from seleniumbase import SB
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            with SB() as sb:  # Many args! Eg. SB(browser="edge")
         
     | 
| 
         @@ -32,8 +32,9 @@ def SB( 
     | 
|
| 
       32 
32 
     | 
    
         
             
                rtf=None,  # Shortcut / Duplicate of "raise_test_failure".
         
     | 
| 
       33 
33 
     | 
    
         
             
                raise_test_failure=None,  # If "test" mode, raise Exception on 1st failure.
         
     | 
| 
       34 
34 
     | 
    
         
             
                browser=None,  # Choose from "chrome", "edge", "firefox", or "safari".
         
     | 
| 
       35 
     | 
    
         
            -
                headless=None,  #  
     | 
| 
       36 
     | 
    
         
            -
                 
     | 
| 
      
 35 
     | 
    
         
            +
                headless=None,  # Use the default headless mode for Chromium and Firefox.
         
     | 
| 
      
 36 
     | 
    
         
            +
                headless1=None,  # Use Chromium's old headless mode. (Fast, but limited)
         
     | 
| 
      
 37 
     | 
    
         
            +
                headless2=None,  # Use Chromium's new headless mode. (Has more features)
         
     | 
| 
       37 
38 
     | 
    
         
             
                locale_code=None,  # Set the Language Locale Code for the web browser.
         
     | 
| 
       38 
39 
     | 
    
         
             
                protocol=None,  # The Selenium Grid protocol: "http" or "https".
         
     | 
| 
       39 
40 
     | 
    
         
             
                servername=None,  # The Selenium Grid server/IP used for tests.
         
     | 
| 
         @@ -41,12 +42,13 @@ def SB( 
     | 
|
| 
       41 
42 
     | 
    
         
             
                proxy=None,  # Use proxy. Format: "SERVER:PORT" or "USER:PASS@SERVER:PORT".
         
     | 
| 
       42 
43 
     | 
    
         
             
                proxy_bypass_list=None,  # Skip proxy when using the listed domains.
         
     | 
| 
       43 
44 
     | 
    
         
             
                proxy_pac_url=None,  # Use PAC file. (Format: URL or USERNAME:PASSWORD@URL)
         
     | 
| 
       44 
     | 
    
         
            -
                multi_proxy= 
     | 
| 
      
 45 
     | 
    
         
            +
                multi_proxy=None,  # Allow multiple proxies with auth when multi-threaded.
         
     | 
| 
       45 
46 
     | 
    
         
             
                agent=None,  # Modify the web browser's User-Agent string.
         
     | 
| 
       46 
47 
     | 
    
         
             
                cap_file=None,  # The desired capabilities to use with a Selenium Grid.
         
     | 
| 
       47 
48 
     | 
    
         
             
                cap_string=None,  # The desired capabilities to use with a Selenium Grid.
         
     | 
| 
       48 
49 
     | 
    
         
             
                recorder_ext=None,  # Enables the SeleniumBase Recorder Chromium extension.
         
     | 
| 
       49 
     | 
    
         
            -
                 
     | 
| 
      
 50 
     | 
    
         
            +
                disable_cookies=None,  # Disable Cookies on websites. (Pages might break!)
         
     | 
| 
      
 51 
     | 
    
         
            +
                disable_js=None,  # Disable JavaScript on websites. (Pages might break!)
         
     | 
| 
       50 
52 
     | 
    
         
             
                disable_csp=None,  # Disable the Content Security Policy of websites.
         
     | 
| 
       51 
53 
     | 
    
         
             
                enable_ws=None,  # Enable Web Security on Chromium-based browsers.
         
     | 
| 
       52 
54 
     | 
    
         
             
                enable_sync=None,  # Enable "Chrome Sync" on websites.
         
     | 
| 
         @@ -76,12 +78,16 @@ def SB( 
     | 
|
| 
       76 
78 
     | 
    
         
             
                binary_location=None,  # Set path of the Chromium browser binary to use.
         
     | 
| 
       77 
79 
     | 
    
         
             
                driver_version=None,  # Set the chromedriver or uc_driver version to use.
         
     | 
| 
       78 
80 
     | 
    
         
             
                skip_js_waits=None,  # Skip JS Waits (readyState=="complete" and Angular).
         
     | 
| 
      
 81 
     | 
    
         
            +
                wait_for_angularjs=None,  # Wait for AngularJS to load after some actions.
         
     | 
| 
       79 
82 
     | 
    
         
             
                use_wire=None,  # Use selenium-wire's webdriver over selenium webdriver.
         
     | 
| 
       80 
83 
     | 
    
         
             
                external_pdf=None,  # Set Chrome "plugins.always_open_pdf_externally":True.
         
     | 
| 
      
 84 
     | 
    
         
            +
                window_position=None,  # Set the browser's starting window position: "X,Y"
         
     | 
| 
      
 85 
     | 
    
         
            +
                window_size=None,  # Set the browser's starting window size: "Width,Height"
         
     | 
| 
       81 
86 
     | 
    
         
             
                is_mobile=None,  # Use the mobile device emulator while running tests.
         
     | 
| 
       82 
87 
     | 
    
         
             
                mobile=None,  # Shortcut / Duplicate of "is_mobile".
         
     | 
| 
       83 
88 
     | 
    
         
             
                device_metrics=None,  # Set mobile metrics: "CSSWidth,CSSHeight,PixelRatio"
         
     | 
| 
       84 
89 
     | 
    
         
             
                xvfb=None,  # Run tests using the Xvfb virtual display server on Linux OS.
         
     | 
| 
      
 90 
     | 
    
         
            +
                xvfb_metrics=None,  # Set Xvfb display size on Linux: "Width,Height".
         
     | 
| 
       85 
91 
     | 
    
         
             
                start_page=None,  # The starting URL for the web browser when tests begin.
         
     | 
| 
       86 
92 
     | 
    
         
             
                rec_print=None,  # If Recorder is enabled, prints output after tests end.
         
     | 
| 
       87 
93 
     | 
    
         
             
                rec_behave=None,  # Like Recorder Mode, but also generates behave-gherkin.
         
     | 
| 
         @@ -98,14 +104,21 @@ def SB( 
     | 
|
| 
       98 
104 
     | 
    
         
             
                disable_ws=None,  # Reverse of "enable_ws". (None and False are different)
         
     | 
| 
       99 
105 
     | 
    
         
             
                disable_beforeunload=None,  # Disable the "beforeunload" event on Chromium.
         
     | 
| 
       100 
106 
     | 
    
         
             
                settings_file=None,  # A file for overriding default SeleniumBase settings.
         
     | 
| 
      
 107 
     | 
    
         
            +
                position=None,  # Shortcut / Duplicate of "window_position".
         
     | 
| 
      
 108 
     | 
    
         
            +
                size=None,  # Shortcut / Duplicate of "window_size".
         
     | 
| 
       101 
109 
     | 
    
         
             
                uc=None,  # Shortcut / Duplicate of "undetectable".
         
     | 
| 
       102 
110 
     | 
    
         
             
                undetected=None,  # Shortcut / Duplicate of "undetectable".
         
     | 
| 
       103 
111 
     | 
    
         
             
                uc_cdp=None,  # Shortcut / Duplicate of "uc_cdp_events".
         
     | 
| 
       104 
112 
     | 
    
         
             
                uc_sub=None,  # Shortcut / Duplicate of "uc_subprocess".
         
     | 
| 
      
 113 
     | 
    
         
            +
                locale=None,  # Shortcut / Duplicate of "locale_code".
         
     | 
| 
       105 
114 
     | 
    
         
             
                log_cdp=None,  # Shortcut / Duplicate of "log_cdp_events".
         
     | 
| 
      
 115 
     | 
    
         
            +
                ad_block=None,  # Shortcut / Duplicate of "ad_block_on".
         
     | 
| 
      
 116 
     | 
    
         
            +
                server=None,  # Shortcut / Duplicate of "servername".
         
     | 
| 
      
 117 
     | 
    
         
            +
                guest=None,  # Shortcut / Duplicate of "guest_mode".
         
     | 
| 
       106 
118 
     | 
    
         
             
                wire=None,  # Shortcut / Duplicate of "use_wire".
         
     | 
| 
       107 
119 
     | 
    
         
             
                pls=None,  # Shortcut / Duplicate of "page_load_strategy".
         
     | 
| 
       108 
120 
     | 
    
         
             
                sjw=None,  # Shortcut / Duplicate of "skip_js_waits".
         
     | 
| 
      
 121 
     | 
    
         
            +
                wfa=None,  # Shortcut / Duplicate of "wait_for_angularjs".
         
     | 
| 
       109 
122 
     | 
    
         
             
                save_screenshot=None,  # Save a screenshot at the end of each test.
         
     | 
| 
       110 
123 
     | 
    
         
             
                no_screenshot=None,  # No screenshots saved unless tests directly ask it.
         
     | 
| 
       111 
124 
     | 
    
         
             
                page_load_strategy=None,  # Set Chrome PLS to "normal", "eager", or "none".
         
     | 
| 
         @@ -119,6 +132,130 @@ def SB( 
     | 
|
| 
       119 
132 
     | 
    
         
             
                interval=None,  # SECONDS (Autoplay interval for SB Slides & Tour steps.)
         
     | 
| 
       120 
133 
     | 
    
         
             
                time_limit=None,  # SECONDS (Safely fail tests that exceed the time limit.)
         
     | 
| 
       121 
134 
     | 
    
         
             
            ):
         
     | 
| 
      
 135 
     | 
    
         
            +
                """
         
     | 
| 
      
 136 
     | 
    
         
            +
                * SeleniumBase as a Python Context Manager *
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
                Example:
         
     | 
| 
      
 139 
     | 
    
         
            +
                --------
         
     | 
| 
      
 140 
     | 
    
         
            +
                .. code-block:: python
         
     | 
| 
      
 141 
     | 
    
         
            +
                    from seleniumbase import SB
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
                    with SB() as sb:  # Many args! Eg. SB(browser="edge")
         
     | 
| 
      
 144 
     | 
    
         
            +
                        sb.open("https://google.com/ncr")
         
     | 
| 
      
 145 
     | 
    
         
            +
                        sb.type('[name="q"]', "SeleniumBase on GitHub")
         
     | 
| 
      
 146 
     | 
    
         
            +
                        sb.submit('[name="q"]')
         
     | 
| 
      
 147 
     | 
    
         
            +
                        sb.click('a[href*="github.com/seleniumbase"]')
         
     | 
| 
      
 148 
     | 
    
         
            +
                        sb.highlight("div.Layout-main")
         
     | 
| 
      
 149 
     | 
    
         
            +
                        sb.highlight("div.Layout-sidebar")
         
     | 
| 
      
 150 
     | 
    
         
            +
                        sb.sleep(0.5)
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                Optional Parameters:
         
     | 
| 
      
 153 
     | 
    
         
            +
                --------------------
         
     | 
| 
      
 154 
     | 
    
         
            +
                test (bool):  Test Mode: Output, Logging, Continue on failure unless "rtf".
         
     | 
| 
      
 155 
     | 
    
         
            +
                rtf (bool):  Shortcut / Duplicate of "raise_test_failure".
         
     | 
| 
      
 156 
     | 
    
         
            +
                raise_test_failure (bool):  If "test" mode, raise Exception on 1st failure.
         
     | 
| 
      
 157 
     | 
    
         
            +
                browser (str):  Choose from "chrome", "edge", "firefox", or "safari".
         
     | 
| 
      
 158 
     | 
    
         
            +
                headless (bool):  Use the default headless mode for Chromium and Firefox.
         
     | 
| 
      
 159 
     | 
    
         
            +
                headless1 (bool):  Use Chromium's old headless mode. (Fast, but limited)
         
     | 
| 
      
 160 
     | 
    
         
            +
                headless2 (bool):  Use Chromium's new headless mode. (Has more features)
         
     | 
| 
      
 161 
     | 
    
         
            +
                locale_code (str):  Set the Language Locale Code for the web browser.
         
     | 
| 
      
 162 
     | 
    
         
            +
                protocol (str):  The Selenium Grid protocol: "http" or "https".
         
     | 
| 
      
 163 
     | 
    
         
            +
                servername (str):  The Selenium Grid server/IP used for tests.
         
     | 
| 
      
 164 
     | 
    
         
            +
                port (int):  The Selenium Grid port used by the test server.
         
     | 
| 
      
 165 
     | 
    
         
            +
                proxy (str):  Use proxy. Format: "SERVER:PORT" or "USER:PASS@SERVER:PORT".
         
     | 
| 
      
 166 
     | 
    
         
            +
                proxy_bypass_list (str):  Skip proxy when using the listed domains.
         
     | 
| 
      
 167 
     | 
    
         
            +
                proxy_pac_url (str):  Use PAC file. (Format: URL or USERNAME:PASSWORD@URL)
         
     | 
| 
      
 168 
     | 
    
         
            +
                multi_proxy (bool):  # Allow multiple proxies with auth when multithreaded.
         
     | 
| 
      
 169 
     | 
    
         
            +
                agent (str):  Modify the web browser's User-Agent string.
         
     | 
| 
      
 170 
     | 
    
         
            +
                cap_file (str):  The desired capabilities to use with a Selenium Grid.
         
     | 
| 
      
 171 
     | 
    
         
            +
                cap_string (str):  The desired capabilities to use with a Selenium Grid.
         
     | 
| 
      
 172 
     | 
    
         
            +
                recorder_ext (bool):  Enables the SeleniumBase Recorder Chromium extension.
         
     | 
| 
      
 173 
     | 
    
         
            +
                disable_cookies (bool):  Disable Cookies on websites. (Pages might break!)
         
     | 
| 
      
 174 
     | 
    
         
            +
                disable_js (bool):  Disable JavaScript on websites. (Pages might break!)
         
     | 
| 
      
 175 
     | 
    
         
            +
                disable_csp (bool):  Disable the Content Security Policy of websites.
         
     | 
| 
      
 176 
     | 
    
         
            +
                enable_ws (bool):  Enable Web Security on Chromium-based browsers.
         
     | 
| 
      
 177 
     | 
    
         
            +
                enable_sync (bool):  Enable "Chrome Sync" on websites.
         
     | 
| 
      
 178 
     | 
    
         
            +
                use_auto_ext (bool):  Use Chrome's automation extension.
         
     | 
| 
      
 179 
     | 
    
         
            +
                undetectable (bool):  Use undetected-chromedriver to evade bot-detection.
         
     | 
| 
      
 180 
     | 
    
         
            +
                uc_cdp_events (bool):  Capture CDP events in undetected-chromedriver mode.
         
     | 
| 
      
 181 
     | 
    
         
            +
                uc_subprocess (bool):  Use undetected-chromedriver as a subprocess.
         
     | 
| 
      
 182 
     | 
    
         
            +
                log_cdp_events (bool):  Capture {"performance": "ALL", "browser": "ALL"}
         
     | 
| 
      
 183 
     | 
    
         
            +
                incognito (bool):  Enable Chromium's Incognito mode.
         
     | 
| 
      
 184 
     | 
    
         
            +
                guest_mode (bool):  Enable Chromium's Guest mode.
         
     | 
| 
      
 185 
     | 
    
         
            +
                dark_mode (bool):  Enable Chromium's Dark mode.
         
     | 
| 
      
 186 
     | 
    
         
            +
                devtools (bool):  Open Chromium's DevTools when the browser opens.
         
     | 
| 
      
 187 
     | 
    
         
            +
                remote_debug (bool):  Enable Chrome's Debugger on "http://localhost:9222".
         
     | 
| 
      
 188 
     | 
    
         
            +
                enable_3d_apis (bool):  Enable WebGL and 3D APIs.
         
     | 
| 
      
 189 
     | 
    
         
            +
                swiftshader (bool):  Chrome: --use-gl=angle / --use-angle=swiftshader-webgl
         
     | 
| 
      
 190 
     | 
    
         
            +
                ad_block_on (bool):  Block some types of display ads from loading.
         
     | 
| 
      
 191 
     | 
    
         
            +
                host_resolver_rules (str):  Set host-resolver-rules, comma-separated.
         
     | 
| 
      
 192 
     | 
    
         
            +
                block_images (bool):  Block images from loading during tests.
         
     | 
| 
      
 193 
     | 
    
         
            +
                do_not_track (bool):  Tell websites that you don't want to be tracked.
         
     | 
| 
      
 194 
     | 
    
         
            +
                chromium_arg (str):  "ARG=N,ARG2" (Set Chromium args, ","-separated.)
         
     | 
| 
      
 195 
     | 
    
         
            +
                firefox_arg (str):  "ARG=N,ARG2" (Set Firefox args, comma-separated.)
         
     | 
| 
      
 196 
     | 
    
         
            +
                firefox_pref (str):  SET (Set Firefox PREFERENCE:VALUE set, ","-separated)
         
     | 
| 
      
 197 
     | 
    
         
            +
                user_data_dir (str):  Set the Chrome user data directory to use.
         
     | 
| 
      
 198 
     | 
    
         
            +
                extension_zip (str):  Load a Chrome Extension .zip|.crx, comma-separated.
         
     | 
| 
      
 199 
     | 
    
         
            +
                extension_dir (str):  Load a Chrome Extension directory, comma-separated.
         
     | 
| 
      
 200 
     | 
    
         
            +
                disable_features (str):  "F1,F2" (Disable Chrome features, ","-separated.)
         
     | 
| 
      
 201 
     | 
    
         
            +
                binary_location (str):  Set path of the Chromium browser binary to use.
         
     | 
| 
      
 202 
     | 
    
         
            +
                driver_version (str):  Set the chromedriver or uc_driver version to use.
         
     | 
| 
      
 203 
     | 
    
         
            +
                skip_js_waits (bool):  Skip JS Waits (readyState=="complete" and Angular).
         
     | 
| 
      
 204 
     | 
    
         
            +
                wait_for_angularjs (bool):  Wait for AngularJS to load after some actions.
         
     | 
| 
      
 205 
     | 
    
         
            +
                use_wire (bool):  Use selenium-wire's webdriver over selenium webdriver.
         
     | 
| 
      
 206 
     | 
    
         
            +
                external_pdf (bool):  Set Chrome "plugins.always_open_pdf_externally":True.
         
     | 
| 
      
 207 
     | 
    
         
            +
                window_position (x,y):  Set the browser's starting window position: "X,Y"
         
     | 
| 
      
 208 
     | 
    
         
            +
                window_size (w,h):  Set the browser's starting window size: "Width,Height"
         
     | 
| 
      
 209 
     | 
    
         
            +
                is_mobile (bool):  Use the mobile device emulator while running tests.
         
     | 
| 
      
 210 
     | 
    
         
            +
                mobile (bool):  Shortcut / Duplicate of "is_mobile".
         
     | 
| 
      
 211 
     | 
    
         
            +
                device_metrics (w,h,pr):  Mobile metrics: "CSSWidth,CSSHeight,PixelRatio"
         
     | 
| 
      
 212 
     | 
    
         
            +
                xvfb (bool):  Run tests using the Xvfb virtual display server on Linux OS.
         
     | 
| 
      
 213 
     | 
    
         
            +
                xvfb_metrics (w,h):  Set Xvfb display size on Linux: "Width,Height".
         
     | 
| 
      
 214 
     | 
    
         
            +
                start_page (str):  The starting URL for the web browser when tests begin.
         
     | 
| 
      
 215 
     | 
    
         
            +
                rec_print (bool):  If Recorder is enabled, prints output after tests end.
         
     | 
| 
      
 216 
     | 
    
         
            +
                rec_behave (bool):  Like Recorder Mode, but also generates behave-gherkin.
         
     | 
| 
      
 217 
     | 
    
         
            +
                record_sleep (bool):  If Recorder enabled, also records self.sleep calls.
         
     | 
| 
      
 218 
     | 
    
         
            +
                data (str):  Extra test data. Access with "self.data" in tests.
         
     | 
| 
      
 219 
     | 
    
         
            +
                var1 (str):  Extra test data. Access with "self.var1" in tests.
         
     | 
| 
      
 220 
     | 
    
         
            +
                var2 (str):  Extra test data. Access with "self.var2" in tests.
         
     | 
| 
      
 221 
     | 
    
         
            +
                var3 (str):  Extra test data. Access with "self.var3" in tests.
         
     | 
| 
      
 222 
     | 
    
         
            +
                variables (dict):  Extra test data. Access with "self.variables".
         
     | 
| 
      
 223 
     | 
    
         
            +
                account (str):  Set account. Access with "self.account" in tests.
         
     | 
| 
      
 224 
     | 
    
         
            +
                environment (str):  Set the test env. Access with "self.env" in tests.
         
     | 
| 
      
 225 
     | 
    
         
            +
                headed (bool):  Run tests in headed/GUI mode on Linux, where not default.
         
     | 
| 
      
 226 
     | 
    
         
            +
                maximize (bool):  Start tests with the browser window maximized.
         
     | 
| 
      
 227 
     | 
    
         
            +
                disable_ws (bool):  Reverse of "enable_ws". (None and False are different)
         
     | 
| 
      
 228 
     | 
    
         
            +
                disable_beforeunload (bool):  Disable the "beforeunload" event on Chromium.
         
     | 
| 
      
 229 
     | 
    
         
            +
                settings_file (str):  A file for overriding default SeleniumBase settings.
         
     | 
| 
      
 230 
     | 
    
         
            +
                position (x,y):  Shortcut / Duplicate of "window_position".
         
     | 
| 
      
 231 
     | 
    
         
            +
                size (w,h):  Shortcut / Duplicate of "window_size".
         
     | 
| 
      
 232 
     | 
    
         
            +
                uc (bool):  Shortcut / Duplicate of "undetectable".
         
     | 
| 
      
 233 
     | 
    
         
            +
                undetected (bool):  Shortcut / Duplicate of "undetectable".
         
     | 
| 
      
 234 
     | 
    
         
            +
                uc_cdp (bool):  Shortcut / Duplicate of "uc_cdp_events".
         
     | 
| 
      
 235 
     | 
    
         
            +
                uc_sub (bool):  Shortcut / Duplicate of "uc_subprocess".
         
     | 
| 
      
 236 
     | 
    
         
            +
                locale (str):  Shortcut / Duplicate of "locale_code".
         
     | 
| 
      
 237 
     | 
    
         
            +
                log_cdp (bool):  Shortcut / Duplicate of "log_cdp_events".
         
     | 
| 
      
 238 
     | 
    
         
            +
                ad_block (bool):  Shortcut / Duplicate of "ad_block_on".
         
     | 
| 
      
 239 
     | 
    
         
            +
                server (str):  Shortcut / Duplicate of "servername".
         
     | 
| 
      
 240 
     | 
    
         
            +
                guest (bool):  Shortcut / Duplicate of "guest_mode".
         
     | 
| 
      
 241 
     | 
    
         
            +
                wire (bool):  Shortcut / Duplicate of "use_wire".
         
     | 
| 
      
 242 
     | 
    
         
            +
                pls (str):  Shortcut / Duplicate of "page_load_strategy".
         
     | 
| 
      
 243 
     | 
    
         
            +
                sjw (bool):  Shortcut / Duplicate of "skip_js_waits".
         
     | 
| 
      
 244 
     | 
    
         
            +
                wfa (bool):  Shortcut / Duplicate of "wait_for_angularjs".
         
     | 
| 
      
 245 
     | 
    
         
            +
                save_screenshot (bool):  Save a screenshot at the end of each test.
         
     | 
| 
      
 246 
     | 
    
         
            +
                no_screenshot (bool):  No screenshots saved unless tests directly ask it.
         
     | 
| 
      
 247 
     | 
    
         
            +
                page_load_strategy (str):  Set Chrome PLS to "normal", "eager", or "none".
         
     | 
| 
      
 248 
     | 
    
         
            +
                timeout_multiplier (float):  Multiplies the default timeout values.
         
     | 
| 
      
 249 
     | 
    
         
            +
                js_checking_on (bool):  Check for JavaScript errors after page loads.
         
     | 
| 
      
 250 
     | 
    
         
            +
                slow (bool):  Slow down the automation. Faster than using Demo Mode.
         
     | 
| 
      
 251 
     | 
    
         
            +
                demo (bool):  Slow down and visually see test actions as they occur.
         
     | 
| 
      
 252 
     | 
    
         
            +
                demo_sleep (float):  SECONDS (Set wait time after Slow & Demo Mode actions)
         
     | 
| 
      
 253 
     | 
    
         
            +
                message_duration (float):  SECONDS (The time length for Messenger alerts.)
         
     | 
| 
      
 254 
     | 
    
         
            +
                highlights (int):  Number of highlight animations for Demo Mode actions.
         
     | 
| 
      
 255 
     | 
    
         
            +
                interval (float):  SECONDS (Autoplay interval for SB Slides & Tour steps.)
         
     | 
| 
      
 256 
     | 
    
         
            +
                time_limit (float):  SECONDS (Safely fail tests that exceed the time limit)
         
     | 
| 
      
 257 
     | 
    
         
            +
                """
         
     | 
| 
      
 258 
     | 
    
         
            +
                import colorama
         
     | 
| 
       122 
259 
     | 
    
         
             
                import os
         
     | 
| 
       123 
260 
     | 
    
         
             
                import sys
         
     | 
| 
       124 
261 
     | 
    
         
             
                import time
         
     | 
| 
         @@ -131,7 +268,6 @@ def SB( 
     | 
|
| 
       131 
268 
     | 
    
         | 
| 
       132 
269 
     | 
    
         
             
                sb_config_backup = sb_config
         
     | 
| 
       133 
270 
     | 
    
         
             
                sb_config._do_sb_post_mortem = False
         
     | 
| 
       134 
     | 
    
         
            -
                is_windows = shared_utils.is_windows()
         
     | 
| 
       135 
271 
     | 
    
         
             
                sys_argv = sys.argv
         
     | 
| 
       136 
272 
     | 
    
         
             
                arg_join = " ".join(sys_argv)
         
     | 
| 
       137 
273 
     | 
    
         
             
                archive_logs = False
         
     | 
| 
         @@ -139,12 +275,15 @@ def SB( 
     | 
|
| 
       139 
275 
     | 
    
         
             
                collect_only = ("--co" in sys_argv or "--collect-only" in sys_argv)
         
     | 
| 
       140 
276 
     | 
    
         
             
                all_scripts = (hasattr(sb_config, "all_scripts") and sb_config.all_scripts)
         
     | 
| 
       141 
277 
     | 
    
         
             
                do_log_folder_setup = False  # The first "test=True" run does it
         
     | 
| 
      
 278 
     | 
    
         
            +
                inner_test = False
         
     | 
| 
       142 
279 
     | 
    
         
             
                if (
         
     | 
| 
       143 
280 
     | 
    
         
             
                    (hasattr(sb_config, "is_behave") and sb_config.is_behave)
         
     | 
| 
       144 
281 
     | 
    
         
             
                    or (hasattr(sb_config, "is_pytest") and sb_config.is_pytest)
         
     | 
| 
       145 
282 
     | 
    
         
             
                    or (hasattr(sb_config, "is_nosetest") and sb_config.is_nosetest)
         
     | 
| 
       146 
283 
     | 
    
         
             
                ):
         
     | 
| 
       147 
284 
     | 
    
         
             
                    existing_runner = True
         
     | 
| 
      
 285 
     | 
    
         
            +
                    if test:
         
     | 
| 
      
 286 
     | 
    
         
            +
                        inner_test = True
         
     | 
| 
       148 
287 
     | 
    
         
             
                    test = False  # Already using a test runner. Skip extra test steps.
         
     | 
| 
       149 
288 
     | 
    
         
             
                elif test is None and "--test" in sys_argv:
         
     | 
| 
       150 
289 
     | 
    
         
             
                    test = True
         
     | 
| 
         @@ -275,6 +414,13 @@ def SB( 
     | 
|
| 
       275 
414 
     | 
    
         
             
                        headless = True
         
     | 
| 
       276 
415 
     | 
    
         
             
                    else:
         
     | 
| 
       277 
416 
     | 
    
         
             
                        headless = False
         
     | 
| 
      
 417 
     | 
    
         
            +
                if headless1 is None:
         
     | 
| 
      
 418 
     | 
    
         
            +
                    if "--headless1" in sys_argv:
         
     | 
| 
      
 419 
     | 
    
         
            +
                        headless1 = True
         
     | 
| 
      
 420 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 421 
     | 
    
         
            +
                        headless1 = False
         
     | 
| 
      
 422 
     | 
    
         
            +
                if headless1:
         
     | 
| 
      
 423 
     | 
    
         
            +
                    headless = True
         
     | 
| 
       278 
424 
     | 
    
         
             
                if headless2 is None:
         
     | 
| 
       279 
425 
     | 
    
         
             
                    if "--headless2" in sys_argv:
         
     | 
| 
       280 
426 
     | 
    
         
             
                        headless2 = True
         
     | 
| 
         @@ -282,6 +428,8 @@ def SB( 
     | 
|
| 
       282 
428 
     | 
    
         
             
                        headless2 = False
         
     | 
| 
       283 
429 
     | 
    
         
             
                if protocol is None:
         
     | 
| 
       284 
430 
     | 
    
         
             
                    protocol = "http"  # For the Selenium Grid only!
         
     | 
| 
      
 431 
     | 
    
         
            +
                if server is not None and servername is None:
         
     | 
| 
      
 432 
     | 
    
         
            +
                    servername = server
         
     | 
| 
       285 
433 
     | 
    
         
             
                if servername is None:
         
     | 
| 
       286 
434 
     | 
    
         
             
                    servername = "localhost"  # For the Selenium Grid only!
         
     | 
| 
       287 
435 
     | 
    
         
             
                if port is None:
         
     | 
| 
         @@ -293,6 +441,8 @@ def SB( 
     | 
|
| 
       293 
441 
     | 
    
         
             
                        incognito = True
         
     | 
| 
       294 
442 
     | 
    
         
             
                    else:
         
     | 
| 
       295 
443 
     | 
    
         
             
                        incognito = False
         
     | 
| 
      
 444 
     | 
    
         
            +
                if guest is not None and guest_mode is None:
         
     | 
| 
      
 445 
     | 
    
         
            +
                    guest_mode = guest
         
     | 
| 
       296 
446 
     | 
    
         
             
                if guest_mode is None:
         
     | 
| 
       297 
447 
     | 
    
         
             
                    if "--guest" in sys_argv:
         
     | 
| 
       298 
448 
     | 
    
         
             
                        guest_mode = True
         
     | 
| 
         @@ -330,28 +480,93 @@ def SB( 
     | 
|
| 
       330 
480 
     | 
    
         
             
                            proxy_string = proxy_string[1:-1]
         
     | 
| 
       331 
481 
     | 
    
         
             
                c_a = chromium_arg
         
     | 
| 
       332 
482 
     | 
    
         
             
                if c_a is None and "--chromium-arg" in arg_join:
         
     | 
| 
       333 
     | 
    
         
            -
                     
     | 
| 
       334 
     | 
    
         
            -
             
     | 
| 
       335 
     | 
    
         
            -
             
     | 
| 
       336 
     | 
    
         
            -
             
     | 
| 
       337 
     | 
    
         
            -
             
     | 
| 
       338 
     | 
    
         
            -
                         
     | 
| 
       339 
     | 
    
         
            -
                            c_a =  
     | 
| 
       340 
     | 
    
         
            -
             
     | 
| 
       341 
     | 
    
         
            -
             
     | 
| 
      
 483 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 484 
     | 
    
         
            +
                    for arg in sys_argv:
         
     | 
| 
      
 485 
     | 
    
         
            +
                        if arg.startswith("--chromium-arg="):
         
     | 
| 
      
 486 
     | 
    
         
            +
                            c_a = arg.split("--chromium-arg=")[1]
         
     | 
| 
      
 487 
     | 
    
         
            +
                            break
         
     | 
| 
      
 488 
     | 
    
         
            +
                        elif arg == "--chromium-arg" and len(sys_argv) > count + 1:
         
     | 
| 
      
 489 
     | 
    
         
            +
                            c_a = sys_argv[count + 1]
         
     | 
| 
      
 490 
     | 
    
         
            +
                            if c_a.startswith("-"):
         
     | 
| 
      
 491 
     | 
    
         
            +
                                c_a = None
         
     | 
| 
      
 492 
     | 
    
         
            +
                            break
         
     | 
| 
      
 493 
     | 
    
         
            +
                        count += 1
         
     | 
| 
       342 
494 
     | 
    
         
             
                chromium_arg = c_a
         
     | 
| 
       343 
495 
     | 
    
         
             
                d_f = disable_features
         
     | 
| 
       344 
496 
     | 
    
         
             
                if d_f is None and "--disable-features" in arg_join:
         
     | 
| 
       345 
     | 
    
         
            -
                     
     | 
| 
       346 
     | 
    
         
            -
             
     | 
| 
       347 
     | 
    
         
            -
             
     | 
| 
       348 
     | 
    
         
            -
             
     | 
| 
       349 
     | 
    
         
            -
             
     | 
| 
       350 
     | 
    
         
            -
                         
     | 
| 
       351 
     | 
    
         
            -
                            d_f =  
     | 
| 
       352 
     | 
    
         
            -
             
     | 
| 
       353 
     | 
    
         
            -
             
     | 
| 
      
 497 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 498 
     | 
    
         
            +
                    for arg in sys_argv:
         
     | 
| 
      
 499 
     | 
    
         
            +
                        if arg.startswith("--disable-features="):
         
     | 
| 
      
 500 
     | 
    
         
            +
                            d_f = arg.split("--disable-features=")[1]
         
     | 
| 
      
 501 
     | 
    
         
            +
                            break
         
     | 
| 
      
 502 
     | 
    
         
            +
                        elif arg == "--disable-features" and len(sys_argv) > count + 1:
         
     | 
| 
      
 503 
     | 
    
         
            +
                            d_f = sys_argv[count + 1]
         
     | 
| 
      
 504 
     | 
    
         
            +
                            if d_f.startswith("-"):
         
     | 
| 
      
 505 
     | 
    
         
            +
                                d_f = None
         
     | 
| 
      
 506 
     | 
    
         
            +
                            break
         
     | 
| 
      
 507 
     | 
    
         
            +
                        count += 1
         
     | 
| 
       354 
508 
     | 
    
         
             
                disable_features = d_f
         
     | 
| 
      
 509 
     | 
    
         
            +
                if window_position is None and position is not None:
         
     | 
| 
      
 510 
     | 
    
         
            +
                    window_position = position
         
     | 
| 
      
 511 
     | 
    
         
            +
                w_p = window_position
         
     | 
| 
      
 512 
     | 
    
         
            +
                if (
         
     | 
| 
      
 513 
     | 
    
         
            +
                    w_p is None
         
     | 
| 
      
 514 
     | 
    
         
            +
                    and ("--window-position" in arg_join or "--position" in arg_join)
         
     | 
| 
      
 515 
     | 
    
         
            +
                ):
         
     | 
| 
      
 516 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 517 
     | 
    
         
            +
                    for arg in sys_argv:
         
     | 
| 
      
 518 
     | 
    
         
            +
                        if arg.startswith("--window-position="):
         
     | 
| 
      
 519 
     | 
    
         
            +
                            w_p = arg.split("--window-position=")[1]
         
     | 
| 
      
 520 
     | 
    
         
            +
                            break
         
     | 
| 
      
 521 
     | 
    
         
            +
                        elif arg == "--window-position" and len(sys_argv) > count + 1:
         
     | 
| 
      
 522 
     | 
    
         
            +
                            w_p = sys_argv[count + 1]
         
     | 
| 
      
 523 
     | 
    
         
            +
                            if w_p.startswith("-"):
         
     | 
| 
      
 524 
     | 
    
         
            +
                                w_p = None
         
     | 
| 
      
 525 
     | 
    
         
            +
                            break
         
     | 
| 
      
 526 
     | 
    
         
            +
                        count += 1
         
     | 
| 
      
 527 
     | 
    
         
            +
                window_position = w_p
         
     | 
| 
      
 528 
     | 
    
         
            +
                if window_size is None and size is not None:
         
     | 
| 
      
 529 
     | 
    
         
            +
                    window_size = size
         
     | 
| 
      
 530 
     | 
    
         
            +
                w_s = window_size
         
     | 
| 
      
 531 
     | 
    
         
            +
                if w_s is None and "--window-size" in arg_join:
         
     | 
| 
      
 532 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 533 
     | 
    
         
            +
                    for arg in sys_argv:
         
     | 
| 
      
 534 
     | 
    
         
            +
                        if arg.startswith("--window-size="):
         
     | 
| 
      
 535 
     | 
    
         
            +
                            w_s = arg.split("--window-size=")[1]
         
     | 
| 
      
 536 
     | 
    
         
            +
                            break
         
     | 
| 
      
 537 
     | 
    
         
            +
                        elif arg == "--window-size" and len(sys_argv) > count + 1:
         
     | 
| 
      
 538 
     | 
    
         
            +
                            w_s = sys_argv[count + 1]
         
     | 
| 
      
 539 
     | 
    
         
            +
                            if w_s.startswith("-"):
         
     | 
| 
      
 540 
     | 
    
         
            +
                                w_s = None
         
     | 
| 
      
 541 
     | 
    
         
            +
                            break
         
     | 
| 
      
 542 
     | 
    
         
            +
                        count += 1
         
     | 
| 
      
 543 
     | 
    
         
            +
                window_size = w_s
         
     | 
| 
      
 544 
     | 
    
         
            +
                x_m = xvfb_metrics
         
     | 
| 
      
 545 
     | 
    
         
            +
                if x_m is None and "--xvfb-metrics" in arg_join:
         
     | 
| 
      
 546 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 547 
     | 
    
         
            +
                    for arg in sys_argv:
         
     | 
| 
      
 548 
     | 
    
         
            +
                        if arg.startswith("--xvfb-metrics="):
         
     | 
| 
      
 549 
     | 
    
         
            +
                            x_m = arg.split("--xvfb-metrics=")[1]
         
     | 
| 
      
 550 
     | 
    
         
            +
                            break
         
     | 
| 
      
 551 
     | 
    
         
            +
                        elif arg == "--xvfb-metrics" and len(sys_argv) > count + 1:
         
     | 
| 
      
 552 
     | 
    
         
            +
                            x_m = sys_argv[count + 1]
         
     | 
| 
      
 553 
     | 
    
         
            +
                            if x_m.startswith("-"):
         
     | 
| 
      
 554 
     | 
    
         
            +
                                x_m = None
         
     | 
| 
      
 555 
     | 
    
         
            +
                            break
         
     | 
| 
      
 556 
     | 
    
         
            +
                        count += 1
         
     | 
| 
      
 557 
     | 
    
         
            +
                xvfb_metrics = x_m
         
     | 
| 
      
 558 
     | 
    
         
            +
                if agent is None and "--agent" in arg_join:
         
     | 
| 
      
 559 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 560 
     | 
    
         
            +
                    for arg in sys_argv:
         
     | 
| 
      
 561 
     | 
    
         
            +
                        if arg.startswith("--agent="):
         
     | 
| 
      
 562 
     | 
    
         
            +
                            agent = arg.split("--agent=")[1]
         
     | 
| 
      
 563 
     | 
    
         
            +
                            break
         
     | 
| 
      
 564 
     | 
    
         
            +
                        elif arg == "--agent" and len(sys_argv) > count + 1:
         
     | 
| 
      
 565 
     | 
    
         
            +
                            agent = sys_argv[count + 1]
         
     | 
| 
      
 566 
     | 
    
         
            +
                            if agent.startswith("-"):
         
     | 
| 
      
 567 
     | 
    
         
            +
                                agent = None
         
     | 
| 
      
 568 
     | 
    
         
            +
                            break
         
     | 
| 
      
 569 
     | 
    
         
            +
                        count += 1
         
     | 
| 
       355 
570 
     | 
    
         
             
                user_agent = agent
         
     | 
| 
       356 
571 
     | 
    
         
             
                recorder_mode = False
         
     | 
| 
       357 
572 
     | 
    
         
             
                if recorder_ext:
         
     | 
| 
         @@ -378,9 +593,79 @@ def SB( 
     | 
|
| 
       378 
593 
     | 
    
         
             
                        record_sleep = True
         
     | 
| 
       379 
594 
     | 
    
         
             
                    else:
         
     | 
| 
       380 
595 
     | 
    
         
             
                        record_sleep = False
         
     | 
| 
      
 596 
     | 
    
         
            +
                if xvfb is None:
         
     | 
| 
      
 597 
     | 
    
         
            +
                    if "--xvfb" in sys_argv:
         
     | 
| 
      
 598 
     | 
    
         
            +
                        xvfb = True
         
     | 
| 
      
 599 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 600 
     | 
    
         
            +
                        xvfb = False
         
     | 
| 
       381 
601 
     | 
    
         
             
                if not shared_utils.is_linux():
         
     | 
| 
       382 
602 
     | 
    
         
             
                    # The Xvfb virtual display server is for Linux OS Only!
         
     | 
| 
       383 
603 
     | 
    
         
             
                    xvfb = False
         
     | 
| 
      
 604 
     | 
    
         
            +
                if (
         
     | 
| 
      
 605 
     | 
    
         
            +
                    undetectable
         
     | 
| 
      
 606 
     | 
    
         
            +
                    or undetected
         
     | 
| 
      
 607 
     | 
    
         
            +
                    or uc
         
     | 
| 
      
 608 
     | 
    
         
            +
                    or uc_cdp_events
         
     | 
| 
      
 609 
     | 
    
         
            +
                    or uc_cdp
         
     | 
| 
      
 610 
     | 
    
         
            +
                    or uc_subprocess
         
     | 
| 
      
 611 
     | 
    
         
            +
                    or uc_sub
         
     | 
| 
      
 612 
     | 
    
         
            +
                ):
         
     | 
| 
      
 613 
     | 
    
         
            +
                    undetectable = True
         
     | 
| 
      
 614 
     | 
    
         
            +
                if undetectable or undetected or uc:
         
     | 
| 
      
 615 
     | 
    
         
            +
                    uc_subprocess = True  # Use UC as a subprocess by default.
         
     | 
| 
      
 616 
     | 
    
         
            +
                elif (
         
     | 
| 
      
 617 
     | 
    
         
            +
                    "--undetectable" in sys_argv
         
     | 
| 
      
 618 
     | 
    
         
            +
                    or "--undetected" in sys_argv
         
     | 
| 
      
 619 
     | 
    
         
            +
                    or "--uc" in sys_argv
         
     | 
| 
      
 620 
     | 
    
         
            +
                    or "--uc-cdp-events" in sys_argv
         
     | 
| 
      
 621 
     | 
    
         
            +
                    or "--uc_cdp_events" in sys_argv
         
     | 
| 
      
 622 
     | 
    
         
            +
                    or "--uc-cdp" in sys_argv
         
     | 
| 
      
 623 
     | 
    
         
            +
                    or "--uc-subprocess" in sys_argv
         
     | 
| 
      
 624 
     | 
    
         
            +
                    or "--uc_subprocess" in sys_argv
         
     | 
| 
      
 625 
     | 
    
         
            +
                    or "--uc-sub" in sys_argv
         
     | 
| 
      
 626 
     | 
    
         
            +
                ):
         
     | 
| 
      
 627 
     | 
    
         
            +
                    undetectable = True
         
     | 
| 
      
 628 
     | 
    
         
            +
                    if uc_subprocess is None and uc_sub is None:
         
     | 
| 
      
 629 
     | 
    
         
            +
                        uc_subprocess = True  # Use UC as a subprocess by default.
         
     | 
| 
      
 630 
     | 
    
         
            +
                else:
         
     | 
| 
      
 631 
     | 
    
         
            +
                    undetectable = False
         
     | 
| 
      
 632 
     | 
    
         
            +
                if uc_subprocess or uc_sub:
         
     | 
| 
      
 633 
     | 
    
         
            +
                    uc_subprocess = True
         
     | 
| 
      
 634 
     | 
    
         
            +
                elif (
         
     | 
| 
      
 635 
     | 
    
         
            +
                    "--uc-subprocess" in sys_argv
         
     | 
| 
      
 636 
     | 
    
         
            +
                    or "--uc_subprocess" in sys_argv
         
     | 
| 
      
 637 
     | 
    
         
            +
                    or "--uc-sub" in sys_argv
         
     | 
| 
      
 638 
     | 
    
         
            +
                ):
         
     | 
| 
      
 639 
     | 
    
         
            +
                    uc_subprocess = True
         
     | 
| 
      
 640 
     | 
    
         
            +
                else:
         
     | 
| 
      
 641 
     | 
    
         
            +
                    uc_subprocess = False
         
     | 
| 
      
 642 
     | 
    
         
            +
                if uc_cdp_events or uc_cdp:
         
     | 
| 
      
 643 
     | 
    
         
            +
                    undetectable = True
         
     | 
| 
      
 644 
     | 
    
         
            +
                    uc_cdp_events = True
         
     | 
| 
      
 645 
     | 
    
         
            +
                elif (
         
     | 
| 
      
 646 
     | 
    
         
            +
                    "--uc-cdp-events" in sys_argv
         
     | 
| 
      
 647 
     | 
    
         
            +
                    or "--uc_cdp_events" in sys_argv
         
     | 
| 
      
 648 
     | 
    
         
            +
                    or "--uc-cdp" in sys_argv
         
     | 
| 
      
 649 
     | 
    
         
            +
                    or "--uc_cdp" in sys_argv
         
     | 
| 
      
 650 
     | 
    
         
            +
                ):
         
     | 
| 
      
 651 
     | 
    
         
            +
                    undetectable = True
         
     | 
| 
      
 652 
     | 
    
         
            +
                    uc_cdp_events = True
         
     | 
| 
      
 653 
     | 
    
         
            +
                else:
         
     | 
| 
      
 654 
     | 
    
         
            +
                    uc_cdp_events = False
         
     | 
| 
      
 655 
     | 
    
         
            +
                if undetectable and browser != "chrome":
         
     | 
| 
      
 656 
     | 
    
         
            +
                    message = (
         
     | 
| 
      
 657 
     | 
    
         
            +
                        '\n  Undetected-Chromedriver Mode ONLY supports Chrome!'
         
     | 
| 
      
 658 
     | 
    
         
            +
                        '\n  ("uc=True" / "undetectable=True" / "--uc")'
         
     | 
| 
      
 659 
     | 
    
         
            +
                        '\n  (Your browser choice was: "%s".)'
         
     | 
| 
      
 660 
     | 
    
         
            +
                        '\n  (Will use "%s" without UC Mode.)\n' % (browser, browser)
         
     | 
| 
      
 661 
     | 
    
         
            +
                    )
         
     | 
| 
      
 662 
     | 
    
         
            +
                    print(message)
         
     | 
| 
      
 663 
     | 
    
         
            +
                if headed is None:
         
     | 
| 
      
 664 
     | 
    
         
            +
                    # Override the default headless mode on Linux if set.
         
     | 
| 
      
 665 
     | 
    
         
            +
                    if "--gui" in sys_argv or "--headed" in sys_argv:
         
     | 
| 
      
 666 
     | 
    
         
            +
                        headed = True
         
     | 
| 
      
 667 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 668 
     | 
    
         
            +
                        headed = False
         
     | 
| 
       384 
669 
     | 
    
         
             
                if (
         
     | 
| 
       385 
670 
     | 
    
         
             
                    shared_utils.is_linux()
         
     | 
| 
       386 
671 
     | 
    
         
             
                    and not headed
         
     | 
| 
         @@ -388,7 +673,10 @@ def SB( 
     | 
|
| 
       388 
673 
     | 
    
         
             
                    and not headless2
         
     | 
| 
       389 
674 
     | 
    
         
             
                    and not xvfb
         
     | 
| 
       390 
675 
     | 
    
         
             
                ):
         
     | 
| 
       391 
     | 
    
         
            -
                     
     | 
| 
      
 676 
     | 
    
         
            +
                    if not undetectable:
         
     | 
| 
      
 677 
     | 
    
         
            +
                        headless = True
         
     | 
| 
      
 678 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 679 
     | 
    
         
            +
                        xvfb = True
         
     | 
| 
       392 
680 
     | 
    
         
             
                if headless2 and browser == "firefox":
         
     | 
| 
       393 
681 
     | 
    
         
             
                    headless2 = False  # Only for Chromium browsers
         
     | 
| 
       394 
682 
     | 
    
         
             
                    headless = True  # Firefox has regular headless
         
     | 
| 
         @@ -407,6 +695,7 @@ def SB( 
     | 
|
| 
       407 
695 
     | 
    
         
             
                    recorder_ext = True
         
     | 
| 
       408 
696 
     | 
    
         
             
                if recorder_mode and headless:
         
     | 
| 
       409 
697 
     | 
    
         
             
                    headless = False
         
     | 
| 
      
 698 
     | 
    
         
            +
                    headless1 = False
         
     | 
| 
       410 
699 
     | 
    
         
             
                    headless2 = True
         
     | 
| 
       411 
700 
     | 
    
         
             
                sb_config.proxy_driver = False
         
     | 
| 
       412 
701 
     | 
    
         
             
                if "--proxy-driver" in sys_argv or "--proxy_driver" in sys_argv:
         
     | 
| 
         @@ -434,8 +723,25 @@ def SB( 
     | 
|
| 
       434 
723 
     | 
    
         
             
                else:
         
     | 
| 
       435 
724 
     | 
    
         
             
                    variables = {}
         
     | 
| 
       436 
725 
     | 
    
         
             
                if disable_csp is None:
         
     | 
| 
       437 
     | 
    
         
            -
                     
     | 
| 
      
 726 
     | 
    
         
            +
                    if (
         
     | 
| 
      
 727 
     | 
    
         
            +
                        "--disable-csp" in sys_argv
         
     | 
| 
      
 728 
     | 
    
         
            +
                        or "--no-csp" in sys_argv
         
     | 
| 
      
 729 
     | 
    
         
            +
                        or "--dcsp" in sys_argv
         
     | 
| 
      
 730 
     | 
    
         
            +
                    ):
         
     | 
| 
      
 731 
     | 
    
         
            +
                        disable_csp = True
         
     | 
| 
      
 732 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 733 
     | 
    
         
            +
                        disable_csp = False
         
     | 
| 
       438 
734 
     | 
    
         
             
                if (
         
     | 
| 
      
 735 
     | 
    
         
            +
                    (enable_ws is None and disable_ws is None)
         
     | 
| 
      
 736 
     | 
    
         
            +
                    and (
         
     | 
| 
      
 737 
     | 
    
         
            +
                        "--disable-web-security" in sys_argv
         
     | 
| 
      
 738 
     | 
    
         
            +
                        or "--disable-ws" in sys_argv
         
     | 
| 
      
 739 
     | 
    
         
            +
                        or "--dws" in sys_argv
         
     | 
| 
      
 740 
     | 
    
         
            +
                    )
         
     | 
| 
      
 741 
     | 
    
         
            +
                ):
         
     | 
| 
      
 742 
     | 
    
         
            +
                    enable_ws = False
         
     | 
| 
      
 743 
     | 
    
         
            +
                    disable_ws = True
         
     | 
| 
      
 744 
     | 
    
         
            +
                elif (
         
     | 
| 
       439 
745 
     | 
    
         
             
                    (enable_ws is None and disable_ws is None)
         
     | 
| 
       440 
746 
     | 
    
         
             
                    or (disable_ws is not None and not disable_ws)
         
     | 
| 
       441 
747 
     | 
    
         
             
                    or (enable_ws is not None and enable_ws)
         
     | 
| 
         @@ -445,61 +751,6 @@ def SB( 
     | 
|
| 
       445 
751 
     | 
    
         
             
                else:
         
     | 
| 
       446 
752 
     | 
    
         
             
                    enable_ws = False
         
     | 
| 
       447 
753 
     | 
    
         
             
                    disable_ws = True
         
     | 
| 
       448 
     | 
    
         
            -
                if (
         
     | 
| 
       449 
     | 
    
         
            -
                    undetectable
         
     | 
| 
       450 
     | 
    
         
            -
                    or undetected
         
     | 
| 
       451 
     | 
    
         
            -
                    or uc
         
     | 
| 
       452 
     | 
    
         
            -
                    or uc_cdp_events
         
     | 
| 
       453 
     | 
    
         
            -
                    or uc_cdp
         
     | 
| 
       454 
     | 
    
         
            -
                    or uc_subprocess
         
     | 
| 
       455 
     | 
    
         
            -
                    or uc_sub
         
     | 
| 
       456 
     | 
    
         
            -
                ):
         
     | 
| 
       457 
     | 
    
         
            -
                    undetectable = True
         
     | 
| 
       458 
     | 
    
         
            -
                if (
         
     | 
| 
       459 
     | 
    
         
            -
                    (undetectable or undetected or uc)
         
     | 
| 
       460 
     | 
    
         
            -
                    and (uc_subprocess is None)
         
     | 
| 
       461 
     | 
    
         
            -
                    and (uc_sub is None)
         
     | 
| 
       462 
     | 
    
         
            -
                ):
         
     | 
| 
       463 
     | 
    
         
            -
                    uc_subprocess = True  # Use UC as a subprocess by default.
         
     | 
| 
       464 
     | 
    
         
            -
                elif (
         
     | 
| 
       465 
     | 
    
         
            -
                    "--undetectable" in sys_argv
         
     | 
| 
       466 
     | 
    
         
            -
                    or "--undetected" in sys_argv
         
     | 
| 
       467 
     | 
    
         
            -
                    or "--uc" in sys_argv
         
     | 
| 
       468 
     | 
    
         
            -
                    or "--uc-cdp-events" in sys_argv
         
     | 
| 
       469 
     | 
    
         
            -
                    or "--uc_cdp_events" in sys_argv
         
     | 
| 
       470 
     | 
    
         
            -
                    or "--uc-cdp" in sys_argv
         
     | 
| 
       471 
     | 
    
         
            -
                    or "--uc-subprocess" in sys_argv
         
     | 
| 
       472 
     | 
    
         
            -
                    or "--uc_subprocess" in sys_argv
         
     | 
| 
       473 
     | 
    
         
            -
                    or "--uc-sub" in sys_argv
         
     | 
| 
       474 
     | 
    
         
            -
                ):
         
     | 
| 
       475 
     | 
    
         
            -
                    undetectable = True
         
     | 
| 
       476 
     | 
    
         
            -
                    if uc_subprocess is None and uc_sub is None:
         
     | 
| 
       477 
     | 
    
         
            -
                        uc_subprocess = True  # Use UC as a subprocess by default.
         
     | 
| 
       478 
     | 
    
         
            -
                else:
         
     | 
| 
       479 
     | 
    
         
            -
                    undetectable = False
         
     | 
| 
       480 
     | 
    
         
            -
                if uc_subprocess or uc_sub:
         
     | 
| 
       481 
     | 
    
         
            -
                    uc_subprocess = True
         
     | 
| 
       482 
     | 
    
         
            -
                elif (
         
     | 
| 
       483 
     | 
    
         
            -
                    "--uc-subprocess" in sys_argv
         
     | 
| 
       484 
     | 
    
         
            -
                    or "--uc_subprocess" in sys_argv
         
     | 
| 
       485 
     | 
    
         
            -
                    or "--uc-sub" in sys_argv
         
     | 
| 
       486 
     | 
    
         
            -
                ):
         
     | 
| 
       487 
     | 
    
         
            -
                    uc_subprocess = True
         
     | 
| 
       488 
     | 
    
         
            -
                else:
         
     | 
| 
       489 
     | 
    
         
            -
                    uc_subprocess = False
         
     | 
| 
       490 
     | 
    
         
            -
                if uc_cdp_events or uc_cdp:
         
     | 
| 
       491 
     | 
    
         
            -
                    undetectable = True
         
     | 
| 
       492 
     | 
    
         
            -
                    uc_cdp_events = True
         
     | 
| 
       493 
     | 
    
         
            -
                elif (
         
     | 
| 
       494 
     | 
    
         
            -
                    "--uc-cdp-events" in sys_argv
         
     | 
| 
       495 
     | 
    
         
            -
                    or "--uc_cdp_events" in sys_argv
         
     | 
| 
       496 
     | 
    
         
            -
                    or "--uc-cdp" in sys_argv
         
     | 
| 
       497 
     | 
    
         
            -
                    or "--uc_cdp" in sys_argv
         
     | 
| 
       498 
     | 
    
         
            -
                ):
         
     | 
| 
       499 
     | 
    
         
            -
                    undetectable = True
         
     | 
| 
       500 
     | 
    
         
            -
                    uc_cdp_events = True
         
     | 
| 
       501 
     | 
    
         
            -
                else:
         
     | 
| 
       502 
     | 
    
         
            -
                    uc_cdp_events = False
         
     | 
| 
       503 
754 
     | 
    
         
             
                if log_cdp_events is None and log_cdp is None:
         
     | 
| 
       504 
755 
     | 
    
         
             
                    if (
         
     | 
| 
       505 
756 
     | 
    
         
             
                        "--log-cdp-events" in sys_argv
         
     | 
| 
         @@ -519,6 +770,11 @@ def SB( 
     | 
|
| 
       519 
770 
     | 
    
         
             
                        use_auto_ext = True
         
     | 
| 
       520 
771 
     | 
    
         
             
                    else:
         
     | 
| 
       521 
772 
     | 
    
         
             
                        use_auto_ext = False
         
     | 
| 
      
 773 
     | 
    
         
            +
                if disable_cookies is None:
         
     | 
| 
      
 774 
     | 
    
         
            +
                    if "--disable-cookies" in sys_argv:
         
     | 
| 
      
 775 
     | 
    
         
            +
                        disable_cookies = True
         
     | 
| 
      
 776 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 777 
     | 
    
         
            +
                        disable_cookies = False
         
     | 
| 
       522 
778 
     | 
    
         
             
                if disable_js is None:
         
     | 
| 
       523 
779 
     | 
    
         
             
                    if "--disable-js" in sys_argv:
         
     | 
| 
       524 
780 
     | 
    
         
             
                        disable_js = True
         
     | 
| 
         @@ -532,6 +788,13 @@ def SB( 
     | 
|
| 
       532 
788 
     | 
    
         
             
                    _disable_beforeunload = True
         
     | 
| 
       533 
789 
     | 
    
         
             
                if pls is not None and page_load_strategy is None:
         
     | 
| 
       534 
790 
     | 
    
         
             
                    page_load_strategy = pls
         
     | 
| 
      
 791 
     | 
    
         
            +
                if not page_load_strategy and "--pls=" in arg_join:
         
     | 
| 
      
 792 
     | 
    
         
            +
                    if "--pls=none" in sys_argv or '--pls="none"' in sys_argv:
         
     | 
| 
      
 793 
     | 
    
         
            +
                        page_load_strategy = "none"
         
     | 
| 
      
 794 
     | 
    
         
            +
                    elif "--pls=eager" in sys_argv or '--pls="eager"' in sys_argv:
         
     | 
| 
      
 795 
     | 
    
         
            +
                        page_load_strategy = "eager"
         
     | 
| 
      
 796 
     | 
    
         
            +
                    elif "--pls=normal" in sys_argv or '--pls="normal"' in sys_argv:
         
     | 
| 
      
 797 
     | 
    
         
            +
                        page_load_strategy = "normal"
         
     | 
| 
       535 
798 
     | 
    
         
             
                if page_load_strategy is not None:
         
     | 
| 
       536 
799 
     | 
    
         
             
                    if page_load_strategy.lower() not in ["normal", "eager", "none"]:
         
     | 
| 
       537 
800 
     | 
    
         
             
                        raise Exception(
         
     | 
| 
         @@ -555,6 +818,17 @@ def SB( 
     | 
|
| 
       555 
818 
     | 
    
         
             
                        settings.SKIP_JS_WAITS = True
         
     | 
| 
       556 
819 
     | 
    
         
             
                elif skip_js_waits:
         
     | 
| 
       557 
820 
     | 
    
         
             
                    settings.SKIP_JS_WAITS = skip_js_waits
         
     | 
| 
      
 821 
     | 
    
         
            +
                if wfa is not None and wait_for_angularjs is None:
         
     | 
| 
      
 822 
     | 
    
         
            +
                    wait_for_angularjs = wfa
         
     | 
| 
      
 823 
     | 
    
         
            +
                if wait_for_angularjs is None:
         
     | 
| 
      
 824 
     | 
    
         
            +
                    if (
         
     | 
| 
      
 825 
     | 
    
         
            +
                        "--wfa" in sys_argv
         
     | 
| 
      
 826 
     | 
    
         
            +
                        or "--wait_for_angularjs" in sys_argv
         
     | 
| 
      
 827 
     | 
    
         
            +
                        or "--wait-for-angularjs" in sys_argv
         
     | 
| 
      
 828 
     | 
    
         
            +
                    ):
         
     | 
| 
      
 829 
     | 
    
         
            +
                        settings.WAIT_FOR_ANGULARJS = True
         
     | 
| 
      
 830 
     | 
    
         
            +
                elif wait_for_angularjs:
         
     | 
| 
      
 831 
     | 
    
         
            +
                    settings.WAIT_FOR_ANGULARJS = wait_for_angularjs
         
     | 
| 
       558 
832 
     | 
    
         
             
                if save_screenshot is None:
         
     | 
| 
       559 
833 
     | 
    
         
             
                    if (
         
     | 
| 
       560 
834 
     | 
    
         
             
                        "--screenshot" in sys_argv
         
     | 
| 
         @@ -573,6 +847,7 @@ def SB( 
     | 
|
| 
       573 
847 
     | 
    
         
             
                    save_screenshot = False  # "no_screenshot" has priority
         
     | 
| 
       574 
848 
     | 
    
         
             
                if browser == "safari" and headless:
         
     | 
| 
       575 
849 
     | 
    
         
             
                    headless = False  # Safari doesn't support headless mode
         
     | 
| 
      
 850 
     | 
    
         
            +
                    headless1 = False
         
     | 
| 
       576 
851 
     | 
    
         
             
                if js_checking_on is None:
         
     | 
| 
       577 
852 
     | 
    
         
             
                    if "--check-js" in sys_argv:
         
     | 
| 
       578 
853 
     | 
    
         
             
                        js_checking_on = True
         
     | 
| 
         @@ -627,6 +902,10 @@ def SB( 
     | 
|
| 
       627 
902 
     | 
    
         
             
                        swiftshader = True
         
     | 
| 
       628 
903 
     | 
    
         
             
                    else:
         
     | 
| 
       629 
904 
     | 
    
         
             
                        swiftshader = False
         
     | 
| 
      
 905 
     | 
    
         
            +
                if locale is not None and locale_code is None:
         
     | 
| 
      
 906 
     | 
    
         
            +
                    locale_code = locale
         
     | 
| 
      
 907 
     | 
    
         
            +
                if ad_block is not None and ad_block_on is None:
         
     | 
| 
      
 908 
     | 
    
         
            +
                    ad_block_on = ad_block
         
     | 
| 
       630 
909 
     | 
    
         
             
                if ad_block_on is None:
         
     | 
| 
       631 
910 
     | 
    
         
             
                    if "--ad-block" in sys_argv or "--ad_block" in sys_argv:
         
     | 
| 
       632 
911 
     | 
    
         
             
                        ad_block_on = True
         
     | 
| 
         @@ -641,15 +920,30 @@ def SB( 
     | 
|
| 
       641 
920 
     | 
    
         
             
                        host_resolver_rules = (
         
     | 
| 
       642 
921 
     | 
    
         
             
                            arg_join.split("--host_resolver_rules=")[1].split('"')[0]
         
     | 
| 
       643 
922 
     | 
    
         
             
                        )
         
     | 
| 
       644 
     | 
    
         
            -
                if driver_version is None:
         
     | 
| 
       645 
     | 
    
         
            -
                     
     | 
| 
       646 
     | 
    
         
            -
             
     | 
| 
       647 
     | 
    
         
            -
             
     | 
| 
       648 
     | 
    
         
            -
             
     | 
| 
       649 
     | 
    
         
            -
             
     | 
| 
       650 
     | 
    
         
            -
                         
     | 
| 
       651 
     | 
    
         
            -
                             
     | 
| 
       652 
     | 
    
         
            -
             
     | 
| 
      
 923 
     | 
    
         
            +
                if driver_version is None and "--driver-version" in arg_join:
         
     | 
| 
      
 924 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 925 
     | 
    
         
            +
                    for arg in sys_argv:
         
     | 
| 
      
 926 
     | 
    
         
            +
                        if arg.startswith("--driver-version="):
         
     | 
| 
      
 927 
     | 
    
         
            +
                            driver_version = arg.split("--driver-version=")[1]
         
     | 
| 
      
 928 
     | 
    
         
            +
                            break
         
     | 
| 
      
 929 
     | 
    
         
            +
                        elif arg == "--driver-version" and len(sys_argv) > count + 1:
         
     | 
| 
      
 930 
     | 
    
         
            +
                            driver_version = sys_argv[count + 1]
         
     | 
| 
      
 931 
     | 
    
         
            +
                            if driver_version.startswith("-"):
         
     | 
| 
      
 932 
     | 
    
         
            +
                                driver_version = None
         
     | 
| 
      
 933 
     | 
    
         
            +
                            break
         
     | 
| 
      
 934 
     | 
    
         
            +
                        count += 1
         
     | 
| 
      
 935 
     | 
    
         
            +
                if driver_version is None and "--driver_version" in arg_join:
         
     | 
| 
      
 936 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 937 
     | 
    
         
            +
                    for arg in sys_argv:
         
     | 
| 
      
 938 
     | 
    
         
            +
                        if arg.startswith("--driver_version="):
         
     | 
| 
      
 939 
     | 
    
         
            +
                            driver_version = arg.split("--driver_version=")[1]
         
     | 
| 
      
 940 
     | 
    
         
            +
                            break
         
     | 
| 
      
 941 
     | 
    
         
            +
                        elif arg == "--driver_version" and len(sys_argv) > count + 1:
         
     | 
| 
      
 942 
     | 
    
         
            +
                            driver_version = sys_argv[count + 1]
         
     | 
| 
      
 943 
     | 
    
         
            +
                            if driver_version.startswith("-"):
         
     | 
| 
      
 944 
     | 
    
         
            +
                                driver_version = None
         
     | 
| 
      
 945 
     | 
    
         
            +
                            break
         
     | 
| 
      
 946 
     | 
    
         
            +
                        count += 1
         
     | 
| 
       653 
947 
     | 
    
         
             
                if highlights is not None:
         
     | 
| 
       654 
948 
     | 
    
         
             
                    try:
         
     | 
| 
       655 
949 
     | 
    
         
             
                        highlights = int(highlights)
         
     | 
| 
         @@ -676,9 +970,11 @@ def SB( 
     | 
|
| 
       676 
970 
     | 
    
         
             
                    sb_config.is_nosetest = False
         
     | 
| 
       677 
971 
     | 
    
         
             
                sb_config.is_context_manager = True
         
     | 
| 
       678 
972 
     | 
    
         
             
                sb_config.headless = headless
         
     | 
| 
      
 973 
     | 
    
         
            +
                sb_config.headless1 = headless1
         
     | 
| 
       679 
974 
     | 
    
         
             
                sb_config.headless2 = headless2
         
     | 
| 
       680 
975 
     | 
    
         
             
                sb_config.headed = headed
         
     | 
| 
       681 
976 
     | 
    
         
             
                sb_config.xvfb = xvfb
         
     | 
| 
      
 977 
     | 
    
         
            +
                sb_config.xvfb_metrics = xvfb_metrics
         
     | 
| 
       682 
978 
     | 
    
         
             
                sb_config.start_page = start_page
         
     | 
| 
       683 
979 
     | 
    
         
             
                sb_config.locale_code = locale_code
         
     | 
| 
       684 
980 
     | 
    
         
             
                sb_config.protocol = protocol
         
     | 
| 
         @@ -715,13 +1011,15 @@ def SB( 
     | 
|
| 
       715 
1011 
     | 
    
         
             
                sb_config.log_cdp_events = log_cdp_events
         
     | 
| 
       716 
1012 
     | 
    
         
             
                sb_config.no_sandbox = None
         
     | 
| 
       717 
1013 
     | 
    
         
             
                sb_config.disable_gpu = None
         
     | 
| 
      
 1014 
     | 
    
         
            +
                sb_config.disable_cookies = disable_cookies
         
     | 
| 
       718 
1015 
     | 
    
         
             
                sb_config.disable_js = disable_js
         
     | 
| 
       719 
1016 
     | 
    
         
             
                sb_config._multithreaded = False
         
     | 
| 
       720 
1017 
     | 
    
         
             
                sb_config.reuse_session = False
         
     | 
| 
       721 
1018 
     | 
    
         
             
                sb_config.crumbs = False
         
     | 
| 
       722 
1019 
     | 
    
         
             
                sb_config.final_debug = False
         
     | 
| 
       723 
1020 
     | 
    
         
             
                sb_config.visual_baseline = False
         
     | 
| 
       724 
     | 
    
         
            -
                sb_config. 
     | 
| 
      
 1021 
     | 
    
         
            +
                sb_config.window_position = window_position
         
     | 
| 
      
 1022 
     | 
    
         
            +
                sb_config.window_size = window_size
         
     | 
| 
       725 
1023 
     | 
    
         
             
                sb_config.maximize_option = maximize_option
         
     | 
| 
       726 
1024 
     | 
    
         
             
                sb_config._disable_beforeunload = _disable_beforeunload
         
     | 
| 
       727 
1025 
     | 
    
         
             
                sb_config.save_screenshot = save_screenshot
         
     | 
| 
         @@ -779,9 +1077,11 @@ def SB( 
     | 
|
| 
       779 
1077 
     | 
    
         
             
                sb.is_nosetest = False
         
     | 
| 
       780 
1078 
     | 
    
         
             
                sb.is_context_manager = sb_config.is_context_manager
         
     | 
| 
       781 
1079 
     | 
    
         
             
                sb.headless = sb_config.headless
         
     | 
| 
      
 1080 
     | 
    
         
            +
                sb.headless1 = sb_config.headless1
         
     | 
| 
       782 
1081 
     | 
    
         
             
                sb.headless2 = sb_config.headless2
         
     | 
| 
       783 
1082 
     | 
    
         
             
                sb.headed = sb_config.headed
         
     | 
| 
       784 
1083 
     | 
    
         
             
                sb.xvfb = sb_config.xvfb
         
     | 
| 
      
 1084 
     | 
    
         
            +
                sb.xvfb_metrics = sb_config.xvfb_metrics
         
     | 
| 
       785 
1085 
     | 
    
         
             
                sb.start_page = sb_config.start_page
         
     | 
| 
       786 
1086 
     | 
    
         
             
                sb.locale_code = sb_config.locale_code
         
     | 
| 
       787 
1087 
     | 
    
         
             
                sb.protocol = sb_config.protocol
         
     | 
| 
         @@ -820,12 +1120,14 @@ def SB( 
     | 
|
| 
       820 
1120 
     | 
    
         
             
                sb.log_cdp_events = sb_config.log_cdp_events
         
     | 
| 
       821 
1121 
     | 
    
         
             
                sb.no_sandbox = sb_config.no_sandbox
         
     | 
| 
       822 
1122 
     | 
    
         
             
                sb.disable_gpu = sb_config.disable_gpu
         
     | 
| 
      
 1123 
     | 
    
         
            +
                sb.disable_cookies = sb_config.disable_cookies
         
     | 
| 
       823 
1124 
     | 
    
         
             
                sb.disable_js = sb_config.disable_js
         
     | 
| 
       824 
1125 
     | 
    
         
             
                sb._multithreaded = sb_config._multithreaded
         
     | 
| 
       825 
1126 
     | 
    
         
             
                sb._reuse_session = sb_config.reuse_session
         
     | 
| 
       826 
1127 
     | 
    
         
             
                sb._crumbs = sb_config.crumbs
         
     | 
| 
       827 
1128 
     | 
    
         
             
                sb._final_debug = sb_config.final_debug
         
     | 
| 
       828 
1129 
     | 
    
         
             
                sb.visual_baseline = sb_config.visual_baseline
         
     | 
| 
      
 1130 
     | 
    
         
            +
                sb.window_position = sb_config.window_position
         
     | 
| 
       829 
1131 
     | 
    
         
             
                sb.window_size = sb_config.window_size
         
     | 
| 
       830 
1132 
     | 
    
         
             
                sb.maximize_option = sb_config.maximize_option
         
     | 
| 
       831 
1133 
     | 
    
         
             
                sb._disable_beforeunload = sb_config._disable_beforeunload
         
     | 
| 
         @@ -881,11 +1183,6 @@ def SB( 
     | 
|
| 
       881 
1183 
     | 
    
         
             
                test_name = None
         
     | 
| 
       882 
1184 
     | 
    
         
             
                terminal_width = shared_utils.get_terminal_width()
         
     | 
| 
       883 
1185 
     | 
    
         
             
                if test:
         
     | 
| 
       884 
     | 
    
         
            -
                    import colorama
         
     | 
| 
       885 
     | 
    
         
            -
                    if is_windows and hasattr(colorama, "just_fix_windows_console"):
         
     | 
| 
       886 
     | 
    
         
            -
                        colorama.just_fix_windows_console()
         
     | 
| 
       887 
     | 
    
         
            -
                    else:
         
     | 
| 
       888 
     | 
    
         
            -
                        colorama.init(autoreset=True)
         
     | 
| 
       889 
1186 
     | 
    
         
             
                    c1 = colorama.Fore.GREEN
         
     | 
| 
       890 
1187 
     | 
    
         
             
                    b1 = colorama.Style.BRIGHT
         
     | 
| 
       891 
1188 
     | 
    
         
             
                    cr = colorama.Style.RESET_ALL
         
     | 
| 
         @@ -908,7 +1205,7 @@ def SB( 
     | 
|
| 
       908 
1205 
     | 
    
         
             
                    from seleniumbase.core import download_helper
         
     | 
| 
       909 
1206 
     | 
    
         
             
                    from seleniumbase.core import proxy_helper
         
     | 
| 
       910 
1207 
     | 
    
         | 
| 
       911 
     | 
    
         
            -
                    log_helper.log_folder_setup(constants.Logs.LATEST +  
     | 
| 
      
 1208 
     | 
    
         
            +
                    log_helper.log_folder_setup(constants.Logs.LATEST + os.sep)
         
     | 
| 
       912 
1209 
     | 
    
         
             
                    log_helper.clear_empty_logs()
         
     | 
| 
       913 
1210 
     | 
    
         
             
                    download_helper.reset_downloads_folder()
         
     | 
| 
       914 
1211 
     | 
    
         
             
                    if not sb_config.multi_proxy:
         
     | 
| 
         @@ -928,13 +1225,16 @@ def SB( 
     | 
|
| 
       928 
1225 
     | 
    
         
             
                    sb._has_failure = True
         
     | 
| 
       929 
1226 
     | 
    
         
             
                    exception = e
         
     | 
| 
       930 
1227 
     | 
    
         
             
                    test_passed = False
         
     | 
| 
       931 
     | 
    
         
            -
                    if not test_name:
         
     | 
| 
      
 1228 
     | 
    
         
            +
                    if (test or inner_test) and not test_name:
         
     | 
| 
      
 1229 
     | 
    
         
            +
                        print(e)
         
     | 
| 
      
 1230 
     | 
    
         
            +
                        return
         
     | 
| 
      
 1231 
     | 
    
         
            +
                    elif not test_name:
         
     | 
| 
       932 
1232 
     | 
    
         
             
                        raise
         
     | 
| 
       933 
1233 
     | 
    
         
             
                    else:
         
     | 
| 
       934 
1234 
     | 
    
         
             
                        the_traceback = traceback.format_exc().strip()
         
     | 
| 
       935 
1235 
     | 
    
         
             
                        try:
         
     | 
| 
       936 
1236 
     | 
    
         
             
                            p2 = the_traceback.split(', in ')[1].split('", line ')[0]
         
     | 
| 
       937 
     | 
    
         
            -
                            filename = p2.split( 
     | 
| 
      
 1237 
     | 
    
         
            +
                            filename = p2.split(os.sep)[-1]
         
     | 
| 
       938 
1238 
     | 
    
         
             
                            sb.cm_filename = filename
         
     | 
| 
       939 
1239 
     | 
    
         
             
                        except Exception:
         
     | 
| 
       940 
1240 
     | 
    
         
             
                            sb.cm_filename = None
         
     | 
| 
         @@ -956,6 +1256,19 @@ def SB( 
     | 
|
| 
       956 
1256 
     | 
    
         
             
                        print(traceback.format_exc().strip())
         
     | 
| 
       957 
1257 
     | 
    
         
             
                        if test and not test_passed:
         
     | 
| 
       958 
1258 
     | 
    
         
             
                            print("********** ERROR: The test AND the tearDown() FAILED!")
         
     | 
| 
      
 1259 
     | 
    
         
            +
                    if (
         
     | 
| 
      
 1260 
     | 
    
         
            +
                        hasattr(sb_config, "_virtual_display")
         
     | 
| 
      
 1261 
     | 
    
         
            +
                        and sb_config._virtual_display
         
     | 
| 
      
 1262 
     | 
    
         
            +
                        and hasattr(sb_config._virtual_display, "stop")
         
     | 
| 
      
 1263 
     | 
    
         
            +
                    ):
         
     | 
| 
      
 1264 
     | 
    
         
            +
                        try:
         
     | 
| 
      
 1265 
     | 
    
         
            +
                            sb_config._virtual_display.stop()
         
     | 
| 
      
 1266 
     | 
    
         
            +
                            sb_config._virtual_display = None
         
     | 
| 
      
 1267 
     | 
    
         
            +
                            sb_config.headless_active = False
         
     | 
| 
      
 1268 
     | 
    
         
            +
                        except AttributeError:
         
     | 
| 
      
 1269 
     | 
    
         
            +
                            pass
         
     | 
| 
      
 1270 
     | 
    
         
            +
                        except Exception:
         
     | 
| 
      
 1271 
     | 
    
         
            +
                            pass
         
     | 
| 
       959 
1272 
     | 
    
         
             
                    end_time = time.time()
         
     | 
| 
       960 
1273 
     | 
    
         
             
                    run_time = end_time - start_time
         
     | 
| 
       961 
1274 
     | 
    
         
             
                    sb_config = sb_config_backup
         
     |