Skip to content

Commit

Permalink
feat(framework): [Element] add get_next_element() and get_preceding_e…
Browse files Browse the repository at this point in the history
…lement()
  • Loading branch information
koshuang committed Jul 2, 2024
1 parent b80fc6a commit db8b0bb
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
47 changes: 47 additions & 0 deletions src/transstellar/framework/element.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,40 @@ def find_preceding_element_by_xpath(
target_element_class, xpath, False, timeout
)

@with_timeout()
def get_next_element(self, target_element_class: Type[T], timeout=0) -> T:
self.logger.debug(
f"find next element of ({target_element_class.__name__}) with timeout: {timeout}"
)

dom_element = self.get_dom_element().find_element(
By.XPATH, "following-sibling::*[1]"
)

if dom_element:
return self.__create_child_element(target_element_class, dom_element)
else:
raise LookupError(
f"Could not find next element {target_element_class.__name__}"
)

@with_timeout()
def get_preceding_element(self, target_element_class: Type[T], timeout=0) -> T:
self.logger.debug(
f"find preceding element of ({target_element_class.__name__}) with timeout: {timeout}"
)

dom_element = self.get_dom_element().find_element(
By.XPATH, "preceding-sibling::*[1]"
)

if dom_element:
return self.__create_child_element(target_element_class, dom_element)
else:
raise LookupError(
f"Could not find preceding element {target_element_class.__name__}"
)

@with_timeout()
def find_element_by_id(
self, target_element_class: Type[T], dom_id: str, timeout=0
Expand Down Expand Up @@ -216,6 +250,9 @@ def wait_for_global_element_to_disappear(self, target_element_class):
self.driver, f".{target_element_xpath}"
)

def get_dom_element(self) -> WebElement:
return self.get_current_dom_element()

def get_current_dom_element(self) -> WebElement:
if self.dom_element:
return self.dom_element
Expand All @@ -227,13 +264,23 @@ def get_current_dom_element(self) -> WebElement:

return self.dom_element

def get_html(self):
return self.get_current_html()

def get_current_html(self):
html = self.get_current_dom_element().get_attribute("outerHTML")

self.logger.debug(f"current HTML: {html}")

return html

def get_text(self):
text = self.get_dom_element().text

self.logger.debug(f"current text: {text}")

return text

def find_global_dom_element_by_xpath(self, xpath: str):
self.logger.debug(f"finding global dom element by xpath: {xpath}")

Expand Down
18 changes: 18 additions & 0 deletions tests/unit/framework/test_element.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,24 @@ def test_find_preceding_element_by_xpath(self):

assert isinstance(div, Div)

def test_get_next_element(self):
li = self.page.find_element_by_label(Li, "Solutions")

assert isinstance(li, Li)

next_li = li.get_next_element(Li)

assert next_li.get_text() == "Resources"

def test_get_preceding_element(self):
li = self.page.find_element_by_label(Li, "Solutions")

assert isinstance(li, Li)

preceding_li = li.get_preceding_element(Li)

assert preceding_li.get_text() == "Product"

def test_find_element_by_id(self):
content = self.page.find_element_by_id(Div, "start-of-content")

Expand Down

0 comments on commit db8b0bb

Please sign in to comment.