Skip to content

Commit 77c0ccd

Browse files
authored
Merge pull request #2376 from seleniumbase/update-uc-mode-and-refactor
Update UC Mode and Refactor
2 parents 570910c + e88e82c commit 77c0ccd

File tree

13 files changed

+46
-26
lines changed

13 files changed

+46
-26
lines changed

examples/boilerplates/samples/google_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ def test_google_dot_com(self):
1717
self.assert_title_contains("Google")
1818
self.sleep(0.05)
1919
self.save_screenshot_to_logs() # ("./latest_logs" folder)
20-
self.wait_for_element('iframe[role="presentation"]')
20+
if not self.is_element_visible("iframe"):
21+
self.sleep(1.5) # A slow pop-up might appear
2122
self.hide_elements('iframe') # Hide "Sign in" pop-up
2223
self.sleep(0.05)
2324
self.save_screenshot_to_logs()

examples/boilerplates/samples/test_page_objects.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ def assert_google_title(self, sb):
1111
sb.assert_title_contains("Google")
1212

1313
def hide_sign_in_pop_up(self, sb):
14-
sb.wait_for_element('iframe[role="presentation"]')
14+
if not sb.is_element_visible("iframe"):
15+
sb.sleep(1.5) # A slow pop-up might appear
1516
sb.hide_elements('iframe')
1617
sb.sleep(0.05)
1718

examples/github_test.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ def test_github(self):
99
message = "Unsupported mode for this test."
1010
print("\n " + message)
1111
self.skip(message)
12-
self.open("https://github.com/search?q=SeleniumBase")
13-
self.slow_click('a[href="/seleniumbase/SeleniumBase"]')
12+
self.open("https://github.com/seleniumbase/SeleniumBase")
1413
self.click_if_visible('[data-action="click:signup-prompt#dismiss"]')
1514
self.highlight("div.Layout-main")
1615
self.highlight("div.Layout-sidebar")

examples/test_geolocation.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ def tearDown(self):
77
self.save_teardown_screenshot() # If test fails, or if "--screenshot"
88
if self.is_chromium() and not self._multithreaded:
99
# Reset Permissions and GeolocationOverride
10-
self.execute_cdp_cmd("Browser.resetPermissions", {})
11-
self.execute_cdp_cmd("Emulation.setGeolocationOverride", {})
10+
try:
11+
self.open("about:blank")
12+
self.execute_cdp_cmd("Emulation.setGeolocationOverride", {})
13+
self.execute_cdp_cmd("Browser.resetPermissions", {})
14+
except Exception:
15+
pass
1216
super().tearDown()
1317

1418
def test_geolocation(self):

examples/test_scrape_bing.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
class ScrapeBingTests(BaseCase):
66
def test_scrape_bing(self):
7+
if self._multithreaded:
8+
self.open_if_not_url("about:blank")
9+
self.skip("Skipping test in multi-threaded mode.")
710
self.open("www.bing.com/search?q=SeleniumBase+GitHub&qs=n&form=QBRE")
811
self.wait_for_element("main h2 a")
912
soup = self.get_beautiful_soup()

mkdocs_build/requirements.txt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,21 @@ pymdown-extensions>=10.5
77
pipdeptree>=2.13.1
88
python-dateutil>=2.8.2
99
Markdown==3.5.1
10-
markdown2==2.4.11
10+
markdown2==2.4.12
1111
MarkupSafe==2.1.3
1212
Jinja2==3.1.2
1313
click==8.1.7
1414
ghp-import==2.1.0
1515
watchdog==3.0.0
1616
cairocffi==1.6.1
17-
pathspec==0.11.2
18-
Babel==2.13.1
17+
pathspec==0.12.1
18+
Babel==2.14.0
1919
paginate==0.5.6
20+
lxml==4.9.4
2021
pyquery==2.0.0
2122
readtime==3.0.0
2223
mkdocs==1.5.3
23-
mkdocs-material==9.5.0
24+
mkdocs-material==9.5.2
2425
mkdocs-exclude-search==0.6.6
2526
mkdocs-simple-hooks==0.1.5
2627
mkdocs-material-extensions==1.3.1

requirements.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pip>=23.3.1
1+
pip>=23.3.2
22
packaging>=23.2
33
setuptools>=68.0.0;python_version<"3.8"
44
setuptools>=69.0.2;python_version>="3.8"
@@ -23,7 +23,7 @@ sniffio==1.3.0
2323
h11==0.14.0
2424
outcome==1.3.0.post0
2525
trio==0.22.2;python_version<"3.8"
26-
trio==0.23.1;python_version>="3.8"
26+
trio==0.23.2;python_version>="3.8"
2727
trio-websocket==0.11.1
2828
wsproto==1.2.0
2929
selenium==4.11.2;python_version<"3.8"
@@ -65,7 +65,7 @@ rich==13.7.0
6565

6666
coverage==6.2;python_version<"3.7"
6767
coverage==7.2.7;python_version>="3.7" and python_version<"3.8"
68-
coverage==7.3.2;python_version>="3.8"
68+
coverage==7.3.3;python_version>="3.8"
6969
pytest-cov==4.0.0;python_version<"3.7"
7070
pytest-cov==4.1.0;python_version>="3.7"
7171
flake8==5.0.4;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.22.0"
2+
__version__ = "4.22.1"

