Skip to content

Commit 90ebcab

Browse files
authored
Merge pull request #2586 from seleniumbase/more-methods-and-uc-mode-updates
More methods and UC Mode updates
2 parents 5bd9f74 + aaae4b4 commit 90ebcab

File tree

15 files changed

+136
-13
lines changed

15 files changed

+136
-13
lines changed

examples/raw_bing_captcha.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
sb.activate_demo_mode() # See asserts as they happen
1010
sb.assert_element("svg#success-icon")
1111
sb.assert_text("Success!", "span#success-text")
12-
sb.highlight("div#success", loops=10)
12+
sb.highlight("div#success")

examples/raw_cdp_logging.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
driver = Driver(uc=True, log_cdp=True)
55
try:
6-
driver.get("https://seleniumbase.io/apps/invisible_recaptcha")
6+
driver.uc_open_with_reconnect("https://seleniumbase.io/apps/turnstile")
7+
driver.uc_switch_to_frame("iframe")
8+
driver.uc_click("span.mark")
79
driver.sleep(3)
810
pprint(driver.get_log("performance"))
911
finally:

examples/raw_nopecha.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
from seleniumbase import SB
22

33
with SB(uc=True, test=True) as sb:
4-
sb.driver.uc_open_with_reconnect("https://nopecha.com/demo/turnstile", 5)
4+
sb.driver.uc_open_with_reconnect("https://nopecha.com/demo/turnstile", 4)
55
sb.driver.uc_switch_to_frame("#example-container5 iframe")
6-
sb.driver.uc_click("span.mark")
6+
sb.driver.uc_click("span.mark", reconnect_time=1)
77

88
if sb.is_element_visible("#example-container0 iframe"):
99
sb.switch_to_frame("#example-container0 iframe")
1010
if not sb.is_element_visible("circle.success-circle"):
11-
sb.driver.uc_click("span.mark")
11+
sb.driver.uc_click("span.mark", reconnect_time=1)
1212
sb.switch_to_frame("#example-container0 iframe")
1313
sb.assert_element("circle.success-circle")
1414
sb.switch_to_parent_frame()
15+
1516
sb.switch_to_frame("#example-container5 iframe")
1617
sb.assert_element("svg#success-icon", timeout=3)
1718
sb.switch_to_parent_frame()

examples/raw_robot.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from seleniumbase import SB
2+
3+
with SB(enable_3d_apis=True, test=True) as sb:
4+
sb.open("threejs.org/examples/#webgl_animation_skinning_morph")
5+
sb.switch_to_frame("iframe#viewer")
6+
sb.set_text_content("#info p", "Hi, I'm Michael Mintz")
7+
sb.add_css_style("#info p{zoom: 2.54}")
8+
sb.sleep(0.8)
9+
sb.click('button:contains("Wave")')
10+
sb.highlight("#info p")
11+
sb.select_option_by_text("select", "Idle")
12+
sb.click('button:contains("ThumbsUp")')
13+
sb.set_text_content("#info p", "I created SeleniumBase")
14+
sb.highlight("#info p")
15+
sb.sleep(0.8)
16+
sb.click('button:contains("Jump")')
17+
sb.sleep(1.5)

examples/raw_uc_mode.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@
77
if not sb.is_text_visible("Username", '[for="user_login"]'):
88
sb.driver.uc_open_with_reconnect(url, 4)
99
sb.assert_text("Username", '[for="user_login"]', timeout=3)
10-
sb.highlight('label[for="user_login"]', loops=3)
10+
sb.assert_element('label[for="user_login"]')
11+
sb.highlight('button:contains("Sign in")')
12+
sb.highlight('h1:contains("GitLab.com")')
1113
sb.post_message("SeleniumBase wasn't detected", duration=4)

examples/test_3d_apis.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from seleniumbase import BaseCase
2-
BaseCase.main(__name__, __file__)
2+
BaseCase.main(__name__, __file__, "--enable-3d-apis")
33

44

55
class ThreeJSTests(BaseCase):

