Skip to content

Commit b8f3e97

Browse files
authored
Merge pull request #2187 from seleniumbase/various-updates-and-fixes
Various updates and fixes
2 parents cb1564d + 0567c4d commit b8f3e97

13 files changed

+73
-31
lines changed

examples/hack_the_planet.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,10 +312,9 @@ def test_all_your_base_are_belong_to_us(self):
312312
self.set_text_content('a[href*="jira/enterprise"]', abtu)
313313
self.set_text_content('a[href="/software/jira/features"]', "")
314314
self.set_text_content("h1", aybabtu)
315-
self.highlight("ul.imkt-navbar__link-list", loops=2, scroll=False)
316-
self.highlight('a[href*="jira/pricing"]', loops=3, scroll=False)
317-
self.highlight('a[href*="jira/enterprise"]', loops=3, scroll=False)
318-
self.highlight("h1", loops=6, scroll=False)
315+
self.highlight('a[href*="jira/pricing"]', loops=5, scroll=False)
316+
self.highlight('a[href*="jira/enterprise"]', loops=6, scroll=False)
317+
self.highlight("h1", loops=8, scroll=False)
319318

320319
self.open("https://status.iboss.com/ibcloud/app/cloudStatus.html")
321320
self.wait_for_element_clickable('div[translate*="cloudStatus"]')

examples/presenter/edge_presentation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ def test_presentation(self):
586586
self.assert_text("Skype for Mobile", "h2")
587587
self.highlight("h2")
588588
self.highlight("#get-skype-0")
589-
self.highlight_click('[data-bi-name="arrow-dropdown-mobile"]')
589+
self.highlight_click("span[data-dropdown-icon]")
590590
self.highlight("#get-skype-0_android-download")
591591
self.highlight('[data-bi-id*="ios"]')
592592
self.quit_extra_driver()

examples/raw_mobile.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from seleniumbase import Driver
2+
3+
driver = Driver(mobile=True)
4+
try:
5+
driver.open("https://www.skype.com/en/get-skype/")
6+
driver.assert_element('[aria-label="Microsoft"]')
7+
driver.assert_text("Download Skype", "h1")
8+
driver.highlight("div.appBannerContent")
9+
driver.highlight("h1")
10+
driver.assert_text("Skype for Mobile", "h2")
11+
driver.highlight("h2")
12+
driver.highlight("#get-skype-0")
13+
driver.highlight_click("span[data-dropdown-icon]")
14+
driver.highlight("#get-skype-0_android-download")
15+
driver.highlight('[data-bi-id*="ios"]')
16+
finally:
17+
driver.quit()

examples/raw_uc_mode.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33

44
with SB(uc=True) as sb:
55
sb.driver.get("https://nowsecure.nl/#relax")
6-
sb.sleep(2)
6+
sb.sleep(1)
77
if not sb.is_text_visible("OH YEAH, you passed!", "h1"):
88
sb.get_new_driver(undetectable=True)
99
sb.driver.get("https://nowsecure.nl/#relax")
10-
sb.sleep(2)
10+
sb.sleep(1)
1111
if not sb.is_text_visible("OH YEAH, you passed!", "h1"):
1212
if sb.is_element_visible('iframe[src*="challenge"]'):
1313
with sb.frame_switch('iframe[src*="challenge"]'):
1414
sb.click("span.mark")
15-
sb.sleep(4)
15+
sb.sleep(2)
1616
sb.activate_demo_mode()
1717
sb.assert_text("OH YEAH, you passed!", "h1", timeout=3)

