Skip to content

Commit f8ac198

Browse files
committed
Add method: "is_exact_text_visible(text, selector)"
1 parent e907c8c commit f8ac198

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

help_docs/method_summary.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ self.is_element_enabled(selector, by="css selector")
7878

7979
self.is_text_visible(text, selector="html", by="css selector")
8080

81+
self.is_exact_text_visible(text, selector="html", by="css selector")
82+
8183
self.is_attribute_present(selector, attribute, value=None, by="css selector")
8284

8385
self.is_link_text_visible(link_text)

seleniumbase/fixtures/base_case.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,6 +1232,16 @@ def is_text_visible(self, text, selector="html", by="css selector"):
12321232
self.driver, text, selector, by, self.browser
12331233
)
12341234

1235+
def is_exact_text_visible(self, text, selector="html", by="css selector"):
1236+
self.wait_for_ready_state_complete()
1237+
time.sleep(0.01)
1238+
selector, by = self.__recalculate_selector(selector, by)
1239+
if self.__is_shadow_selector(selector):
1240+
return self.__is_shadow_exact_text_visible(text, selector)
1241+
return page_actions.is_exact_text_visible(
1242+
self.driver, text, selector, by, self.browser
1243+
)
1244+
12351245
def is_attribute_present(
12361246
self, selector, attribute, value=None, by="css selector"
12371247
):
@@ -13073,6 +13083,22 @@ def __is_shadow_text_visible(self, text, selector):
1307313083
except Exception:
1307413084
return False
1307513085

13086+
def __is_shadow_exact_text_visible(self, text, selector):
13087+
text = str(text)
13088+
try:
13089+
element = self.__get_shadow_element(selector, timeout=0.1)
13090+
if self.browser == "safari":
13091+
return (
13092+
element.is_displayed()
13093+
and text in element.get_attribute("innerText")
13094+
)
13095+
return (
13096+
element.is_displayed()
13097+
and text.strip() == element.text.strip()
13098+
)
13099+
except Exception:
13100+
return False
13101+
1307613102
def __is_shadow_attribute_present(self, selector, attribute, value=None):
1307713103
try:
1307813104
element = self.__get_shadow_element(selector, timeout=0.1)

seleniumbase/fixtures/page_actions.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,43 @@ def is_text_visible(driver, text, selector, by="css selector", browser=None):
133133
return False
134134

135135

136+
def is_exact_text_visible(
137+
driver,
138+
text,
139+
selector,
140+
by="css selector",
141+
browser=None
142+
):
143+
"""
144+
Returns whether the exact text is visible in the given selector.
145+
(Ignores leading and trailing whitespace)
146+
@Params
147+
driver - the webdriver object (required)
148+
text - the text string to search for (required)
149+
selector - the locator for identifying the page element (required)
150+
by - the type of selector being used (Default: "css selector")
151+
@Returns
152+
Boolean (is text visible)
153+
"""
154+
text = str(text)
155+
try:
156+
element = driver.find_element(by=by, value=selector)
157+
element_text = element.text
158+
if browser == "safari":
159+
if element.tag_name.lower() in ["input", "textarea"]:
160+
element_text = element.get_attribute("value")
161+
else:
162+
element_text = element.get_attribute("innerText")
163+
elif element.tag_name.lower() in ["input", "textarea"]:
164+
element_text = element.get_property("value")
165+
return (
166+
element.is_displayed()
167+
and text.strip() == element_text.strip()
168+
)
169+
except Exception:
170+
return False
171+
172+
136173
def is_attribute_present(
137174
driver, selector, attribute, value=None, by="css selector"
138175
):

0 commit comments

Comments
 (0)