help_docs/method_summary.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,8 @@ self.highlight_type(selector, text, by="css selector", loops=3, scroll=True, tim
370370
# self.highlight_update_text(
371371
# selector, text, by="css selector", loops=3, scroll=True, timeout=None)
372372

373+
self.highlight_if_visible(selector, by="css selector", loops=4, scroll=True)
374+
373375
self.highlight(selector, by="css selector", loops=4, scroll=True, timeout=None)
374376

375377
self.press_up_arrow(selector="html", times=1, by="css selector")
@@ -742,6 +744,7 @@ self.generate_traffic_chain(pages, loops=1)
742744

743745
self.get_element(selector, by="css selector", timeout=None)
744746
# Duplicates:
747+
# self.wait_for_selector(selector, by="css selector", timeout=None)
745748
# self.locator(selector, by="css selector", timeout=None)
746749
# self.wait_for_element_present(selector, by="css selector", timeout=None)
747750

@@ -957,6 +960,12 @@ driver.assert_exact_text(text, selector)
957960

958961
driver.wait_for_element(selector)
959962

963+
driver.wait_for_element_visible(selector)
964+
965+
driver.wait_for_element_present(selector)
966+
967+
driver.wait_for_selector(selector)
968+
960969
driver.wait_for_text(text, selector)
961970

962971
driver.wait_for_exact_text(text, selector)
@@ -991,6 +1000,8 @@ driver.highlight(selector)
9911000

9921001
driver.highlight_click(selector)
9931002

1003+
driver.highlight_if_visible(selector)
1004+
9941005
driver.sleep(seconds)
9951006

9961007
driver.locator(selector)
@@ -1015,6 +1026,10 @@ driver.uc_open_with_reconnect(url, reconnect_time=None)
10151026

10161027
driver.reconnect(timeout)
10171028

1029+
driver.disconnect()
1030+
1031+
driver.connect()
1032+
10181033
driver.uc_click(
10191034
selector, by="css selector",
10201035
timeout=settings.SMALL_TIMEOUT, reconnect_time=None)

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pluggy==1.2.0;python_version<"3.8"
3939
pluggy==1.4.0;python_version>="3.8"
4040
py==1.11.0
4141
pytest==7.4.4;python_version<"3.8"
42-
pytest==8.0.2;python_version>="3.8"
42+
pytest==8.1.1;python_version>="3.8"
4343
pytest-html==2.0.1
4444
pytest-metadata==3.0.0;python_version<"3.8"
4545
pytest-metadata==3.1.1;python_version>="3.8"

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.24.4"
2+
__version__ = "4.24.5"

seleniumbase/core/browser_launcher.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,9 @@ def extend_driver(driver):
169169
driver.assert_text = DM.assert_text
170170
driver.assert_exact_text = DM.assert_exact_text
171171
driver.wait_for_element = DM.wait_for_element
172+
driver.wait_for_element_visible = DM.wait_for_element_visible
173+
driver.wait_for_element_present = DM.wait_for_element_present
174+
driver.wait_for_selector = DM.wait_for_selector
172175
driver.wait_for_text = DM.wait_for_text
173176
driver.wait_for_exact_text = DM.wait_for_exact_text
174177
driver.wait_for_and_accept_alert = DM.wait_for_and_accept_alert
@@ -186,6 +189,7 @@ def extend_driver(driver):
186189
driver.get_user_agent = DM.get_user_agent
187190
driver.highlight = DM.highlight
188191
driver.highlight_click = DM.highlight_click
192+
driver.highlight_if_visible = DM.highlight_if_visible
189193
driver.sleep = time.sleep
190194
driver.get_attribute = DM.get_attribute
191195
driver.get_page_source = DM.get_page_source
@@ -458,27 +462,34 @@ def uc_click(
458462
by = "css selector"
459463
except Exception:
460464
pass
461-
element = driver.wait_for_element(selector, by=by, timeout=timeout)
465+
element = driver.wait_for_selector(selector, by=by, timeout=timeout)
466+
if not element.tag_name == "span": # Element must be "visible"
467+
element = driver.wait_for_element(selector, by=by, timeout=timeout)
462468
try:
463469
element.uc_click(
464470
driver, selector, by=by, reconnect_time=reconnect_time
465471
)
466472
except ElementClickInterceptedException:
473+
time.sleep(0.16)
467474
driver.js_click(selector, by=by, timeout=timeout)
475+
if not reconnect_time:
476+
driver.reconnect(0.1)
477+
else:
478+
driver.reconnect(reconnect_time)
468479

469480

470481
def uc_switch_to_frame(driver, frame, reconnect_time=None):
471482
from selenium.webdriver.remote.webelement import WebElement
472483
if isinstance(frame, WebElement):
473484
if not reconnect_time:
474-
driver.reconnect(0.15)
485+
driver.reconnect(0.1)
475486
else:
476487
driver.reconnect(reconnect_time)
477488
driver.switch_to.frame(frame)
478489
else:
479490
iframe = driver.locator(frame)
480491
if not reconnect_time:
481-
driver.reconnect(0.15)
492+
driver.reconnect(0.1)
482493
else:
483494
driver.reconnect(reconnect_time)
484495
driver.switch_to.frame(iframe)

0 commit comments

Comments
 (0)