Skip to content

Commit 5f68c82

Browse files
authored
Merge pull request #2283 from seleniumbase/uc-mode-updates-and-more
Updates for UC Mode and more
2 parents f9a31a3 + 383683b commit 5f68c82

25 files changed

+221
-44
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,7 @@ pytest test_coffee_cart.py --trace
679679
--message-duration=SECONDS # (The time length for Messenger alerts.)
680680
--check-js # (Check for JavaScript errors after page loads.)
681681
--ad-block # (Block some types of display ads from loading.)
682+
--host-resolver-rules=RULES # (Set host-resolver-rules, comma-separated.)
682683
--block-images # (Block images from loading during tests.)
683684
--do-not-track # (Indicate to websites that you don't want to be tracked.)
684685
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)

examples/presenter/edge_presentation.py

+29-13
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def test_presentation(self):
4242
self.play_tour()
4343
self.sleep(0.25)
4444
self.open("data:,")
45-
self.create_presentation(theme="sky", transition="fade")
45+
self.create_presentation(theme="beige", transition="fade")
4646
self.add_slide(
4747
"<p><b>About the presenter:</b></p>\n"
4848
"<ul>\n"
@@ -153,24 +153,40 @@ def test_presentation(self):
153153
self.play_tour()
154154
self.highlight('[href*="microsoft-edge/tools/webdriver"]')
155155

156-
self.get_new_driver(browser="edge")
156+
self.get_new_driver(browser="edge", disable_csp=True)
157157
self.maximize_window()
158158
self.open(
159159
"https://developer.microsoft.com/en-us/"
160160
"microsoft-edge/tools/webdriver/"
161161
)
162-
self.wait_for_element("#page-heading")
163-
self.scroll_to("#page-heading")
164-
zoom_in = '#page-heading{zoom: 1.2;-moz-transform: scale(1.2);}'
162+
self.wait_for_element("div.common-heading")
163+
self.scroll_to("div.common-heading")
164+
zoom_in = 'div.h1{zoom: 1.02;-moz-transform: scale(1.02);}'
165165
self.add_css_style(zoom_in)
166-
self.highlight("#page-heading", loops=8)
167-
self.sleep(1.2)
168-
self.highlight("#downloads-channel", loops=8)
169-
self.sleep(1.2)
170-
self.highlight("#downloads", loops=12)
171-
self.sleep(1.8)
172-
self.highlight("#installation", loops=12)
173-
self.sleep(1.8)
166+
self.highlight("div.common-heading", loops=8)
167+
self.create_tour(theme="driverjs")
168+
self.add_tour_step(
169+
"", "div.common-heading", alignment="left"
170+
)
171+
self.play_tour()
172+
self.highlight('div[data-fetch-key="block-web-driver:0"]', loops=12)
173+
self.create_tour(theme="driverjs")
174+
self.add_tour_step(
175+
"", 'div[data-fetch-key="block-web-driver:0"]', alignment="top"
176+
)
177+
self.play_tour()
178+
self.highlight('div[data-fetch-key="block-web-driver:1"]', loops=12)
179+
self.create_tour(theme="driverjs")
180+
self.add_tour_step(
181+
"", 'div[data-fetch-key="block-web-driver:1"]', alignment="top"
182+
)
183+
self.play_tour()
184+
self.highlight('section[data-section-id="installation"]', loops=12)
185+
self.create_tour(theme="driverjs")
186+
self.add_tour_step(
187+
"", "div.block-heading--sixtyforty", alignment="left"
188+
)
189+
self.play_tour()
174190
self.quit_extra_driver()
175191

176192
self.switch_to_default_driver()

examples/presenter/multi_uc.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77

88
@pytest.mark.parametrize("", [[]] * 3)
99
def test_multi_threaded(sb):
10-
sb.driver.get("https://nowsecure.nl/#relax")
10+
sb.driver.uc_open_with_tab("https://nowsecure.nl/#relax")
1111
sb.set_window_rect(randint(0, 755), randint(38, 403), 700, 500)
1212
try:
1313
sb.assert_text("OH YEAH, you passed!", "h1", timeout=4)
1414
sb.post_message("Selenium wasn't detected!", duration=4)
1515
sb._print("\n Success! Website did not detect Selenium! ")
1616
except Exception:
17-
sb.driver.get("https://nowsecure.nl/#relax")
17+
sb.driver.uc_open_with_tab("https://nowsecure.nl/#relax")
1818
try:
1919
sb.assert_text("OH YEAH, you passed!", "h1", timeout=4)
2020
sb.post_message("Selenium wasn't detected!", duration=4)

examples/presenter/uc_presentation.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ def test_presentation(self):
2929

3030
self.get_new_driver(undetectable=True)
3131
try:
32-
self.driver.get("https://nowsecure.nl/#relax")
32+
self.driver.uc_open_with_tab("https://nowsecure.nl/#relax")
3333
try:
3434
self.assert_text("OH YEAH, you passed!", "h1", timeout=4)
3535
self.post_message("Selenium wasn't detected!", duration=4)
3636
except Exception:
3737
self.clear_all_cookies()
38-
self.driver.get("https://nowsecure.nl/#relax")
38+
self.driver.uc_open_with_tab("https://nowsecure.nl/#relax")
3939
self.assert_text("OH YEAH, you passed!", "h1", timeout=4)
4040
self.post_message("Selenium wasn't detected!", duration=4)
4141
finally:
@@ -355,10 +355,10 @@ def test_presentation(self):
355355

356356
try:
357357
with SB(uc=True) as sb:
358-
sb.driver.get("https://nowsecure.nl/#relax")
358+
sb.driver.uc_open_with_tab("https://nowsecure.nl/#relax")
359359
sb.sleep(1)
360360
if not sb.is_text_visible("OH YEAH, you passed", "h1"):
361-
sb.driver.get("https://nowsecure.nl/#relax")
361+
sb.driver.uc_open_with_tab("https://nowsecure.nl/#relax")
362362
sb.sleep(1)
363363
sb.activate_demo_mode()
364364
sb.assert_text("OH YEAH, you passed!", "h1", timeout=3)

examples/raw_form_turnstile.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ def open_the_form_turnstile_page(sb):
88

99

1010
def click_turnstile_and_verify(sb):
11-
iframe = sb.driver.find_element("iframe")
12-
sb.driver.reconnect(0.1) # Another way to reconnect
13-
sb.driver.switch_to.frame(iframe)
11+
sb.driver.uc_switch_to_frame("iframe")
1412
sb.driver.uc_click("span.mark")
1513
sb.highlight("img#captcha-success", timeout=3.33)
1614

examples/raw_parameter_script.py

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
sb._disable_beforeunload = False
8585
sb.save_screenshot_after_test = False
8686
sb.no_screenshot_after_test = False
87+
sb.host_resolver_rules = None
8788
sb.page_load_strategy = None
8889
sb.timeout_multiplier = None
8990
sb.pytest_html_report = None

examples/raw_turnstile.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ def open_the_turnstile_page(sb):
88

99

1010
def click_turnstile_and_verify(sb):
11-
iframe = sb.driver.find_element("iframe")
12-
sb.driver.reconnect(0.1) # Another way to reconnect
13-
sb.driver.switch_to.frame(iframe)
11+
sb.driver.uc_switch_to_frame("iframe")
1412
sb.driver.uc_click("span.mark")
1513
sb.assert_element("img#captcha-success", timeout=3.33)
1614

examples/test_chromedriver.py

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
class ChromedriverTests(BaseCase):
1010
def test_chromedriver_matches_chrome(self):
1111
if self.browser != "chrome":
12+
self.open_if_not_url("data:,")
1213
print("\n This test is only for Chrome!")
1314
print(' (Run with: "--browser=chrome")')
1415
self.skip("This test is only for Chrome!")

examples/test_verify_chromedriver.py

+5
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,8 @@ def test_fail_if_versions_dont_match(self):
2828
print("\nWarning -> " + message)
2929
elif int(major_chromedriver_version) != int(major_chrome_version):
3030
raise Exception(message)
31+
else:
32+
print(
33+
"\n* Chrome version: {%s}\n* Driver version: {%s}"
34+
% (chromedriver_version, chrome_version)
35+
)

help_docs/customizing_test_runs.md

+1
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ pytest my_first_test.py --settings-file=custom_settings.py
159159
--message-duration=SECONDS # (The time length for Messenger alerts.)
160160
--check-js # (Check for JavaScript errors after page loads.)
161161
--ad-block # (Block some types of display ads from loading.)
162+
--host-resolver-rules=RULES # (Set host-resolver-rules, comma-separated.)
162163
--block-images # (Block images from loading during tests.)
163164
--do-not-track # (Indicate to websites that you don't want to be tracked.)
164165
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)

