@@ -2257,10 +2257,33 @@ def check_if_unchecked(self, selector, by="css selector"):
2257
2257
if self.is_element_visible(selector, by=by):
2258
2258
self.click(selector, by=by)
2259
2259
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
2264
2287
2265
2288
def select_if_unselected(self, selector, by="css selector"):
2266
2289
"""Same as check_if_unchecked()"""
@@ -2274,10 +2297,33 @@ def uncheck_if_checked(self, selector, by="css selector"):
2274
2297
if self.is_element_visible(selector, by=by):
2275
2298
self.click(selector, by=by)
2276
2299
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
2281
2327
2282
2328
def unselect_if_selected(self, selector, by="css selector"):
2283
2329
"""Same as uncheck_if_checked()"""
0 commit comments