硒网络驱动程序 - 取消勾选复杂表格中的所有复选框



我目前在尝试取消选中iframe中的复选框时遇到一些问题。情况是目前可以将某些复选框设置为默认选中,而某些则不选中。我需要勾选 1 个特定的复选框,因此明智的做法是运行一个循环,遍历所有复选框并取消选中所有复选框。

这就是我遇到问题的地方。我将发布包含复选框的 HTML 示例。(这不是我的,所以我无法编辑 HTML)。

这就是在 iframe 中有 3 种不同类型的复选框的情况下示例的外观。

<fieldset id="testing">
<legend>testing</legend>
<table>
    <tbody>
        <tr>
            <td class="EXAMPLE">
                <table id="CHECKBOXTYPE1">
                    <tbody>
                        <tr>
                            <td style="vertical-align:top;white-space:nowrap;" title="">
                                <input id="CHECKBOXTYPE1-01" type="checkbox" value="on" onclick="DOES STUFF;"/>
                            </td>
                            <td style="vertical-align:top;white-space:nowrap;" title="">TITLE1</td>
                        </tr>
                        <tr>
                            <td/>
                            <td id="CHECKBOXTYPE2-01" style="display:none;white-space:nowrap;vertical-align:top;padding:0px;">
                                <table>
                                    <tbody>
                                        <tr>
                                            <td style="vertical-align:top;" colspan="3">
                                                <select id="field" style="width:100%;">
                                                    <option value="1">STUFF1 </option>
                                                    <option value="2">STUFF2 </option>
                                                    <option value="3">STUFF3 </option>
                                                    <option value="4">STUFF4 </option>
                                                </select>
                                            </td>
                                            <td style="vertical-align:bottom;padding-left:6px;" rowspan="2">
                                                <textarea id="CHECKBOXTYPE2-01-COMMENTS" cols="50" rows="2" style="margin:0px;height:50px;" type="text" onclick="DOES STUFF">Please Insert Notes...</textarea>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td style="vertical-align:bottom;">
                                                <input type="CHECKBOXTYPE2-01-BUTTON" onclick="DOES STUFF" value="<" style="height:100%;width:32px;"/>
                                            </td>
                                            <td style="vertical-align:bottom;">
                                                <input id="CHECKBOXTYPE2-01-INPUT" type="input" readonly="" style="width:112px;"/>
                                            </td>
                                            <td style="vertical-align:bottom;">
                                                <input type="CHECKBOXTYPE2-01-BUTTON" onclick="DOES STUFF" style="width:32px;height:100%;" value=">"/>
                                            </td>
                                        </tr>
                                    </tbody>    
                                </table>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
        <tr>
            <td class="field_label">
                <table id="CHECKBOXTYPE3">
                    <tbody>
                        <tr>
                            <td style="vertical-align:top;">
                                <input id="CHECKBOXTYPE3-01" type="checkbox" title="" onclick="DOES STUFF"/>
                            </td>
                            <td style="vertical-align:top;" title="">CHECKBOX NAME</td>
                            <td style="vertical-align:top;">
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table>

我尝试迭代的代码是

try{
            for(int i=0; i < 30; i++){
                WebElement relCheckBoxes = driver.findElement(By.xpath("html/body/div[3]/fieldset/table/tbody/tr[i]/td/table/tbody/tr/td[1]"));
                if(relCheckBoxes.isSelected()){
                    relCheckBoxes.click();
                }               
            }
        }
        catch(Exception e){
            System.out.printf("didn't work");
        }

显然这不是最优化的代码段,但现在我只是在努力找到有用的东西:\我只想浏览复选框,关闭所有复选框,然后打开我需要的复选框。

谢谢。

如果要

取消选中所有复选框,请使用以下代码。效率高!

//Get the complex table
WebElement mainTable = driver.findElement(By.xpath("html/body/div[3]/fieldset/table"));
//Find all the input tags inside the mainTable and save it to a list
List<WebElement> checkBoxes = mainTable.findElements(By.tagName("input"));
//iterate through the list of checkboxes and if checked, uncheck them
for (WebElement checkbox : checkBoxes) {
    if (checkbox.isSelected()) {
        checkbox.click();
    }
} 

我在您的代码中看不到任何框架。如果有框架,请使用以下代码 1st

//switch to the frame
driver.switchTo().frame("framename/index");

希望这对你:)有所帮助

这里有几个问题:

1) 您的 XPath 不正确。你有:

"html/body/div[3]/fieldset/table/tbody/tr[i]/td/table/tbody/tr/td[1]"

相反,它应该是:

"html/body/div[3]/fieldset/table/tbody/tr[" + i + "]/td/table/tbody/tr/td[1]"

否则,您只是在寻找具有 30 次非数字索引的表格行!

2) XPath 索引是基于 1 而不是从 0 开始的(我知道,这很疯狂)。由于您的循环以 i=0 开头,它首先尝试找到不存在的第零个元素。 当findElement找不到与搜索条件匹配的元素时,它会引发异常,因此循环会立即结束。尝试改为使用 i=1 启动循环。

最新更新