猿问

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

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


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


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();

    }

}

它只是点击下一页而不是选择那两行


jeck猫
浏览 113回答 3
3回答

森栏

我不喜欢这个/tbody/tr/td[18]节,因为它可能会更改最好将您的国家/地区名称条件放入 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']更多信息:XPath 教程XPath 轴XPath 运算符和函数另请注意,使用HtmlElements框架的Table类可以更轻松地处理HTML 表格。

月关宝盒

点击部分的逻辑存在问题:if 检查单元格文本是否等于“Uganda”和“Dadaab”,它总是false. 您需要使用或||如果找到匹配项,Columns_row.get(0)则单击第一行中的复选框,而不是带有文本的复选框for (WebElement celtext : Columns_row) {&nbsp; &nbsp; if (celtext.getText().contains("Uganda") || celtext.getText().contains("Dadaab")) {&nbsp; &nbsp; &nbsp; &nbsp; celtext.click();&nbsp; &nbsp; &nbsp; &nbsp; count++;&nbsp; &nbsp; }}

繁花如伊

您可以尝试在 xpath 中使用条件来获取列行。这样,如果您的列行有一个带有输入标签的兄弟,理想情况下应该是一个复选框,那么您可以尝试下面的代码WebElement column = driver.findElement(By.xpath("//table[@id='gridBodyTable']/./td[(contains(text,'Uganda')) or (contains(text,'Dadab'))]"))&nbsp;List<WebElement> checkboxes = column.findElements(By.xpath("./input"))
随时随地看视频慕课网APP

相关分类

Java
我要回答