为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

jeck猫 2023-03-31 16:39:27
我需要单击列中针对列中某些数据的两个复选框。这两件事属于同一张表。我试图读取整个表格,然后尝试读取该特定列并根据必要的数据,尝试选择行,如果这两个数据不存在,则必须移至下一页,直到两个数据都存在不在同一页上。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 回答

?
森栏

TA贡献1810条经验 获得超5个赞

  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']

更多信息:

  • XPath 教程

  • XPath 轴

  • XPath 运算符和函数


另请注意,使用HtmlElements框架的Table类可以更轻松地处理HTML 表格。


查看完整回答
反对 回复 2023-03-31
?
月关宝盒

TA贡献1772条经验 获得超5个赞

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


if 检查单元格文本是否等于“Uganda”和“Dadaab”,它总是false. 您需要使用或||


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


for (WebElement celtext : Columns_row) {

    if (celtext.getText().contains("Uganda") || celtext.getText().contains("Dadaab")) {

        celtext.click();

        count++;

    }

}


查看完整回答
反对 回复 2023-03-31
?
繁花如伊

TA贡献2012条经验 获得超12个赞

您可以尝试在 xpath 中使用条件来获取列行。这样,如果您的列行有一个带有输入标签的兄弟,理想情况下应该是一个复选框,那么您可以尝试下面的代码


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"))


查看完整回答
反对 回复 2023-03-31
  • 3 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信