使用selenium webdriver选择复选框

时间:2017-01-24 21:45:34

标签: java selenium selenium-webdriver automated-tests

我需要选择具有相同ID的复选框 HTML:

<label class="table-checkbox-label" for="record-12034">
<input id="record-12034" class="table-checkbox" type="checkbox"/>
</label>
</td>
<td>91363007</td>
<td>EC4N</td>
<td>true</td>
<td>ACTIVE</td>
</tr>
<tr data-id="12201">
<td>
<label class="table-checkbox-label" for="record-12201">
<input id="record-12201" class="table-checkbox" type="checkbox"/>
</label>
</td>

list of checkboxes。 我将合同ID发送到合同ID下面的过滤器框,就像一个自动完成框。它将根据输入给出结果。 like this 但是这里我的selenium代码点击了复选框列表中的第一个复选框,如图1所示。

请提出任何建议

编辑: : 关键字功能的代码:

public void filter(String objectName,String testData) throws InterruptedException,IOException {

WebDriverWait wait = new WebDriverWait(driver, 15);

          wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")));//wait for textbox

          driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")).sendKeys(testData);//send data to textbox
          System.out.print("Text box is now visible");
          driver.findElement(By.xpath(".//*[starts-with(@id,'record')]")).click();//click on checkbox 
          driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")).clear();//clear textbox
        }

阅读excel文件的代码:

    public void ASRTaccounts() throws IOException, InterruptedException, EncryptedDocumentException, InvalidFormatException, AWTException {
                keyword = new keywords();
                 List<String> data = new ArrayList<String>();
                    File file = new File("C:\\RDMT test\\rdmt_test\\RDMT_\\LeadSuite.xlsx");
                    Workbook workbook  = WorkbookFactory.create(file);
                    DataFormatter formatter = new DataFormatter();
                    Sheet sheet = workbook.getSheet("login");
                    for (Row row : sheet) {
                       for (Cell cell : row) {
                          data.add(formatter.formatCellValue(cell));
                       }
                    }
                System.out.println(data);
                for (int i=3;i<data.size();i++){

                    if (data.get(i).equals("filter")){
                        String key = (String) data.get(i);
                        String testData = (String) data.get(i+1);
                        String objectName = (String) data.get(i+2);
                        System.out.println(key);
                        System.out.println(testData);
                        System.out.println(objectName);
                        keyword.filter(objectName,testData);

                    }

2 个答案:

答案 0 :(得分:0)

问题在于选择要单击的复选框。

driver.findElement(By.xpath(".//*[starts-with(@id,'record')]")).click();

这将找到所有包含&#34;记录&#34;的元素。在他们的ID中(这些都是你的情况下的复选框)并且只返回第一个。 您需要使用类似driver.findElement(By.xpath(".//input[@id='record-idofcheckboxyouwanttoclick']")).click();

之类的内容选择要单击的确切复选框 编辑:哦,现在我知道问题在哪里。不确定过滤后的HTML是怎么样的,但你应该使用xpath查找包含你发送的输入/数字的<td>元素,然后找到包含{{1}的<label>前一个兄弟姐妹你想点击的(复选框)。

答案 1 :(得分:0)

可以使用preceding xpath函数选择出现在文本框之前的复选框。如果您仍然遇到同样的问题,请尝试关注并告知我们:

public void filter(String objectName,String testData) throws   InterruptedException,IOException {

      WebDriverWait wait = new WebDriverWait(driver, 15);
      wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")));//wait for textbox

      driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input")).sendKeys(testData);//send data to textbox
      System.out.print("Text box is now visible");
      driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input/preceding::input[1]")).click();//click on checkbox 
      driver.findElement(By.xpath(".//*[@id='content']/div[7]/table/thead/tr[2]/td[2]/input/preceding::input[1]")).clear();//clear textbox
    }