0

我在 Java 中使用 Selenium Webdriver。我有一张桌子,我喜欢把手放在第一行的最后一个单元格和最后一行的最后一个单元格上。我设法得到其中之一

WebElement table =driver.findElement(By.className("dataTable"));
List <WebElement> rows = table.findElements(By.tagName("tr"));
WebElement firstrow= rows.get(0);
WebElement lastrow= rows.get(rivit.size()-1); 
List <WebElement> firstcells = firstrow.findElements(By.tagName("td"));
List <WebElement> lastcells = lastcell.findElements(By.tagName("td"));

firstcell.get(6).getText());

这是因为我两次定位 td-tags。任何提示如何很好地获得两个单元格?我的行或单元格中没有标识符。

4

3 回答 3

1

您可以使用 xpath 来获取元素:

WebElement lastCellInFirstRow = driver.findElement(By.xpath("table[@class='dataTable']//tr[1]//td[last()]"));
WebElement lastCellInLastRow = driver.findElement(By.xpath("table[@class='dataTable']//tr[last()]//td[last()]"));

这是xpath 规范你可以在这里玩 xpath 。

于 2012-09-12T07:34:59.997 回答
0

您可以尝试使用 cssSelectors 来实现:

String cssLast="table[class='dataTable']>tr:first-child>td:last-child"
String cssFirst="table[class='dataTable']>tr:last-child>td:last-child"

会是这样的;

driver.findElement(By.cssSelector(cssLast)).getText();
driver.findElement(By.cssSelector(cssFirst)).getText();

另一种方法是使用js:

String getText(cssSel){
 JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append("var x = $(\""+cssSel+"\");");
        stringBuilder.append("return x.text().toString();")       ;


       String res= (String) js.executeScript(stringBuilder.toString());
}

text1=getText(cssLast);
text2=getText(csscssFirst);

但请始终确保您正确定位元素(例如,在 firefox 中使用 firepath、firebug 插件) 在此处输入图像描述

于 2012-09-12T08:48:41.697 回答
0

TableDriver 扩展(https://github.com/jkindwall/TableDriver.Java)提供了一种很好的干净方式来处理这样的事情。如果您的表格有标题,您可以(并且应该)通过标题文本识别单元格列,但如果您没有标题,您仍然可以执行类似的操作。

Table table = Table.createWithNoHeaders(driver.findElement(By.className("dataTable")), 0);
WebElement firstRowLastCell = table.findCell(0, table.getColumnCount() - 1);
WebElement lastRowFirstCell = table.findCell(table.getRowCount() - 1, table.getColumnCount() - 1);
于 2021-03-19T21:14:36.970 回答