Skip to content

Commit 466f8d4

Browse files
authored
Merge pull request #2232 from seleniumbase/fix-headless-uc-mode-and-other-updates
Fix headless UC Mode, and other updates
2 parents e1db913 + df5e394 commit 466f8d4

File tree

14 files changed

+68
-43
lines changed

14 files changed

+68
-43
lines changed

examples/boilerplates/samples/google_test.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ class GoogleTests(BaseCase):
77
def test_google_dot_com(self):
88
self.open("https://google.com/ncr")
99
self.assert_title_contains("Google")
10-
self.sleep(0.25)
10+
self.sleep(0.05)
1111
self.save_screenshot_to_logs() # ("./latest_logs" folder)
12-
self.sleep(0.15)
12+
self.wait_for_element('iframe[role="presentation"]')
1313
self.hide_elements('iframe') # Hide "Sign in" pop-up
14-
self.sleep(0.15)
14+
self.sleep(0.05)
1515
self.save_screenshot_to_logs()
1616
self.type(HomePage.search_box, "github.com")
1717
self.assert_element(HomePage.search_button)

examples/boilerplates/samples/test_page_objects.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ def assert_google_title(self, sb):
1111
sb.assert_title_contains("Google")
1212

1313
def hide_sign_in_pop_up(self, sb):
14-
sb.sleep(0.25)
14+
sb.wait_for_element('iframe[role="presentation"]')
1515
sb.hide_elements('iframe')
16-
sb.sleep(0.15)
16+
sb.sleep(0.05)
1717

1818
def do_search(self, sb, search_term):
1919
sb.sleep(0.05)

examples/coffee_cart_tests.py

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def test_buy_one_cappuccino(self):
2929
@parameterized.expand([[False], [True]])
3030
def test_coffee_promo_with_preview(self, accept_promo):
3131
self.open("https://seleniumbase.io/coffee/")
32+
self.assert_title("Coffee Cart")
3233
self.click('div[data-test="Espresso"]')
3334
self.click('div[data-test="Americano"]')
3435
self.click('div[data-test="Cafe_Latte"]')

examples/offline_examples/test_user_agent.py

+3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ def test_get_user_agent(self):
1616
print(msg)
1717
self.skip(msg)
1818
print("\n--------------------------")
19+
if not self.headless:
20+
self.open("chrome://version/")
21+
self.highlight("#useragent", loops=8)
1922
try:
2023
self.execute_cdp_cmd(
2124
"Network.setUserAgentOverride",

examples/test_pytest_parametrize.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"value", ["List of Features", "Command Line Options"]
66
)
77
def test_sb_fixture_with_no_class(sb, value):
8-
sb.open("seleniumbase.github.io/help_docs/install/")
8+
sb.open("seleniumbase.io/help_docs/install/")
99
sb.type('input[aria-label="Search"]', value)
1010
sb.click("nav h1 mark")
1111
sb.assert_title_contains(value)
@@ -17,7 +17,7 @@ class Test_SB_Fixture:
1717
"value", ["Console Scripts", "API Reference"]
1818
)
1919
def test_sb_fixture_inside_class(self, sb, value):
20-
sb.open("seleniumbase.github.io/help_docs/install/")
20+
sb.open("seleniumbase.io/help_docs/install/")
2121
sb.type('input[aria-label="Search"]', value)
2222
sb.click("nav h1 mark")
2323
sb.assert_title_contains(value)

examples/test_todomvc.py

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def test_todomvc(self, framework):
1616
self.assert_in(framework, title.lower())
1717
new_todo_input = "input.new-todo"
1818
todo_count_span = "span.todo-count"
19+
self.wait_for_ready_state_complete()
1920
self.type(new_todo_input, "Learn Python\n")
2021
self.type(new_todo_input, "Learn JavaScript\n")
2122
self.type(new_todo_input, "Learn SeleniumBase\n")

examples/test_url_asserts.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
class URLTestClass(BaseCase):
66
def test_url_asserts(self):
7-
self.open("https://seleniumbase.github.io/")
8-
self.assert_url("https://seleniumbase.github.io/")
9-
self.assert_title_contains("SeleniumBase")
7+
self.open("https://seleniumbase.io/help_docs/how_it_works/")
8+
self.assert_url("https://seleniumbase.io/help_docs/how_it_works/")
9+
self.assert_title_contains("How it Works")
1010
self.js_click('nav a:contains("Coffee Cart")')
1111
self.assert_url_contains("/coffee")
1212
self.assert_title("Coffee Cart")

mkdocs_build/requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ PyYAML>=6.0.1
66
pymdown-extensions>=10.3.1
77
pipdeptree>=2.13.0
88
python-dateutil>=2.8.2
9-
Markdown==3.5
9+
Markdown==3.5.1
1010
markdown2==2.4.10
1111
MarkupSafe==2.1.3
1212
Jinja2==3.1.2

