Skip to content

Commit

Permalink
Merge pull request #2232 from seleniumbase/fix-headless-uc-mode-and-o…
Browse files Browse the repository at this point in the history
…ther-updates

Fix headless UC Mode, and other updates
  • Loading branch information
mdmintz committed Nov 1, 2023
2 parents e1db913 + df5e394 commit 466f8d4
Show file tree
Hide file tree
Showing 14 changed files with 68 additions and 43 deletions.
6 changes: 3 additions & 3 deletions examples/boilerplates/samples/google_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ class GoogleTests(BaseCase):
def test_google_dot_com(self):
self.open("https://google.com/ncr")
self.assert_title_contains("Google")
self.sleep(0.25)
self.sleep(0.05)
self.save_screenshot_to_logs() # ("./latest_logs" folder)
self.sleep(0.15)
self.wait_for_element('iframe[role="presentation"]')
self.hide_elements('iframe') # Hide "Sign in" pop-up
self.sleep(0.15)
self.sleep(0.05)
self.save_screenshot_to_logs()
self.type(HomePage.search_box, "github.com")
self.assert_element(HomePage.search_button)
Expand Down
4 changes: 2 additions & 2 deletions examples/boilerplates/samples/test_page_objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ def assert_google_title(self, sb):
sb.assert_title_contains("Google")

def hide_sign_in_pop_up(self, sb):
sb.sleep(0.25)
sb.wait_for_element('iframe[role="presentation"]')
sb.hide_elements('iframe')
sb.sleep(0.15)
sb.sleep(0.05)

def do_search(self, sb, search_term):
sb.sleep(0.05)
Expand Down
1 change: 1 addition & 0 deletions examples/coffee_cart_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ def test_buy_one_cappuccino(self):
@parameterized.expand([[False], [True]])
def test_coffee_promo_with_preview(self, accept_promo):
self.open("https://seleniumbase.io/coffee/")
self.assert_title("Coffee Cart")
self.click('div[data-test="Espresso"]')
self.click('div[data-test="Americano"]')
self.click('div[data-test="Cafe_Latte"]')
Expand Down
3 changes: 3 additions & 0 deletions examples/offline_examples/test_user_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ def test_get_user_agent(self):
print(msg)
self.skip(msg)
print("\n--------------------------")
if not self.headless:
self.open("chrome://version/")
self.highlight("#useragent", loops=8)
try:
self.execute_cdp_cmd(
"Network.setUserAgentOverride",
Expand Down
4 changes: 2 additions & 2 deletions examples/test_pytest_parametrize.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"value", ["List of Features", "Command Line Options"]
)
def test_sb_fixture_with_no_class(sb, value):
sb.open("seleniumbase.github.io/help_docs/install/")
sb.open("seleniumbase.io/help_docs/install/")
sb.type('input[aria-label="Search"]', value)
sb.click("nav h1 mark")
sb.assert_title_contains(value)
Expand All @@ -17,7 +17,7 @@ class Test_SB_Fixture:
"value", ["Console Scripts", "API Reference"]
)
def test_sb_fixture_inside_class(self, sb, value):
sb.open("seleniumbase.github.io/help_docs/install/")
sb.open("seleniumbase.io/help_docs/install/")
sb.type('input[aria-label="Search"]', value)
sb.click("nav h1 mark")
sb.assert_title_contains(value)
Expand Down
1 change: 1 addition & 0 deletions examples/test_todomvc.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def test_todomvc(self, framework):
self.assert_in(framework, title.lower())
new_todo_input = "input.new-todo"
todo_count_span = "span.todo-count"
self.wait_for_ready_state_complete()
self.type(new_todo_input, "Learn Python\n")
self.type(new_todo_input, "Learn JavaScript\n")
self.type(new_todo_input, "Learn SeleniumBase\n")
Expand Down
6 changes: 3 additions & 3 deletions examples/test_url_asserts.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

