簡體   English   中英

List.get(index)擴展另一個列表的xpath <WebElement>

[英]List.get(index) to extend xpath for another List <WebElement>

我需要使用另一個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)部分不起作用。 我將第一個列表中的所有節點添加到新列表中。

編輯:我的問題有點像這樣,但在List <WebElement>並在循環中

您可以通過采用父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"));

由於您很想從以前的WebElement查找元素,因此建議您搜索嵌套的元素。 //開頭的XPath表示“當前頁面上的任何位置”。 這很可能不是您想要的。

在嵌套XPath的開頭添加一個點,因此.//表示“相對於上一個元素的任何位置”。 這更可能是您想要的。

官方文檔中也對此進行了說明

使用xpath時,請注意webdriver遵循標准約定:以“ //”為前綴的搜索將搜索整個文檔,而不僅僅是該當前節點的子代。 使用“ .//”將搜索限制為該WebElement的子級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM