Skip to content

Commit b0aa1d8

Browse files
committed
Update window-switching code
1 parent 1bd434b commit b0aa1d8

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2634,7 +2634,19 @@ def __element_click(self, element):
26342634
):
26352635
element.click()
26362636
else:
2637-
element.uc_click()
2637+
try:
2638+
href = element.get_attribute("href")
2639+
target = element.get_attribute("target")
2640+
if len(href) > 0 and target == "_blank":
2641+
self.driver.tab_new(href)
2642+
self.switch_to_window(-1)
2643+
time.sleep(0.01)
2644+
elif len(href) > 0:
2645+
element.uc_click()
2646+
else:
2647+
element.click()
2648+
except Exception:
2649+
element.click()
26382650

26392651
def __select_option(
26402652
self,
@@ -3344,7 +3356,7 @@ def open_new_window(self, switch_to=True):
33443356
if hasattr(self.driver, "tab_new"):
33453357
self.driver.tab_new("about:blank")
33463358
if switch_to:
3347-
self.switch_to_newest_window()
3359+
self.switch_to_window(-1)
33483360
time.sleep(0.01)
33493361
return
33503362
if selenium4_or_newer and switch_to:
@@ -3375,7 +3387,7 @@ def switch_to_default_window(self):
33753387
self.switch_to_window(0)
33763388

33773389
def switch_to_newest_window(self):
3378-
self.switch_to_window(len(self.driver.window_handles) - 1)
3390+
self.switch_to_window(-1)
33793391

33803392
def get_new_driver(
33813393
self,
@@ -12471,7 +12483,7 @@ def __make_css_match_first_element_only(self, selector):
1247112483
def __switch_to_newest_window_if_not_blank(self):
1247212484
current_window = self.driver.current_window_handle
1247312485
try:
12474-
self.switch_to_window(len(self.driver.window_handles) - 1)
12486+
self.switch_to_window(-1)
1247512487
if self.get_current_url() == "about:blank":
1247612488
self.switch_to_window(current_window)
1247712489
except Exception:
@@ -13603,9 +13615,7 @@ def setUp(self, masterqa_mode=False):
1360313615
has_url = True
1360413616
if len(self.driver.window_handles) > 1:
1360513617
while len(self.driver.window_handles) > 1:
13606-
self.switch_to_window(
13607-
len(self.driver.window_handles) - 1
13608-
)
13618+
self.switch_to_window(-1)
1360913619
self.driver.close()
1361013620
self.switch_to_window(0)
1361113621
if self._crumbs:

seleniumbase/fixtures/page_actions.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,16 +1328,17 @@ def switch_to_window(driver, window, timeout=settings.SMALL_TIMEOUT):
13281328
window - the window index or window handle
13291329
timeout - the time to wait for the window in seconds
13301330
"""
1331+
if window == -1:
1332+
window = len(driver.window_handles) - 1
13311333
start_ms = time.time() * 1000.0
13321334
stop_ms = start_ms + (timeout * 1000.0)
13331335
if isinstance(window, int):
13341336
caps = driver.capabilities
13351337
if (
13361338
caps["browserName"].lower() == "safari"
13371339
and "safari:platformVersion" in caps
1338-
and caps["safari:platformVersion"].split(".") < ["10", "15"]
13391340
):
1340-
# Fix reversed window_handles on Safari 10.14 or lower
1341+
# Reversed window_handles on Safari
13411342
window = len(driver.window_handles) - 1 - window
13421343
if window < 0:
13431344
window = 0

0 commit comments

Comments
 (0)