examples/test_skype_site.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
"""This is a mobile device test for Chromium-based browsers (such as MS Edge)
2-
Usage: pytest test_skype_site.py --mobile --edge
3-
4-
Default mobile settings for User Agent and Device Metrics if not specified:
5-
User Agent: --agent="Mozilla/5.0 (Linux; Android 11; Pixel 4 XL)"
6-
CSS Width, CSS Height, Pixel-Ratio: --metrics="360,640,2"
1+
"""Mobile device test for Chromium-based browsers (such as Edge)
2+
Example: "pytest test_skype_site.py --mobile --edge"
73
"""
84
from seleniumbase import BaseCase
95

@@ -27,6 +23,6 @@ def test_skype_mobile_site(self):
2723
self.assert_text("Skype for Mobile", "h2")
2824
self.highlight("h2")
2925
self.highlight("#get-skype-0")
30-
self.highlight_click('[data-bi-name="arrow-dropdown-mobile"]')
26+
self.highlight_click("span[data-dropdown-icon]")
3127
self.highlight("#get-skype-0_android-download")
3228
self.highlight('[data-bi-id*="ios"]')

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,4 @@ mccabe==0.7.0
7272
pyflakes==2.5.0;python_version<"3.9"
7373
pyflakes==3.1.0;python_version>="3.9"
7474
pycodestyle==2.9.1;python_version<"3.9"
75-
pycodestyle==2.11.0;python_version>="3.9"
75+
pycodestyle==2.11.1;python_version>="3.9"

seleniumbase/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# seleniumbase package
2-
__version__ = "4.20.1"
2+
__version__ = "4.20.2"

seleniumbase/core/browser_launcher.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ def extend_driver(driver):
184184
driver.get_origin = DM.get_origin
185185
driver.get_user_agent = DM.get_user_agent
186186
driver.highlight = DM.highlight
187+
driver.highlight_click = DM.highlight_click
187188
driver.sleep = time.sleep
188189
driver.get_page_source = DM.get_page_source
189190
driver.get_title = DM.get_title
@@ -412,12 +413,14 @@ def uc_open_with_tab(driver, url):
412413
return None
413414

414415

415-
def uc_open_with_reconnect(driver, url):
416-
"""Open a url, then reconnect with UC before switching to the window."""
416+
def uc_open_with_reconnect(driver, url, reconnect_time=None):
417+
"""Open a url, disconnect chromedriver, wait, and reconnect."""
418+
if not reconnect_time:
419+
reconnect_time = constants.UC.RECONNECT_TIME
417420
if (url.startswith("http:") or url.startswith("https:")):
418421
driver.execute_script('window.open("%s","_blank");' % url)
419-
driver.reconnect(2.65)
420422
driver.close()
423+
driver.reconnect(reconnect_time)
421424
driver.switch_to.window(driver.window_handles[-1])
422425
else:
423426
driver.default_get(url) # The original one
@@ -1314,9 +1317,9 @@ def get_driver(
13141317
binary_location = None
13151318
if (uc_cdp_events or uc_subprocess) and not undetectable:
13161319
undetectable = True
1317-
if is_using_uc(undetectable, browser_name) and mobile_emulator:
1318-
if not user_agent:
1319-
user_agent = constants.Mobile.AGENT
1320+
if mobile_emulator and not user_agent:
1321+
# Use a Pixel user agent by default if not specified
1322+
user_agent = constants.Mobile.AGENT
13201323
if page_load_strategy and page_load_strategy.lower() == "none":
13211324
settings.PAGE_LOAD_STRATEGY = "none"
13221325
proxy_auth = False
@@ -3478,7 +3481,9 @@ def get_local_driver(
34783481
lambda url: uc_open_with_tab(driver, url)
34793482
)
34803483
driver.uc_open_with_reconnect = (
3481-
lambda url: uc_open_with_reconnect(driver, url)
3484+
lambda *args, **kwargs: uc_open_with_reconnect(
3485+
driver, *args, **kwargs
3486+
)
34823487
)
34833488
if mobile_emulator:
34843489
uc_metrics = {}

seleniumbase/core/sb_driver.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,22 @@ def get_user_agent(self, *args, **kwargs):
142142
return js_utils.get_user_agent(self.driver, *args, **kwargs)
143143

144144
def highlight(self, *args, **kwargs):
145+
w_args = kwargs
146+
if "loops" in w_args:
147+
w_args.pop("loops")
148+
element = page_actions.wait_for_element(self.driver, *args, **w_args)
149+
browser = self.driver.capabilities["browserName"].lower()
150+
js_utils.slow_scroll_to_element(self.driver, element, browser)
151+
if "timeout" in kwargs:
152+
kwargs.pop("timeout")
145153
js_utils.highlight(self.driver, *args, **kwargs)
146154

155+
def highlight_click(self, *args, **kwargs):
156+
self.highlight(*args, **kwargs)
157+
if "loops" in kwargs:
158+
kwargs.pop("loops")
159+
page_actions.click(self.driver, *args, **kwargs)
160+
147161
def set_wire_proxy(self, string):
148162
"""Set a proxy server for selenium-wire mode ("--wire")
149163
Examples: (ONLY avilable if using selenium-wire mode!)

seleniumbase/fixtures/base_case.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,23 @@ def test_example(self):
198198
Now, if they accidentally type "python", the tests will still run.
199199
Eg. "python my_test.py" instead of "pytest my_test.py"."""
200200
if name == "__main__": # Test called with "python"
201+
import subprocess
201202
from pytest import main as pytest_main
202203
all_args = []
203204
for arg in args:
204205
all_args.append(arg)
205206
for arg in sys.argv[1:]:
206207
all_args.append(arg)
207-
pytest_main([file, "-s", *all_args])
208+
multi = False
209+
for arg in all_args:
210+
if arg.startswith("-n") or arg.startswith("--numprocesses"):
211+
multi = True
212+
if multi:
213+
subprocess.call(
214+
[sys.executable, "-m", "pytest", file, "-s", *all_args]
215+
)
216+
else:
217+
pytest_main([file, "-s", *all_args])
208218

209219
def open(self, url):
210220
"""Navigates the current browser window to the specified page."""

seleniumbase/fixtures/constants.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,10 @@ class Mobile:
359359
)
360360

361361

362+
class UC:
363+
RECONNECT_TIME = 2.15 # Seconds
364+
365+
362366
class ValidBrowsers:
363367
valid_browsers = [
364368
"chrome",

seleniumbase/undetected/__init__.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def __init__(
217217
options.binary_location = (
218218
browser_executable_path or find_chrome_executable()
219219
)
220-
self._delay = 2.05
220+
self._delay = constants.UC.RECONNECT_TIME
221221
self.user_data_dir = user_data_dir
222222
self.keep_user_data_dir = keep_user_data_dir
223223
if suppress_welcome:
@@ -491,10 +491,7 @@ def __enter__(self):
491491
return self
492492

493493
def __exit__(self, exc_type, exc_val, exc_tb):
494-
self.service.stop()
495-
time.sleep(self._delay)
496-
self.service.start()
497-
self.start_session()
494+
self.reconnect(timeout=self._delay)
498495

499496
def __hash__(self):
500497
return hash(self.options.debugger_address)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@
216216
'pyflakes==2.5.0;python_version<"3.9"',
217217
'pyflakes==3.1.0;python_version>="3.9"',
218218
'pycodestyle==2.9.1;python_version<"3.9"',
219-
'pycodestyle==2.11.0;python_version>="3.9"',
219+
'pycodestyle==2.11.1;python_version>="3.9"',
220220
],
221221
# pip install -e .[ipdb]
222222
# (Not needed for debugging anymore. SeleniumBase now includes "pdbp".)

0 commit comments

Comments
 (0)