requirements.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ pip>=23.3.1
22
packaging>=23.2
33
setuptools>=68.0.0;python_version<"3.8"
44
setuptools>=68.2.2;python_version>="3.8"
5-
wheel>=0.41.2
5+
wheel>=0.41.3
66
attrs>=23.1.0
77
certifi>=2023.7.22
88
filelock>=3.12.2;python_version<"3.8"
9-
filelock>=3.13.0;python_version>="3.8"
9+
filelock>=3.13.1;python_version>="3.8"
1010
platformdirs>=3.11.0
1111
parse>=1.19.1
1212
parse-type>=0.6.2
1313
six==1.16.0
1414
idna==3.4
1515
chardet==5.2.0
16-
charset-normalizer==3.3.1
16+
charset-normalizer==3.3.2
1717
urllib3>=1.26.18,<2;python_version<"3.10"
1818
urllib3>=1.26.18,<2.1.0;python_version>="3.10"
1919
requests==2.31.0

seleniumbase/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "4.20.8"
2+
__version__ = "4.20.9"

seleniumbase/console_scripts/sb_mkdir.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -624,9 +624,15 @@ def main():
624624
data.append("class GoogleTests(BaseCase):")
625625
data.append(" def test_google_dot_com(self):")
626626
data.append(' self.open("https://google.com/ncr")')
627-
data.append(" self.sleep(0.4)")
627+
data.append(' self.assert_title_contains("Google")')
628+
data.append(" self.sleep(0.05)")
629+
data.append(" self.save_screenshot_to_logs()")
630+
data.append(
631+
" self.wait_for_element('iframe[role=\"presentation\"]')"
632+
)
633+
data.append(" self.hide_elements('iframe')")
634+
data.append(" self.sleep(0.05)")
628635
data.append(" self.save_screenshot_to_logs()")
629-
data.append(" self.sleep(0.2)")
630636
data.append(' self.type(HomePage.search_box, "github.com")')
631637
data.append(" self.assert_element(HomePage.search_button)")
632638
data.append(" self.assert_element(HomePage.feeling_lucky_button)")

seleniumbase/core/browser_launcher.py