seleniumbase/fixtures/base_case.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,15 @@ def open(self, url):
251251
try:
252252
self.driver.get(url)
253253
except Exception as e:
254-
if (
254+
if not hasattr(e, "msg") and hasattr(self.driver, "default_get"):
255+
try:
256+
self._check_browser()
257+
time.sleep(0.4)
258+
except Exception:
259+
logging.debug("Browser crashed! Will open new browser!")
260+
self.driver = self.get_new_driver()
261+
self.driver.default_get(url)
262+
elif (
255263
"ERR_CONNECTION_TIMED_OUT" in e.msg
256264
or "ERR_CONNECTION_CLOSED" in e.msg
257265
or "ERR_CONNECTION_RESET" in e.msg
@@ -1018,7 +1026,7 @@ def add_text(self, selector, text, by="css selector", timeout=None):
10181026
# Use after "\t" or Keys.TAB to cycle through elements first.
10191027
self.click_active_element()
10201028
return
1021-
element = self.wait_for_element_visible(
1029+
element = self.wait_for_element_present(
10221030
selector, by=by, timeout=timeout
10231031
)
10241032
if (
@@ -1113,7 +1121,7 @@ def send_keys(self, selector, text, by="css selector", timeout=None):
11131121
def press_keys(self, selector, text, by="css selector", timeout=None):
11141122
"""Use send_keys() to press one key at a time."""
11151123
self.wait_for_ready_state_complete()
1116-
element = self.wait_for_element_clickable(
1124+
element = self.wait_for_element_present(
11171125
selector, by=by, timeout=timeout
11181126
)
11191127
if self.demo_mode:

seleniumbase/fixtures/constants.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ class Mobile:
362362

363363

364364
class UC:
365-
RECONNECT_TIME = 2.27 # Seconds
365+
RECONNECT_TIME = 2.28 # Seconds
366366

367367

368368
class ValidBrowsers:
@@ -390,12 +390,14 @@ class ValidBinaries:
390390
"brave-browser-stable",
391391
"opera",
392392
"opera-stable",
393+
"chrome.exe", # WSL (Windows Subsystem for Linux)
393394
]
394395
valid_edge_binaries_on_linux = [
395396
"microsoft-edge",
396397
"microsoft-edge-stable",
397398
"microsoft-edge-beta",
398399
"microsoft-edge-dev",
400+
"msedge.exe", # WSL (Windows Subsystem for Linux)
399401
]
400402
valid_chrome_binaries_on_macos = [
401403
"Google Chrome",

seleniumbase/fixtures/page_actions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,7 +1583,7 @@ def send_keys(
15831583
driver, selector, text, by="css selector", timeout=settings.LARGE_TIMEOUT
15841584
):
15851585
selector, by = page_utils.recalculate_selector(selector, by)
1586-
element = wait_for_element_clickable(
1586+
element = wait_for_element_present(
15871587
driver, selector, by=by, timeout=timeout
15881588
)
15891589
if not text.endswith("\n"):
@@ -1597,7 +1597,7 @@ def press_keys(
15971597
driver, selector, text, by="css selector", timeout=settings.LARGE_TIMEOUT
15981598
):
15991599
selector, by = page_utils.recalculate_selector(selector, by)
1600-
element = wait_for_element_clickable(
1600+
element = wait_for_element_present(
16011601
driver, selector, by=by, timeout=timeout
16021602
)
16031603
if not text.endswith("\n"):

seleniumbase/undetected/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -446,12 +446,13 @@ def quit(self):
446446
try:
447447
logger.debug("Terminating the UC browser")
448448
os.kill(self.browser_pid, 15)
449-
if IS_POSIX:
449+
if "linux" in sys.platform:
450450
os.waitpid(self.browser_pid, 0)
451+
time.sleep(0.02)
451452
else:
452-
time.sleep(0.05)
453+
time.sleep(0.04)
453454
except (AttributeError, ChildProcessError, RuntimeError, OSError):
454-
pass
455+
time.sleep(0.05)
455456
except TimeoutError as e:
456457
logger.debug(e, exc_info=True)
457458
except Exception:

setup.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
],
132132
python_requires=">=3.7",
133133
install_requires=[
134-
'pip>=23.3.1',
134+
'pip>=23.3.2',
135135
'packaging>=23.2',
136136
'setuptools>=68.0.0;python_version<"3.8"',
137137
'setuptools>=69.0.2;python_version>="3.8"',
@@ -156,7 +156,7 @@
156156
'h11==0.14.0',
157157
'outcome==1.3.0.post0',
158158
'trio==0.22.2;python_version<"3.8"',
159-
'trio==0.23.1;python_version>="3.8"',
159+
'trio==0.23.2;python_version>="3.8"',
160160
'trio-websocket==0.11.1',
161161
'wsproto==1.2.0',
162162
'selenium==4.11.2;python_version<"3.8"',
@@ -206,7 +206,7 @@
206206
# Usage: coverage run -m pytest; coverage html; coverage report
207207
"coverage": [
208208
'coverage==7.2.7;python_version<"3.8"',
209-
'coverage==7.3.2;python_version>="3.8"',
209+
'coverage==7.3.3;python_version>="3.8"',
210210
'pytest-cov==4.1.0',
211211
],
212212
# pip install -e .[flake8]

0 commit comments

Comments
 (0)