我需要使用另一个List的值初始化List,并使用循环中的索引
我已经尝试过以下代码段:
List <WebElement> row = driver.findElements(By.xpath("//*[@id='row']"));
for (int x=0; x<row.size(); x++){
String value = row.get(x).findElements(xpath to extend that element).get(x).getText() //just a sample manipulation
// THEN HERE'S THE PROBLEM
//I NEED TO EXTEND AGAIN THE LIST TO ANOTHER LIST
List <WebElement> another_row = row.get(x).findElements('//*[@class='house active' or @class='house']//*[contains(@id,'room')]')
//another for loop for another_row
}
问题是row.get(x)
部分无法正常工作。我将第一个列表中的所有节点都添加到新列表中。
编辑:我的问题有点像this,但在List <WebElement>
和循环中
答案 0 :(得分:2)
您可以通过获取父xpath,然后将该父xpath传递到要获取的子元素的xpath来实现。
List<WebElement> parentElements = driver.findElements(By.xpath("xpath of the parent element"));
List<WebElement> childElements = parentElements.get(0).findElements(By.xpath("xpath of the child element"));
如果您的情况是将第一个列表中的所有节点都添加到新的子列表中,则可以使用xpath中的索引直接获取父节点的第一个元素,例如:
WebElement parentElement = driver.findElement(By.xpath("(//*[@id='row'])[1]"));
您还可以像这样设置元素的索引:
int i = 1;
WebElement parentElement = driver.findElement(By.xpath("(//*[@id='row'])["+i+"]"));
现在,通过此父元素,您可以获取子列表元素,例如:
List<WebElement> childElements = parentElement.findElements(By.xpath("xpath of the child element"));
答案 1 :(得分:1)
由于您试图从上一个WebElement
中查找元素,因此建议您搜索嵌套元素。以//
开始XPath的意思是“当前页面上的任何地方”。这很可能不是您想要的。
在嵌套XPath的开头添加一个点,因此.//
的意思是“相对于上一个元素的任何位置”。这很可能是您想要的。
official documentation中也对此进行了解释:
使用xpath时,请注意webdriver遵循标准约定:前缀为“ //”的搜索将搜索整个文档,而不仅仅是该当前节点的子代。使用“ .//”将搜索限制为该WebElement的子级。