如何针对列表中的某些数据单击复选框

时间:2019-07-17 01:58:13

标签: java selenium selenium-webdriver

我需要单击列中的两个复选框,以反对该列中的某些数据。这两件事属于同一张表。

我尝试读取整个表,然后尝试根据必要的数据读取该特定列,尝试选择行,如果这两个数据不存在,则必须移至下一页,直到两个数据不在同一页面上。

WebElement mytable = driver.findElement(By.xpath("//*[@id='gridBodyTable' and @class='ms-crm-List-Data']/tbody"));
List<WebElement> rows_table = mytable.findElements(By.tagName("tr"));   
int rows_count = rows_table.size();
int count = 0;
for (int row = 0; row < rows_count; row++) {
    //List<WebElement> Columns_row = rows_table.get(row).findElements(By.tagName("td"));            
    List<WebElement> Columns_row = driver.findElements(By.xpath("//table[@id='gridBodyTable']/tbody/tr/td[18]"));
    List<String> strings = new ArrayList<String>();
    for (WebElement celtext : Columns_row) {
        strings.add(celtext.getText());
        System.out.println(celtext);
        Thread.sleep(2000); 
        if (celtext.getText().equals("Uganda") && celtext.getText().equals("Dadaab")) {
            Columns_row.get(0).click();
            count++;
        }
        if (count == 2) {
            break;
        }
    }
    if (count < 2) {
        driver.findElement(By.xpath("//*[@id='page_R0' and @title='Load Next Page']")).click();
        readTabl();
    }
}

只需单击下一页,而不是选择这两行

3 个答案:

答案 0 :(得分:0)

您可以尝试在xpath中使用condition获取列行。这样,如果您的列行中有一个带有input标签的同级标签,那么理想情况下应该是一个复选框,那么您可以尝试以下代码

WebElement column = driver.findElement(By.xpath("//table[@id='gridBodyTable']/./td[(contains(text,'Uganda')) or (contains(text,'Dadab'))]"))
 List<WebElement> checkboxes = column.findElements(By.xpath("./input"))

答案 1 :(得分:0)

点击部分的逻辑存在问题:

if检查单元格文本是否等于“乌干达”且等于“ Dadaab”,它将始终为false。您需要使用或||

如果找到匹配项,Columns_row.get(0)则单击第一行中的复选框,而不是带有文本的复选框

for (WebElement celtext : Columns_row) {
    if (celtext.getText().contains("Uganda") || celtext.getText().contains("Dadaab")) {
        celtext.click();
        count++;
    }
}

答案 2 :(得分:0)

  1. 我不喜欢这个/tbody/tr/td[18]节,因为它可能会发生变化
  2. 最好将国家名称条件放入XPath,而不要通过WebElements进行迭代

建议的XPath表达式:

//table/tr/td[count(//table/tr/th[.='Put your desired column name here']/preceding-sibling::th) + 1]/*[text()='Uganda' or text()='Dadaab']

更多信息:


另外请注意,使用HTML tables框架的Table类更容易使用HtmlElements