Skip to content

Commit 5a6911c

Browse files
committed
Add method: "is_element_clickable(selector)"
1 parent 0d029f3 commit 5a6911c

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -944,6 +944,13 @@ def is_element_visible(self, selector, by="css selector"):
944944
return self.__is_shadow_element_visible(selector)
945945
return page_actions.is_element_visible(self.driver, selector, by)
946946

947+
def is_element_clickable(self, selector, by="css selector"):
948+
self.wait_for_ready_state_complete()
949+
selector, by = self.__recalculate_selector(selector, by)
950+
if self.__is_shadow_selector(selector):
951+
return self.__is_shadow_element_clickable(selector)
952+
return page_actions.is_element_clickable(self.driver, selector, by)
953+
947954
def is_element_enabled(self, selector, by="css selector"):
948955
self.wait_for_ready_state_complete()
949956
selector, by = self.__recalculate_selector(selector, by)
@@ -7013,6 +7020,20 @@ def __is_shadow_element_visible(self, selector):
70137020
except Exception:
70147021
return False
70157022

7023+
def __is_shadow_element_clickable(self, selector):
7024+
from selenium.webdriver.support import expected_conditions as EC
7025+
from selenium.webdriver.support.ui import WebDriverWait
7026+
7027+
try:
7028+
element = self.__get_shadow_element(selector, timeout=0.1)
7029+
if element.is_displayed() and WebDriverWait(self.driver, 0).until(
7030+
EC.element_to_be_clickable(element)
7031+
):
7032+
return True
7033+
return False
7034+
except Exception:
7035+
return False
7036+
70167037
def __is_shadow_element_enabled(self, selector):
70177038
try:
70187039
element = self.__get_shadow_element(selector, timeout=0.1)

seleniumbase/fixtures/page_actions.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,30 @@ def is_element_visible(driver, selector, by="css selector"):
7171
return False
7272

7373

74+
def is_element_clickable(driver, selector, by="css selector"):
75+
"""
76+
Returns whether the specified element selector is clickable.
77+
@Params
78+
driver - the webdriver object (required)
79+
selector - the locator for identifying the page element (required)
80+
by - the type of selector being used (Default: By.CSS_SELECTOR)
81+
@Returns
82+
Boolean (is element clickable)
83+
"""
84+
from selenium.webdriver.support import expected_conditions as EC
85+
from selenium.webdriver.support.ui import WebDriverWait
86+
87+
try:
88+
element = driver.find_element(by=by, value=selector)
89+
if element.is_displayed() and WebDriverWait(driver, 0).until(
90+
EC.element_to_be_clickable(element)
91+
):
92+
return True
93+
return False
94+
except Exception:
95+
return False
96+
97+
7498
def is_element_enabled(driver, selector, by="css selector"):
7599
"""
76100
Returns whether the specified element selector is enabled on the page.

0 commit comments

Comments
 (0)