Skip to content

Commit a456d2b

Browse files
committed
Fix issue with checkbox methods
1 parent 0bf9533 commit a456d2b

File tree

1 file changed

+54
-8
lines changed

1 file changed

+54
-8
lines changed

seleniumbase/fixtures/base_case.py

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2257,10 +2257,33 @@ def check_if_unchecked(self, selector, by="css selector"):
22572257
if self.is_element_visible(selector, by=by):
22582258
self.click(selector, by=by)
22592259
else:
2260-
selector = self.convert_to_css_selector(selector, by=by)
2261-
self.__dont_record_js_click = True
2262-
self.js_click(selector, by="css selector")
2263-
self.__dont_record_js_click = False
2260+
element = self.wait_for_element_present(selector, by=by)
2261+
opacity = self.execute_script(
2262+
'return arguments[0].style.opacity;', element
2263+
)
2264+
# Handle switches that sit on checkboxes with zero opacity:
2265+
# Change the opacity a bit to allow the click to succeed.
2266+
try:
2267+
self.execute_script(
2268+
'arguments[0].style.opacity="0.001";', element
2269+
)
2270+
except Exception:
2271+
pass
2272+
if self.is_element_visible(selector, by=by):
2273+
self.click(selector, by=by)
2274+
else:
2275+
selector = self.convert_to_css_selector(selector, by=by)
2276+
self.__dont_record_js_click = True
2277+
self.js_click(selector, by="css selector")
2278+
self.__dont_record_js_click = False
2279+
try:
2280+
self.execute_script(
2281+
'arguments[0].style.opacity="arguments[1]";',
2282+
element,
2283+
opacity,
2284+
)
2285+
except Exception:
2286+
pass
22642287

22652288
def select_if_unselected(self, selector, by="css selector"):
22662289
"""Same as check_if_unchecked()"""
@@ -2274,10 +2297,33 @@ def uncheck_if_checked(self, selector, by="css selector"):
22742297
if self.is_element_visible(selector, by=by):
22752298
self.click(selector, by=by)
22762299
else:
2277-
selector = self.convert_to_css_selector(selector, by=by)
2278-
self.__dont_record_js_click = True
2279-
self.js_click(selector, by="css selector")
2280-
self.__dont_record_js_click = False
2300+
element = self.wait_for_element_present(selector, by=by)
2301+
opacity = self.execute_script(
2302+
'return arguments[0].style.opacity;', element
2303+
)
2304+
# Handle switches that sit on checkboxes with zero opacity:
2305+
# Change the opacity a bit to allow the click to succeed.
2306+
try:
2307+
self.execute_script(
2308+
'arguments[0].style.opacity="0.001";', element
2309+
)
2310+
except Exception:
2311+
pass
2312+
if self.is_element_visible(selector, by=by):
2313+
self.click(selector, by=by)
2314+
else:
2315+
selector = self.convert_to_css_selector(selector, by=by)
2316+
self.__dont_record_js_click = True
2317+
self.js_click(selector, by="css selector")
2318+
self.__dont_record_js_click = False
2319+
try:
2320+
self.execute_script(
2321+
'arguments[0].style.opacity="arguments[1]";',
2322+
element,
2323+
opacity,
2324+
)
2325+
except Exception:
2326+
pass
22812327

22822328
def unselect_if_selected(self, selector, by="css selector"):
22832329
"""Same as uncheck_if_checked()"""

0 commit comments

Comments
 (0)