我需要单击列中的两个复选框,以反对该列中的某些数据。这两件事属于同一张表。
我尝试读取整个表,然后尝试根据必要的数据读取该特定列,尝试选择行,如果这两个数据不存在,则必须移至下一页,直到两个数据不在同一页面上。
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();
}
}
只需单击下一页,而不是选择这两行
答案 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)
/tbody/tr/td[18]
节,因为它可能会发生变化建议的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。