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」で取得しています。
ディスカッション
コメント一覧
まだ、コメントがありません