在将WebDriver转换为CheckBox时运行时错误
在我的应用程序中,我有一个包含复选框列的网格。 每行的复选框的ID仅与固定值后的数字不同。 xxxx_0,xxxx_1,....
为了选择任意行中的复选框,可以追加行号以获取完整的ID。
我的代码是这样的:
for(int i=0; i<10; i++) {
CheckBox visible = (CheckBox) driver.findElement(By.id("visibleCheckboxValue_" + i));
visible.toggle(false);
}
这给我一个运行时错误,因为“无法将远程webdriver强制转换为CheckBox”。
另外,如果我将它转换为WebElement
,我不能使用toggle(boolean select)
功能。
for(int i=0; i<10; i++) {
WebElement visible = (WebElement) driver.findElement(By.id("visibleCheckboxValue_" + i));
if(visible.isSelected()) {
visible.click() // To uncheck the check box
}
}
在WebElement
,我可以使用.isSelected()
来检查复选框是否被选中,但它总是返回false。 即使选中该复选框,它也会返回false。
有没有办法将Webdriver转换为CheckBox,所以我可以有效地使用toggle()
函数?
那么你正在考虑这个错误的方式。
你不能将它投射到一个CheckBox
,我不会指望你! 这是与另一个API集成,Selenium不这么做! 你不应该根据.findElement()
来投射结果!
你需要考虑为什么你不能使用内置的功能,而不是关于如何将它打包成不同的对象。
我建议的第一件事是明确检查你正在带回的元素的“检查”值。
当在HTML中checked
checkbox
,可以通过各种不同的方式设置复选框,请参阅此StackOverflow有关设置复选框以checked
的“正确”方式的问题。 在这里,你应该能够看到它不是一个简单的“ yes
或“ no
。
因此,请checked
该元素上的checked
状态是什么值。 我不打算为你做,这不是学习的重点,但伪代码:
WebElement checkBox = driver.findElement(driver.findElement(By.id("visibleCheckboxValue_" + i));
string checkedStatus = checkBox.getAttribute("checked");
// now do some checking...ie. does that string now contain something? yes? it's checked.
现在,您应该可以使用.isSelected
方法,但在我们继续之前,请查看上述内容是否有效。 如果是这样,那很好,但这意味着其他地方会出现问题。 如果不是,那么你也应该提供你的HTML(以及任何可能相关的JS和CSS),以便我们可以有效地诊断你的问题。