如果切换按钮处于禁用状态,我想打开切换按钮,如果切换按钮已经处于启用状态,我想让它处于启用状态。
List<WebElement> allToggle = driver.findElements(By.xpath("//body//******-******-****authoring//div//table//td//label"));
for (WebElement Toggle : allToggle)
{
if (!Toggle.isSelected())
{
Toggle.click();
}
}
我不知道我哪里错了。
注:-按钮类型为复选框
您试图为标签元素调用isSelected()
(基于您提供的xpath)。
基于官方Selenium javadochttps://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/WebElement.html isSelected ()
此操作仅适用于复选框、选择中的选项和单选按钮等输入元素。
对于非输入元素,isSelected()
总是返回true。
解决方案提出了
更正xpath以引用相应的输入元素,而不是label.
可以是页面源中的某个<input type="checkbox">
元素
还要注意,对于一些现代的复选框实现,input元素可以隐藏,甚至不能直接点击,无论如何,很可能你必须调用isSelected()
对这些元素,但仍然需要点击标签切换。
所以你需要迭代元素索引和获得复选框输入和切换标签。
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();
}
}
最后,我创造了一个同样有效的解决方案。
问题是每个复选框都有两个部分,一个是<Input>
标签,另一个是<Span>
标签。输入标签有关于复选框是否选中的状态,& but click action
将不与输入一起工作,它只与Span一起工作,所以我这样处理它:
protected void disableToggle(By Span_Path, By InputPath) {
if (!driver.findElement(InputPath).isSelected()) {
System.out.println(" Toggle is Already Disabled ");
} else if (driver.findElement(InputPath).isSelected()) {
click(Span_Path, WaitStrategy.CLICKABLE, "Toggle Button Disabled");
}
}