Skip to content

Commit e1e2c97

Browse files
committed
Better compatibility when running automation on Safari
1 parent 780f6c2 commit e1e2c97

File tree

2 files changed

+57
-13
lines changed

2 files changed

+57
-13
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,13 +1245,17 @@ def get_text(self, selector, by=By.CSS_SELECTOR, timeout=None):
12451245
)
12461246
try:
12471247
element_text = element.text
1248+
if self.browser == "safari":
1249+
element_text = element.get_attribute("innerText")
12481250
except (StaleElementReferenceException, ENI_Exception):
12491251
self.wait_for_ready_state_complete()
12501252
time.sleep(0.14)
12511253
element = page_actions.wait_for_element_visible(
12521254
self.driver, selector, by, timeout
12531255
)
12541256
element_text = element.text
1257+
if self.browser == "safari":
1258+
element_text = element.get_attribute("innerText")
12551259
return element_text
12561260

12571261
def get_attribute(
@@ -6214,6 +6218,11 @@ def __is_shadow_element_enabled(self, selector):
62146218
def __is_shadow_text_visible(self, text, selector):
62156219
try:
62166220
element = self.__get_shadow_element(selector, timeout=0.1)
6221+
if self.browser == "safari":
6222+
return (
6223+
element.is_displayed()
6224+
and text in element.get_attribute("innerText")
6225+
)
62176226
return element.is_displayed() and text in element.text
62186227
except Exception:
62196228
return False
@@ -9243,7 +9252,7 @@ def wait_for_text_visible(
92439252
text, selector, timeout
92449253
)
92459254
return page_actions.wait_for_text_visible(
9246-
self.driver, text, selector, by, timeout
9255+
self.driver, text, selector, by, timeout, self.browser
92479256
)
92489257

92499258
def wait_for_exact_text_visible(
@@ -9260,7 +9269,7 @@ def wait_for_exact_text_visible(
92609269
text, selector, timeout
92619270
)
92629271
return page_actions.wait_for_exact_text_visible(
9263-
self.driver, text, selector, by, timeout
9272+
self.driver, text, selector, by, timeout, self.browser
92649273
)
92659274

92669275
def wait_for_text(

seleniumbase/fixtures/page_actions.py

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from selenium.common.exceptions import NoSuchFrameException
3232
from selenium.common.exceptions import NoSuchWindowException
3333
from selenium.common.exceptions import StaleElementReferenceException
34+
from selenium.common.exceptions import TimeoutException
3435
from selenium.webdriver.common.by import By
3536
from selenium.webdriver.common.action_chains import ActionChains
3637
from seleniumbase.config import settings
@@ -384,7 +385,12 @@ def wait_for_element_visible(
384385

385386

386387
def wait_for_text_visible(
387-
driver, text, selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT
388+
driver,
389+
text,
390+
selector,
391+
by=By.CSS_SELECTOR,
392+
timeout=settings.LARGE_TIMEOUT,
393+
browser=None
388394
):
389395
"""
390396
Searches for the specified element by the given selector. Returns the
@@ -412,11 +418,21 @@ def wait_for_text_visible(
412418
try:
413419
element = driver.find_element(by=by, value=selector)
414420
is_present = True
415-
if element.is_displayed() and text in element.text:
416-
return element
421+
if browser == "safari":
422+
if (
423+
element.is_displayed()
424+
and text in element.get_attribute("innerText")
425+
):
426+
return element
427+
else:
428+
element = None
429+
raise Exception()
417430
else:
418-
element = None
419-
raise Exception()
431+
if element.is_displayed() and text in element.text:
432+
return element
433+
else:
434+
element = None
435+
raise Exception()
420436
except Exception:
421437
now_ms = time.time() * 1000.0
422438
if now_ms >= stop_ms:
@@ -443,7 +459,12 @@ def wait_for_text_visible(
443459

444460

445461
def wait_for_exact_text_visible(
446-
driver, text, selector, by=By.CSS_SELECTOR, timeout=settings.LARGE_TIMEOUT
462+
driver,
463+
text,
464+
selector,
465+
by=By.CSS_SELECTOR,
466+
timeout=settings.LARGE_TIMEOUT,
467+
browser=None
447468
):
448469
"""
449470
Searches for the specified element by the given selector. Returns the
@@ -471,11 +492,25 @@ def wait_for_exact_text_visible(
471492
try:
472493
element = driver.find_element(by=by, value=selector)
473494
is_present = True
474-
if element.is_displayed() and text.strip() == element.text.strip():
475-
return element
495+
if browser == "safari":
496+
if (
497+
element.is_displayed()
498+
and text.strip() == element.get_attribute(
499+
"innerText").strip()
500+
):
501+
return element
502+
else:
503+
element = None
504+
raise Exception()
476505
else:
477-
element = None
478-
raise Exception()
506+
if (
507+
element.is_displayed()
508+
and text.strip() == element.text.strip()
509+
):
510+
return element
511+
else:
512+
element = None
513+
raise Exception()
479514
except Exception:
480515
now_ms = time.time() * 1000.0
481516
if now_ms >= stop_ms:
@@ -958,7 +993,7 @@ def switch_to_frame(driver, frame, timeout=settings.SMALL_TIMEOUT):
958993
try:
959994
driver.switch_to.frame(frame)
960995
return True
961-
except NoSuchFrameException:
996+
except (NoSuchFrameException, TimeoutException):
962997
if type(frame) is str:
963998
by = None
964999
if page_utils.is_xpath_selector(frame):

0 commit comments

Comments
 (0)