Как сохранить глобальный массив из нескольких элементов из списка для последующего использования - PullRequest
0 голосов
/ 25 июня 2019

У меня есть мой код селена, который вытягивает список имен, доступных в списке. Теперь я хочу хранить те же имена, что и глобальные, для последующего использования. Пожалуйста, помогите.

Я пробовал процесс массива, он тянет только true с каждой строкой, но не значениями.

List<WebElement> allText = driver.findElements(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"));

int total = allText.size();
System.out.println(total);

for(int i=3;i<=total;i++)
{
     CaselevelSigningCMs =driver.findElement(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"+"["+i+"]"+"/td[2]")).getText();
     System.out.println(CaselevelSigningCMs);

}

Я должен получить такие имена, как: Ранджит Нюк, Судханва Г .... Я должен проверить эти имена на других страницах в другом классе / методе. CaselevelSigningCMs - глобальная переменная, она извлекает только один элемент. Мне нужен аналогичный массив, определенный как глобальный, чтобы он мог тянуть несколько элементов.

CaselevelSigningCMs =driver.findElement(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"+"["+i+"]"+"/td[2]")).getText();

Ответы [ 3 ]

0 голосов
/ 25 июня 2019
You can use Arraylist to store and retrieve them

ArrayList ts = new ArrayList ();

сохраняет объекты в массиве

ts.add ();

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

Вы можете использовать функцию Stream.map () для преобразования списка WebElements в список строк , содержащий атрибут текста элемента в одномshot:

List<String> allText = driver.findElements(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"))
        .stream()
        .map(WebElement::getText)
        .collect(Collectors.toList());
allText.forEach(System.out::println);

Мне также не очень нравится ваше выражение XPath, особенно:

  • //* подстановочный знак
  • эти table[2] и tr[3]

Подстановочные выражения требуют больше времени для выполнения и потребляют больше ресурсов, и ваш подход кажется очень зависимым от структуры DOM , поэтому я бы рекомендовал использовать Оси XPath , а также Функции / операторы XPath , чтобы сделать ваше выражение максимально относительным, надежным и надежным.

Также можно рассмотреть возможность использования Table класса HtmlElements Framework для работы с таблицами HTML

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

Посмотрите, как определяется этот String CaselevelSigningCMs.Точно так же перейдем к ArrayList

Допустим, используемая строка определена где-то вроде

 public String CaselevelSigningCMs = "";

Аналогичным образом определим ArrayList

 public List<String> collectedItems=new ArrayList<>();

в цикле add, получая текст каждогоэлемент, что-то вроде

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