繁体   English   中英

复选框的 isSelected() 方法总是返回 true

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM