在将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),以便我们可以有效地诊断你的问题。

链接地址: http://www.djcxy.com/p/56059.html

上一篇: Run time error while typecasting WebDriver to CheckBox

下一篇: Html invalid value for type