+22
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,16 @@ def _set_chrome_options(
756756
prefs["download.prompt_for_download"] = False
757757
prefs["download.directory_upgrade"] = True
758758
prefs["safebrowsing.enabled"] = False
759+
prefs["omnibox-max-zero-suggest-matches"] = 0
760+
prefs["omnibox-use-existing-autocomplete-client"] = 0
761+
prefs["omnibox-trending-zero-prefix-suggestions-on-ntp"] = 0
762+
prefs["omnibox-local-history-zero-suggest-beyond-ntp"] = 0
763+
prefs["omnibox-on-focus-suggestions-contextual-web"] = 0
764+
prefs["omnibox-on-focus-suggestions-srp"] = 0
765+
prefs["omnibox-zero-suggest-prefetching"] = 0
766+
prefs["omnibox-zero-suggest-prefetching-on-srp"] = 0
767+
prefs["omnibox-zero-suggest-prefetching-on-web"] = 0
768+
prefs["omnibox-zero-suggest-in-memory-caching"] = 0
759769
prefs["default_content_setting_values.notifications"] = 0
760770
prefs["content_settings.exceptions.automatic_downloads.*.setting"] = 1
761771
prefs["safebrowsing.disable_download_protection"] = True
@@ -2236,6 +2246,16 @@ def get_local_driver(
22362246
"download.prompt_for_download": False,
22372247
"download.directory_upgrade": True,
22382248
"safebrowsing.enabled": False,
2249+
"omnibox-max-zero-suggest-matches": 0,
2250+
"omnibox-use-existing-autocomplete-client": 0,
2251+
"omnibox-trending-zero-prefix-suggestions-on-ntp": 0,
2252+
"omnibox-local-history-zero-suggest-beyond-ntp": 0,
2253+
"omnibox-on-focus-suggestions-contextual-web": 0,
2254+
"omnibox-on-focus-suggestions-srp": 0,
2255+
"omnibox-zero-suggest-prefetching": 0,
2256+
"omnibox-zero-suggest-prefetching-on-srp": 0,
2257+
"omnibox-zero-suggest-prefetching-on-web": 0,
2258+
"omnibox-zero-suggest-in-memory-caching": 0,
22392259
"safebrowsing.disable_download_protection": True,
22402260
"default_content_setting_values.notifications": 0,
22412261
"default_content_settings.popups": 0,
@@ -3233,6 +3253,7 @@ def get_local_driver(
32333253
False, # undetectable
32343254
False, # uc_cdp_events
32353255
False, # uc_subprocess
3256+
False, # log_cdp_events
32363257
no_sandbox,
32373258
disable_gpu,
32383259
False, # headless2
@@ -3448,6 +3469,7 @@ def get_local_driver(
34483469
False, # undetectable
34493470
False, # uc_cdp_events
34503471
False, # uc_subprocess
3472+
False, # log_cdp_events
34513473
no_sandbox,
34523474
disable_gpu,
34533475
False, # headless2

seleniumbase/fixtures/base_case.py

+15-23
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,7 @@ def open(self, url):
221221
self.__check_scope()
222222
self._check_browser()
223223
if self.__needs_minimum_wait():
224-
time.sleep(0.03)
225-
if self.undetectable:
226-
time.sleep(0.02)
224+
time.sleep(0.04)
227225
pre_action_url = None
228226
try:
229227
pre_action_url = self.driver.current_url
@@ -320,22 +318,15 @@ def open(self, url):
320318
else:
321319
raise
322320
if (
323-
self.undetectable
324-
or (
325-
self.driver.current_url == pre_action_url
326-
and pre_action_url != url
327-
)
321+
self.driver.current_url == pre_action_url
322+
and pre_action_url != url
328323
):
329324
time.sleep(0.1) # Make sure load happens
330325
if settings.WAIT_FOR_RSC_ON_PAGE_LOADS:
331326
if not self.undetectable:
332327
self.wait_for_ready_state_complete()
333-
else:
334-
time.sleep(0.15)
335328
if self.__needs_minimum_wait():
336-
time.sleep(0.07) # Force a minimum wait, even if skipping waits.
337-
if self.undetectable:
338-
time.sleep(0.02)
329+
time.sleep(0.08) # Force a minimum wait, even if skipping waits.
339330
if self.undetectable:
340331
self.__uc_frame_layer = 0
341332
if self.demo_mode:
@@ -395,7 +386,7 @@ def click(
395386
self.__shadow_click(selector, timeout)
396387
return
397388
if self.__needs_minimum_wait() or self.browser == "safari":
398-
time.sleep(0.04)
389+
time.sleep(0.05)
399390
element = page_actions.wait_for_element_visible(
400391
self.driver,
401392
selector,
@@ -480,6 +471,8 @@ def click(
480471
self.js_click(selector, by=by)
481472
else:
482473
self.jquery_click(selector, by=by)
474+
if self.__needs_minimum_wait():
475+
time.sleep(0.04)
483476
return
484477
except Exception:
485478
pass
@@ -638,14 +631,14 @@ def click(
638631
self.__ad_block_as_needed()
639632
self.__disable_beforeunload_as_needed()
640633
if self.__needs_minimum_wait():
641-
time.sleep(0.04)
634+
time.sleep(0.06)
642635
except Exception:
643636
try:
644637
self.wait_for_ready_state_complete()
645638
except Exception:
646639
pass
647640
if self.__needs_minimum_wait():
648-
time.sleep(0.03)
641+
time.sleep(0.04)
649642
else:
650643
time.sleep(0.08)
651644
if self.demo_mode:
@@ -907,7 +900,7 @@ def update_text(
907900
if not self.demo_mode and not self.slow_mode:
908901
self.__scroll_to_element(element, selector, by)
909902
if self.__needs_minimum_wait():
910-
time.sleep(0.01)
903+
time.sleep(0.02)
911904
try:
912905
element.clear() # May need https://stackoverflow.com/a/50691625
913906
backspaces = Keys.BACK_SPACE * 42 # Is the answer to everything
@@ -952,9 +945,7 @@ def update_text(
952945
if settings.WAIT_FOR_RSC_ON_PAGE_LOADS:
953946
self.wait_for_ready_state_complete()
954947
if self.__needs_minimum_wait():
955-
time.sleep(0.03)
956-
if self.undetectable:
957-
time.sleep(0.025)
948+
time.sleep(0.04)
958949
except Exception:
959950
self.wait_for_ready_state_complete()
960951
time.sleep(0.14)
@@ -4338,12 +4329,13 @@ def wait_for_ready_state_complete(self, timeout=None):
43384329
self.__ad_block_as_needed()
43394330
self.__disable_beforeunload_as_needed()
43404331
if (
4341-
self.undetectable
4342-
and self.page_load_strategy == "none"
4332+
self.page_load_strategy == "none"
43434333
and hasattr(settings, "SKIP_JS_WAITS")
43444334
and settings.SKIP_JS_WAITS
43454335
):
4346-
time.sleep(0.05)
4336+
time.sleep(0.01)
4337+
if self.undetectable:
4338+
time.sleep(0.035)
43474339
return True
43484340

43494341
def wait_for_angularjs(self, timeout=None, **kwargs):

setup.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,18 @@
135135
'packaging>=23.2',
136136
'setuptools>=68.0.0;python_version<"3.8"',
137137
'setuptools>=68.2.2;python_version>="3.8"',
138-
'wheel>=0.41.2',
138+
'wheel>=0.41.3',
139139
'attrs>=23.1.0',
140140
"certifi>=2023.7.22",
141141
'filelock>=3.12.2;python_version<"3.8"',
142-
'filelock>=3.13.0;python_version>="3.8"',
142+
'filelock>=3.13.1;python_version>="3.8"',
143143
'platformdirs>=3.11.0',
144144
'parse>=1.19.1',
145145
'parse-type>=0.6.2',
146146
"six==1.16.0",
147147
"idna==3.4",
148148
'chardet==5.2.0',
149-
'charset-normalizer==3.3.1',
149+
'charset-normalizer==3.3.2',
150150
'urllib3>=1.26.18,<2;python_version<"3.10"',
151151
'urllib3>=1.26.18,<2.1.0;python_version>="3.10"',
152152
'requests==2.31.0',

0 commit comments

Comments
 (0)