[英]isSelected() method for checkbox always returns true
如果任何切换按钮处于禁用状态,我想打开切换按钮 state,如果切换按钮已经启用,我想让它成为 state。
List<WebElement> allToggle = driver.findElements(By.xpath("//body//******-******-****authoring//div//table//td//label"));
for (WebElement Toggle : allToggle)
{
if (!Toggle.isSelected())
{
Toggle.click();
}
}
我不知道我哪里错了。
注意:- 按钮的类型是复选框
您尝试为label元素调用isSelected()
(基于您提供的 xpath)。
基于官方 Selenium javadoc https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/WebElement.html#isSelected()
此操作仅适用于输入元素,例如复选框、select 中的选项和单选按钮。
所以isSelected()
对于非输入元素总是返回 true。
提出的解决方案
更正您的 xpath 以引用相应的输入元素,而不是label 。
它可以是页面源代码中的一些<input type="checkbox">
元素。
另请注意,对于某些现代复选框实现,这些输入元素可以隐藏,甚至不能直接点击,无论如何,很可能您必须针对这些元素调用isSelected()
,但仍需要点击label进行切换。
因此,您需要按元素索引进行迭代并获取复选框输入并切换 label 两者。
List<WebElement> checkboxInputs = driver.findElements(By.xpath("some-xpath-part-you-need-to-determine/input"));
List<WebElement> allToggle = driver.findElements(By.xpath("//body//******-******-****authoring//div//table//td//label"));
int checkboxesCount = allToggle.size();
for (int i = 0; i < checkboxesCount; i++;) {
if (!checkboxInputs.get(i).isSelected()) {
allToggle.get(i).click();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.