我有一个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。我怎么能遍历所有这些呢?
答案 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);
}
希望这会对你有所帮助。