class URLTestClass(BaseCase):
def test_url_asserts(self):
self.open("https://seleniumbase.github.io/")
self.assert_url("https://seleniumbase.github.io/")
self.assert_title_contains("SeleniumBase")
self.open("https://seleniumbase.io/help_docs/how_it_works/")
self.assert_url("https://seleniumbase.io/help_docs/how_it_works/")
self.assert_title_contains("How it Works")
self.js_click('nav a:contains("Coffee Cart")')
self.assert_url_contains("/coffee")
self.assert_title("Coffee Cart")
2 changes: 1 addition & 1 deletion mkdocs_build/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ PyYAML>=6.0.1
pymdown-extensions>=10.3.1
pipdeptree>=2.13.0
python-dateutil>=2.8.2
Markdown==3.5
Markdown==3.5.1
markdown2==2.4.10
MarkupSafe==2.1.3
Jinja2==3.1.2
Expand Down
6 changes: 3 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@ pip>=23.3.1
packaging>=23.2
setuptools>=68.0.0;python_version<"3.8"
setuptools>=68.2.2;python_version>="3.8"
wheel>=0.41.2
wheel>=0.41.3
attrs>=23.1.0
certifi>=2023.7.22
filelock>=3.12.2;python_version<"3.8"
filelock>=3.13.0;python_version>="3.8"
filelock>=3.13.1;python_version>="3.8"
platformdirs>=3.11.0
parse>=1.19.1
parse-type>=0.6.2
six==1.16.0
idna==3.4
chardet==5.2.0
charset-normalizer==3.3.1
charset-normalizer==3.3.2
urllib3>=1.26.18,<2;python_version<"3.10"
urllib3>=1.26.18,<2.1.0;python_version>="3.10"
requests==2.31.0
Expand Down
2 changes: 1 addition & 1 deletion seleniumbase/__version__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# seleniumbase package
__version__ = "4.20.8"
__version__ = "4.20.9"
10 changes: 8 additions & 2 deletions seleniumbase/console_scripts/sb_mkdir.py
Original file line number Diff line number Diff line change
Expand Up @@ -624,9 +624,15 @@ def main():
data.append("class GoogleTests(BaseCase):")
data.append(" def test_google_dot_com(self):")
data.append(' self.open("https://google.com/ncr")')
data.append(" self.sleep(0.4)")
data.append(' self.assert_title_contains("Google")')
data.append(" self.sleep(0.05)")
data.append(" self.save_screenshot_to_logs()")
data.append(
" self.wait_for_element('iframe[role=\"presentation\"]')"
)
data.append(" self.hide_elements('iframe')")
data.append(" self.sleep(0.05)")
data.append(" self.save_screenshot_to_logs()")
data.append(" self.sleep(0.2)")
data.append(' self.type(HomePage.search_box, "github.com")')
data.append(" self.assert_element(HomePage.search_button)")
data.append(" self.assert_element(HomePage.feeling_lucky_button)")
Expand Down
22 changes: 22 additions & 0 deletions seleniumbase/core/browser_launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -756,6 +756,16 @@ def _set_chrome_options(
prefs["download.prompt_for_download"] = False
prefs["download.directory_upgrade"] = True
prefs["safebrowsing.enabled"] = False
prefs["omnibox-max-zero-suggest-matches"] = 0
prefs["omnibox-use-existing-autocomplete-client"] = 0
prefs["omnibox-trending-zero-prefix-suggestions-on-ntp"] = 0
prefs["omnibox-local-history-zero-suggest-beyond-ntp"] = 0
prefs["omnibox-on-focus-suggestions-contextual-web"] = 0
prefs["omnibox-on-focus-suggestions-srp"] = 0
prefs["omnibox-zero-suggest-prefetching"] = 0
prefs["omnibox-zero-suggest-prefetching-on-srp"] = 0
prefs["omnibox-zero-suggest-prefetching-on-web"] = 0
prefs["omnibox-zero-suggest-in-memory-caching"] = 0
prefs["default_content_setting_values.notifications"] = 0
prefs["content_settings.exceptions.automatic_downloads.*.setting"] = 1
prefs["safebrowsing.disable_download_protection"] = True
Expand Down Expand Up @@ -2236,6 +2246,16 @@ def get_local_driver(
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": False,
"omnibox-max-zero-suggest-matches": 0,
"omnibox-use-existing-autocomplete-client": 0,
"omnibox-trending-zero-prefix-suggestions-on-ntp": 0,
"omnibox-local-history-zero-suggest-beyond-ntp": 0,
"omnibox-on-focus-suggestions-contextual-web": 0,
"omnibox-on-focus-suggestions-srp": 0,
"omnibox-zero-suggest-prefetching": 0,
"omnibox-zero-suggest-prefetching-on-srp": 0,
"omnibox-zero-suggest-prefetching-on-web": 0,
"omnibox-zero-suggest-in-memory-caching": 0,
"safebrowsing.disable_download_protection": True,
"default_content_setting_values.notifications": 0,
"default_content_settings.popups": 0,
Expand Down Expand Up @@ -3233,6 +3253,7 @@ def get_local_driver(
False, # undetectable
False, # uc_cdp_events
False, # uc_subprocess
False, # log_cdp_events
no_sandbox,
disable_gpu,
False, # headless2
Expand Down Expand Up @@ -3448,6 +3469,7 @@ def get_local_driver(
False, # undetectable
False, # uc_cdp_events
False, # uc_subprocess
False, # log_cdp_events
no_sandbox,
disable_gpu,
False, # headless2
Expand Down
38 changes: 15 additions & 23 deletions seleniumbase/fixtures/base_case.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,9 +221,7 @@ def open(self, url):
self.__check_scope()
self._check_browser()
if self.__needs_minimum_wait():
time.sleep(0.03)
if self.undetectable:
time.sleep(0.02)
time.sleep(0.04)
pre_action_url = None
try:
pre_action_url = self.driver.current_url
Expand Down Expand Up @@ -320,22 +318,15 @@ def open(self, url):
else:
raise
if (
self.undetectable
or (
self.driver.current_url == pre_action_url
and pre_action_url != url
)
self.driver.current_url == pre_action_url
and pre_action_url != url
):
time.sleep(0.1) # Make sure load happens
if settings.WAIT_FOR_RSC_ON_PAGE_LOADS:
if not self.undetectable:
self.wait_for_ready_state_complete()
else:
time.sleep(0.15)
if self.__needs_minimum_wait():
time.sleep(0.07) # Force a minimum wait, even if skipping waits.
if self.undetectable:
time.sleep(0.02)
time.sleep(0.08) # Force a minimum wait, even if skipping waits.
if self.undetectable:
self.__uc_frame_layer = 0
if self.demo_mode:
Expand Down Expand Up @@ -395,7 +386,7 @@ def click(
self.__shadow_click(selector, timeout)
return
if self.__needs_minimum_wait() or self.browser == "safari":
time.sleep(0.04)
time.sleep(0.05)
element = page_actions.wait_for_element_visible(
self.driver,
selector,
Expand Down Expand Up @@ -480,6 +471,8 @@ def click(
self.js_click(selector, by=by)
else:
self.jquery_click(selector, by=by)
if self.__needs_minimum_wait():
time.sleep(0.04)
return
except Exception:
pass
Expand Down Expand Up @@ -638,14 +631,14 @@ def click(
self.__ad_block_as_needed()
self.__disable_beforeunload_as_needed()
if self.__needs_minimum_wait():
time.sleep(0.04)
time.sleep(0.06)
except Exception:
try:
self.wait_for_ready_state_complete()
except Exception:
pass
if self.__needs_minimum_wait():
time.sleep(0.03)
time.sleep(0.04)
else:
time.sleep(0.08)
if self.demo_mode:
Expand Down Expand Up @@ -907,7 +900,7 @@ def update_text(
if not self.demo_mode and not self.slow_mode:
self.__scroll_to_element(element, selector, by)
if self.__needs_minimum_wait():
time.sleep(0.01)
time.sleep(0.02)
try:
element.clear() # May need https://stackoverflow.com/a/50691625
backspaces = Keys.BACK_SPACE * 42 # Is the answer to everything
Expand Down Expand Up @@ -952,9 +945,7 @@ def update_text(
if settings.WAIT_FOR_RSC_ON_PAGE_LOADS:
self.wait_for_ready_state_complete()
if self.__needs_minimum_wait():
time.sleep(0.03)
if self.undetectable:
time.sleep(0.025)
time.sleep(0.04)
except Exception:
self.wait_for_ready_state_complete()
time.sleep(0.14)
Expand Down Expand Up @@ -4338,12 +4329,13 @@ def wait_for_ready_state_complete(self, timeout=None):
self.__ad_block_as_needed()
self.__disable_beforeunload_as_needed()
if (
self.undetectable
and self.page_load_strategy == "none"
self.page_load_strategy == "none"
and hasattr(settings, "SKIP_JS_WAITS")
and settings.SKIP_JS_WAITS
):
time.sleep(0.05)
time.sleep(0.01)
if self.undetectable:
time.sleep(0.035)
return True

def wait_for_angularjs(self, timeout=None, **kwargs):
Expand Down
6 changes: 3 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,18 +135,18 @@
'packaging>=23.2',
'setuptools>=68.0.0;python_version<"3.8"',
'setuptools>=68.2.2;python_version>="3.8"',
'wheel>=0.41.2',
'wheel>=0.41.3',
'attrs>=23.1.0',
"certifi>=2023.7.22",
'filelock>=3.12.2;python_version<"3.8"',
'filelock>=3.13.0;python_version>="3.8"',
'filelock>=3.13.1;python_version>="3.8"',
'platformdirs>=3.11.0',
'parse>=1.19.1',
'parse-type>=0.6.2',
"six==1.16.0",
"idna==3.4",
'chardet==5.2.0',
'charset-normalizer==3.3.1',
'charset-normalizer==3.3.2',
'urllib3>=1.26.18,<2;python_version<"3.10"',
'urllib3>=1.26.18,<2.1.0;python_version>="3.10"',
'requests==2.31.0',
Expand Down

0 comments on commit 466f8d4

Please sign in to comment.