List.get (index) для расширения xpath для другого List <WebElement> - PullRequest
0 голосов
/ 09 февраля 2019

Мне нужно инициализировать 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> и в цикле

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Поскольку вы пытаетесь найти элементы из предыдущего WebElement, это говорит о том, что вы ищете вложенные элементы.Запуск XPath с // означает «где угодно на текущей странице».Это очень вероятно , а не , что вы хотите.

Добавление одной точки в начале вашего вложенного XPath, поэтому .// означает «где-нибудь относительно предыдущего элемента».Это гораздо более вероятно, чем вы хотите.

Это также объясняется в официальной документации :

При использовании xpath следует помнить, что веб-драйвер следует стандартным соглашениям:поиск с префиксом «//» будет искать весь документ, а не только дочерние элементы этого текущего узла.Используйте ".//", чтобы ограничить ваш поиск дочерними элементами этого веб-элемента.

0 голосов
/ 09 февраля 2019

Вы можете сделать это, взяв родительский 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...