如何在表中获取文本并迭代多个

时间:2016-07-01 13:43:28

标签: java selenium selenium-webdriver

我有一个HTML正式的

 <tbody>
    <tr> 
      <td> Test1 </td> 
      <td> .. </td>
    <tr/>
    <tr> ... </tr>
 </tbody>
 <tbody>
    <tr> 
      <td> Test2 </td> 
      <td> .. </td>
    <tr/>
    <tr> .. </tr>
 </tbody>
 <tbody>
    <tr> 
      <td> Test3 </td> 
      <td> .. </td>
    <tr/>
    <tr> .. </tr>
 </tbody>

我需要一个字符串列表Test1,Test2,Test3。我不太确定如何遍历所有tbody并进入tr并获得正确的td。有人能指出我正确的方向吗?我怎么能在这些特定元素中生成xpath?他们没有任何ids

我正在研究webDriver.findElements()。你能用这个来迭代tbody吗?如果是这样的话?

我尝试执行以下操作:

driver = new FirefoxDriver();
driver.get(..);
WebElement telem = driver.findElement(By.cssSelector("td"));
List<WebElement> tr_collection=telem.findElements(By.cssSelector("td"));

这似乎没有得到所有的Test1,Test2,Test3字符串。不幸的是,HTML没有我可以使用的ID。我怎么能遍历所有这些呢?

3 个答案:

答案 0 :(得分:1)

解决方法是:

List<String> actualValues = new ArrayList<>();
List<WebElement> tableRowsList = driver.findElements(By.cssSelector("tbody > tr"));
for(WebElement ele: tableRowsList) {
    actualValues.add(ele.findElement(By.cssSelector("td:nth-of-type(1)").getText()));
}

答案 1 :(得分:0)

与Ranjith相同,但使用Java 8和xPath:

List<String> inOneStatement = driver.findElements(By.xpath("//tbody/tr[1]/td[1]")) //List<WebElement> that contains 3 td that hold the desired strings
    .stream().map(WebElement::getText)   //accumulate the outputs from getText of each of those elements
    .collect(Collectors.toList()); // return them as List<String>

抱歉,没有检查IDE中的代码,可能有错误。

注意:我绝不会在实际的测试框架中使用这个xPath定位器,但为了构建一个更好的,我们需要更多的上下文(整页源代码)。

答案 2 :(得分:0)

尝试以下代码:

String text = null;

List<WebElement> allElements = driver.findElements(By.xpath("//td[contains(text(),'Test')]"));

for(WebElement element: allElements){
   text= element.getText();
   System.out.println("Text is : "+text);

}

希望这会对你有所帮助。