Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取表中的文本并迭代多个_Java_Selenium_Selenium Webdriver - Fatal编程技术网

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

Java 如何获取表中的文本并迭代多个,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我有一个正式的HTML <tbody> <tr> <td> Test1 </td> <td> .. </td> <tr/> <tr> ... </tr> </tbody> <tbody> <tr> <td> Test2 </td> <

我有一个正式的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>

测试1
.. 
... 
测试2
.. 
.. 
测试3
.. 
.. 
我需要一个字符串列表Test1,Test2,Test3。我不太确定如何迭代所有的tbody并进入tr并获得正确的td。有人能给我指一下正确的方向吗?如何将xpath生成到这些特定元素中?他们没有任何身份证

我正在调查webDriver.findElements()。你能让我用这个来遍历tbody吗?如果是,怎么做

我试着做到以下几点:

driver = new FirefoxDriver();
driver.get(..);
WebElement telem = driver.findElement(By.cssSelector("td"));
List<WebElement> tr_collection=telem.findElements(By.cssSelector("td"));
driver=新的FirefoxDriver();
驱动程序。获取(…);
WebElement telem=driver.findElement(由.cssSelector(“td”));
列表tru collection=telm.findElements(由.cssSelector(“td”));
这似乎没有得到所有的Test1、Test2、Test3字符串。不幸的是,HTML没有我可以使用的ID。我如何迭代所有这些内容?

解决方案是:

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()));
}
列出实际值=新的ArrayList();
列表表rowslist=driver.findElements(By.cssSelector(“tbody>tr”);
for(WebElement ele:tableRowsList){
add(ele.findelelement(By.cssSelector(“td:nth of type(1)”)).getText());
}

与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>
List inOneStatement=driver.findElements(By.xpath(“//tbody/tr[1]/td[1]”)//包含包含所需字符串的3个td的列表
.stream().map(WebElement::getText)//累积每个元素的getText的输出
.collect(Collectors.toList());//将它们作为列表返回
抱歉,没有在IDE中检查代码,可能有错误

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

尝试下面的代码:

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

}
String text=null;
List Allegements=driver.findElements(By.xpath(//td[contains(text(),'Test')]);
for(WebElement:等位基因){
text=element.getText();
System.out.println(“文本为:“+Text”);
}

希望这会对您有所帮助。

这会起作用,但这是一个危险的定位器。如果页面上有任何其他表,
tbody>tr
也将匹配该表中的所有行。我建议从
元素开始。幸运的是,这有一个
id
,可以用来确保您拥有所需的表格。是的。。这很理想,但问题中的代码没有任何id's@RemcoW如果你认为它有用,请竖起大拇指。。谢谢,我知道,我不是故意的。事实上,我认为如果不进行编辑会更好,因为这样它就匹配了问题中的
html
。我只是给任何读过这个答案的人一个提示;)回滚我的更改:D您能帮我将其转换为Ruby吗?我不太确定在.stream().map(WebElement::getText)到rubySorry之后该怎么做,我没有ruby方面的经验。我将查看手册,看看是否可以帮助翻译。我得到StaleelementException与迭代。有什么解决方案吗?StaleElementReference异常意味着您以前找到的、现在尝试与之交互的元素不再存在,至少不再以以前的形式存在。网上有很多关于这个例外的文章,我最喜欢的是使用代理模式,它会重复元素搜索几次