help_docs/method_summary.md

+13-1
Original file line numberDiff line numberDiff line change
@@ -993,10 +993,16 @@ driver.highlight_click(selector)
993993

994994
driver.sleep(seconds)
995995

996+
driver.locator(selector)
997+
998+
driver.get_attribute(selector, attribute)
999+
9961000
driver.get_page_source()
9971001

9981002
driver.get_title()
9991003

1004+
driver.switch_to_frame(frame)
1005+
10001006
############
10011007

10021008
# "driver"-specific methods added by SeleniumBase for UC Mode: "--uc" / uc=True
@@ -1007,7 +1013,13 @@ driver.uc_open_with_tab(url)
10071013

10081014
driver.uc_open_with_reconnect(url, reconnect_time=None)
10091015

1010-
driver.uc_click(selector)
1016+
driver.reconnect(timeout)
1017+
1018+
driver.uc_click(
1019+
selector, by="css selector",
1020+
timeout=settings.SMALL_TIMEOUT, reconnect_time=None)
1021+
1022+
driver.uc_switch_to_frame(frame)
10111023
```
10121024

10131025
--------

mkdocs.yml

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ nav:
157157
- 🔑 CF Turnstile on Form: https://seleniumbase.io/apps/form_turnstile
158158
- 🔐 reCAPTCHA v2 Test: https://seleniumbase.io/apps/recaptcha
159159
- 🔐 reCAPTCHA v2 on Form: https://seleniumbase.io/apps/form_recaptcha
160+
- 🔐 reCAPTCHA, invisible: https://seleniumbase.io/apps/invisible_recaptcha
160161
- Additional Help Docs:
161162
- 📑 Table of Contents: help_docs/ReadMe.md
162163
- 🖼️ How to handle iframes: help_docs/handling_iframes.md

mkdocs_build/requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
regex>=2023.10.3
55
PyYAML>=6.0.1
6-
pymdown-extensions>=10.3.1
6+
pymdown-extensions>=10.4
77
pipdeptree>=2.13.1
88
python-dateutil>=2.8.2
99
Markdown==3.5.1

requirements.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ attrs>=23.1.0
77
certifi>=2023.7.22
88
filelock>=3.12.2;python_version<"3.8"
99
filelock>=3.13.1;python_version>="3.8"
10-
platformdirs>=3.11.0
10+
platformdirs>=4.0.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
1616
charset-normalizer==3.3.2
1717
urllib3>=1.26.18,<2;python_version<"3.10"
18-
urllib3>=1.26.18,<2.1.0;python_version>="3.10"
18+
urllib3>=1.26.18,<2.2.0;python_version>="3.10"
1919
requests==2.31.0
2020
pynose==1.4.8
2121
sniffio==1.3.0
@@ -40,7 +40,7 @@ pytest-html==2.0.1
4040
pytest-metadata==3.0.0
4141
pytest-ordering==0.6
4242
pytest-rerunfailures==12.0
43-
pytest-xdist==3.3.1
43+
pytest-xdist==3.4.0
4444
parameterized==0.9.0
4545
sbvirtualdisplay==1.3.0
4646
behave==1.2.6

seleniumbase/__version__.py

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

seleniumbase/behave/behave_sb.py

+8
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ def get_configured_sb(context):
230230
sb.proxy_bypass_list = None
231231
sb.proxy_pac_url = None
232232
sb.multi_proxy = False
233+
sb.host_resolver_rules = None
233234
sb.enable_3d_apis = False
234235
sb.swiftshader = False
235236
sb.ad_block_on = False
@@ -772,6 +773,13 @@ def get_configured_sb(context):
772773
if low_key in ["multi-proxy", "multi_proxy"]:
773774
sb.multi_proxy = True
774775
continue
776+
# Handle: -D host-resolver-rules=RULES / host_resolver_rules=RULES
777+
if low_key in ["host-resolver-rules", "host_resolver_rules"]:
778+
host_resolver_rules = userdata[key]
779+
if host_resolver_rules == "true":
780+
host_resolver_rules = sb.host_resolver_rules
781+
sb.host_resolver_rules = host_resolver_rules
782+
continue
775783
# Handle: -D enable-3d-apis / enable_3d_apis
776784
if low_key in ["enable-3d-apis", "enable_3d_apis"]:
777785
sb.enable_3d_apis = True

0 commit comments

Comments
 (0)