【问题标题】:Selenium WebDriver Java locating two different table cellsSelenium WebDriver Java 定位两个不同的表格单元格
【发布时间】:2012-09-12 07:12:59
【问题描述】:

我在 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。任何提示如何很好地获得两个单元格?我的行或单元格中没有标识符。

【问题讨论】:

  • 在此处包含您的实际来源可能会有所帮助...例如:lastcell 分配给什么?你的意思是不是lastcells = lastrow.findElements(By.tagName("td"));?

标签: java selenium selenium-webdriver html-table


【解决方案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 specification。你可以玩 xpath here。

【讨论】:

  • 是否有更具体的错误信息?您能否再试一次,但以//table 而不是table 开始表达式?我自己不使用 selenium 服务器,所以无法尝试。
【解决方案2】:

你可以尝试用 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 插件)

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多