SeleniumでCheckBOXがクリックできない

エラー内容

このチェックボックス(CSSでカスタマイズ)をSeleniumでクリックするとエラーが発生します。

エラーコード
driver.find_element_by_xpath('//input[@id="check"]').click()

ElementNotInteractableExceptionMessage: element not interactable (Session info: chrome=86.0.4240.183) <traceback object at 0x00000213EEEB5348>
driver.findElement(By.xpath("//input[@id='check']")).click();

Exception in thread "main" org.openqa.selenium.ElementNotInteractableException: element not interactable (Session info: chrome=86.0.4240.198)
driver.FindElement(By.XPath("//input[@id='check']")).Click();

Exception thrown: 'OpenQA.Selenium.ElementNotInteractableException' in WebDriver.dll An unhandled exception of type 'OpenQA.Selenium.ElementNotInteractableException' occurred in WebDriver.dll Additional information: element not interactable (Session info: chrome=86.0.4240.198)
driver.FindElement(By.XPath("//input[@id='check']")).Click()

Exception thrown: 'OpenQA.Selenium.ElementNotInteractableException' in WebDriver.dll An unhandled exception of type 'OpenQA.Selenium.ElementNotInteractableException' occurred in WebDriver.dll Additional information: element not interactable (Session info: chrome=86.0.4240.198)
driver.find_element(:xpath, "//input[@id='check']").click()

Uncaught exception: element not interactable (Session info: chrome=86.0.4240.198)
await driver.findElement(By.xpath("//input[@id='check']")).click();

UnhandledPromiseRejectionWarning: ElementNotInteractableError: element not interactable (Session info: chrome=86.0.4240.198)
エラーメッセージ

element not interactable

補足)

通常のチェックボックスでも、ブラウザの倍率が100%以外の場合、要素が他の要素で隠れている場合は、クリックエラーが発生します。
詳細はこちら

エラー原因

HTMLの内容

上のCheckBoxはスタイルシートでカスタマイズしています。
CheckBox要素は display:none; で非表示で、ボックス自体はlabel要素で表現しています。

Seleniumは非表示(display:none;)の要素はクリックできませんので、チェックするにはlabelをクリックする必要があります。

一方、値(true/false)の取得はチェックボックスで行う必要があります。

正しいコード
element = driver.find_element_by_xpath("//input[@id='check']")
if not element.is_selected():
    element.find_element_by_xpath("following-sibling::label").click()
WebElement element = driver.findElement(By.xpath("//input[@id='check']"));
if(!element.isSelected()){
    element.findElement(By.xpath("following-sibling::label")).click();
}
IWebElement element = driver.FindElement(By.XPath("//input[@id='check']"));
if(!element.Selected){
    element.FindElement(By.XPath("following-sibling::label")).Click();
}
Dim element = driver.FindElement(By.XPath("//input[@id='check']"))
If Not element.Selected Then
    element.FindElement(By.XPath("following-sibling::label")).Click()
End If
element = driver.find_element(:xpath, "//input[@id='check']")
if not element.selected? then
    element.find_element(:xpath, "following-sibling::label").click()
end
var element = await driver.findElement(By.xpath("//input[@id='check']"));
if(!(await element.isSelected())){
    await element.findElement(By.xpath("following-sibling::label")).click();
}

checkBox(input要素)の兄弟要素であるlabel要素をXPath「following-sibling::label」で取得しています。