我需要为动态表选择订单ID为#1968的单元格。
我已经使用下面的代码打印了表格,请建议如何获取选择了值#1968的特定单元格?
WebElement Table_element =commonFunctions.driver.findElement(By.xpath("//*[@id='active']/div/table"));
//To locate rows of table.
List < WebElement > rows_table = Table_element.findElements(By.tagName("tr"));
//To calculate no of rows In table.
int rows_count = rows_table.size();
//Loop will execute till the last row of table.
for (int row = 0; row < rows_count; row++) {
//To locate columns(cells) of that specific row.
List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td"));
//To calculate no of columns (cells). In that specific row.
int columns_count = Columns_row.size();
System.out.println("Number of cells In Row " + row + " are " + columns_count);
//Loop will execute till the last cell of that specific row.
for (int column = 0; column < columns_count; column++) {
// To retrieve text from that specific cell.
celtext = Columns_row.get(column).getText();
System.out.println("Cell Value of row number " + row + " and column number " + column + " Is " + celtext);
}
}
表的结果:第1行中的单元格数是4行的单元格值 数字1和列号0是#1975行号1和1的像元值 列号1是SERVICE1535721248947 FOR $ 156-编辑的服务名称 行号1和列号2的单元格值已传递单元格值 行号1和列号3的表示是11月5日行2中的单元格数量 是第2行和第0列的4个像元值是#1971像元 行号2和列号1的值是service1538918641775单元格 行号2和列号2的值是已传递的单元格的值 行号2和列号3是10月18日行3中的单元格数 是第3行和第0列的4个单元格值是#1969单元格 行号3和列号1的值是service1538918641775单元格 行号3和列号2的值是已传递的单元格值 行号3和列号3是10月18日行4中的单元格数 是行号4和列号0的4个单元格值是#1968单元格 行号4和列号1的值是service1538918641775单元格 行号4和列号2的值是已传递的单元格的值 行号4和列号3是10月18日
HTML的表格:
<table class="table table-bordered table-hover">
<thead>
<tr>
<th>Order#</th>
<th>Title</th>
<th>Status</th>
<th>Created</th>
</tr>
</thead>
<tbody>
<tr class="entry">
<td class="gig first">
<div><a href="#">
#1983
</a>
</td>
<td><a href="#">SERVICE1535721248947 FOR $156 - Edited service Name</a></td>
<td class="status delivered" ><span class="label mt1 order-label-delivered">Delivered</span></td>
<td class="datetime last"><div>Nov 11</div></td>
</tr>
<tr class="entry">
<td class="gig first">
<div><a href="#">
#1982
</a>
</td>
<td><a href="#">SERVICE1535721248947 FOR $156 - Edited service Name</a></td>
<td class="status delivered"><span class="label mt1 order-label-delivered">Delivered</span></td>
<td class="datetime last"><div>Nov 11</div></td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
在我当前的项目中,我有应用程序,其中有很多表。我通常将单独的列定义为
List<WebElement> nameColumnList, List<WebElement> statusColumnList
然后,我要遍历“名称”列,搜索具有所需名称的行号。然后,使用该数字,我从“状态”列获取文本并验证其值。这就是我从表中获取所有值并单击或验证它们的方式。
答案 1 :(得分:0)
我不知道我是否理解正确,但是您想遍历表Order Id并找到一个特定的Id。
我该怎么做:
List<WebElement> orders = this.getDriver().findElements(By.xpath("/html/body/table/tbody/tr/td[1]/div/a"));
该代码将检索第一列内部的所有元素,并将其添加到订单列表中。
这样做之后,您可以拥有一个整数索引变量,该变量将跟踪特定元素的行号(如果存在)。
int index = 0;
for(WebElement elements: orders){
index++;
if(elements.text.equals("#1968"){
//Here you can click on the link or do whatever...
this.getDriver().findElement(By.xpath("/html/body/table/tbody/tr[index]/td[1]/div/a")).click();
}
}
我不记得硒的确切语法,但是我知道我遍历了元素列表,并根据我的数据集单击了特定元素。
答案 2 :(得分:0)
// Grab the table
WebElement table = driver.findElement(By.xpath("//*[@id='content']/table"));
// Now get all the TR elements from the table
List<WebElement> allRows = table.findElements(By.tagName("tr"));
// And iterate over them, getting the cells
for (WebElement row : allRows) {
List<WebElement> cells = row.findElements(By.tagName("td"));
for (WebElement cell : cells) {
if(cell.getText().equals("2010")) {
String[] ColData = row.getText().split(" ");
// Split the row text to get the mentioned column details
System.out.println(ColData[2]);
System.out.println(ColData[3]);
System.out.println(ColData[4]);
}
if(cell.getText().equals("Saudi Arabia")) {
driver.findElement(By.xpath("//*[@id='content']/table/tbody/tr[2]/td[6]/a")).click();
}
System.out.println(cell.getText());
}
}