Как сохранить значения из списка в arraylist в селене - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь сохранить значения из списка в глобальном массиве для последующего использования / проверки на других страницах.

Мой элемент выглядит следующим образом:

Список пробных массивов, который дает только1-я строка, но у меня есть несколько элементов в списке.

<div class="col-lg-7">
    <div class="clearfix" style="padding-bottom:5px;">
        <i class="fa fa-user"></i><span style="margin-left:2%">Veena Pujari (Attorney)</span>
    </div>
    <div class="clearfix" style="padding-bottom:5px;">
        <i class="fa fa-user"></i><span style="margin-left:2%">Ranjit Nayak (Accredited Representative)</span>
    </div>
</div>

Я пытаюсь получить значения, например:

List<WebElement> PMPageCMList = driver.findElements(By.xpath("//*[@id='collapseCM']/div[2]/div[2]"));
            int totalcms = PMPageCMList.size();
            for(int i=1;i<=totalcms;i++){
                CaseManagersreceivingreminders.add(driver.findElement(By.xpath("//*[@id='collapseCM']/div[2]/div[2]/div"+"["+i+"]"+"/span")).getText());
                System.out.println(CaseManagersreceivingreminders);

Ответы [ 5 ]

1 голос
/ 26 июня 2019

Если вас интересуют следующие значения:

Veena Pujari (Attorney)
Ranjit Nayak (Accredited Representative)

вы можете изменить ваше выражение XPath , чтобы найти <i> тег , который содержит fa-user класса и извлекает его свойство innerText для его следующего брата

List<String> PMPageCMList = driver.findElements(By.xpath("//i[contains(@class,'fa-user')]/following-sibling::span"))
        .stream()
        .map(user -> user.getAttribute("innerText"))
        .collect(Collectors.toList());
PMPageCMList.forEach(System.out::println);

Демонстрация:

enter image description here

0 голосов
/ 26 июня 2019

Я нашел решение, спасибо всем!

Примечание: CaseManagersreceivingreminders - это глобальный архиватор, хранящийся

List<WebElement> PMPageCMList = driver.findElements(By.xpath("//*[@id='collapseCM']/div[2]/div[2]/div"));
        int totalcms = PMPageCMList.size();
        for(int i=1;i<=totalcms;i++){
            CaseManagersreceivingreminders.add(driver.findElement(By.xpath("//*[@id='collapseCM']/div[2]/div[2]/div"+"["+i+"]"+"/span")).getText());
            System.out.println(CaseManagersreceivingreminders);
        }
0 голосов
/ 26 июня 2019

Предположительно, вы хотите напечатать значения, например, Вина Пуджари (адвокат) , Ранджит Наяк (аккредитованный представитель) и т. Д., Поэтому вам нужно вызвать WebDriverWait для visibilityOfAllElementsLocatedBy() и вы можете использовать Java8 stream() и map() и могут использовать следующее решение:

List<String> myValues = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='clearfix']/i[@class='fa fa-user']//following::span[1]"))).stream().map(element->element.getAttribute("innerHTML")).collect(Collectors.toList());
System.out.println(myValues);

Соответствующее обсуждение можно найти в Как извлечь динамические значения атрибутов id элементов таблицы с помощью Selenium и Java

0 голосов
/ 26 июня 2019

Попробуйте вместо этого

CaseManagersreceivingreminders.add(driver.findElement(By.xpath("(.//*[@id='collapseCM']/div[2]/div[2]/div/span)["+i+"]")).getText());

Когда вы указываете xpath в формате "(.//tag//subtag)[index]", он работает больше как список Наоборот, ".//tag//subtag[index]" ищет n-го ребенка под родителем.

0 голосов
/ 26 июня 2019

Попробуйте изменить эту строку:

CaseManagersreceivingreminders.add(driver.findElement(By.xpath("//*[@id='collapseCM']/div[2]/div[2]/div"+"["+i+"]"+"/span")).getText());

Быть:

CaseManagersreceivingreminders.add(driver.findElement(By.xpath("(//*[@id='collapseCM']/div[2]/div[2])[" +i +"]")).getText());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...