2

In my application, I have a grid with a column for check boxes. The ID of the check boxes for each row differs only by the number after a fixed value. xxxx_0, xxxx_1, ....

In order to select a check box in any row, the row number can be appended to get the complete ID.

My code is like this :

for(int i=0; i<10; i++) {
    CheckBox visible = (CheckBox) driver.findElement(By.id("visibleCheckboxValue_" + i));
    visible.toggle(false);
}

This gives me a run time error as "cannot cast Remote webdriver to CheckBox."

Also, if I use cast it as WebElement, I cannot use the toggle(boolean select) function.

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
    }
}

On a WebElement, I can use .isSelected() to check if the check box is selected or not, but it always returns false. Even if the check box is selected, it returns false.

Is there any way to cast a Webdriver to CheckBox, so I can use the toggle() function effectively ?

4

1 回答 1

1

好吧,您正在以错误的方式思考这个问题。

您将无法将其转换为 a CheckBox,我也不希望您这样做!这是与 Selenium 不做的另一个 API 集成!你根本不应该投射结果.findElement()

您需要考虑为什么无法使用内置功能,而不是考虑如何将其分解为不同的对象。

我建议的第一件事是明确检查您要带回的元素的“已检查”值。

当 acheckboxcheckedHTML 中时,可以以多种不同的方式设置它,请参阅这个StackOverflow 问题,了解将复选框设置为的“正确”方式checked。在这里,您应该能够看到它不是yesor的简单情况no

因此,请检查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),以便我们可以有效地与您一起诊断此问题。

于 2013-05-14T18:34:03.683 回答