@@ -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