Есть ли способ использовать findElements и ограничить результаты первыми x элементами - PullRequest
0 голосов
/ 09 января 2020

У меня есть таблица, которая может сильно различаться по количеству столбцов, которые она содержит (от 20 столбцов до 10000). У меня есть метод, который получает данные таблицы, чтобы я мог сравнить значения данных, но мне, как правило, нужны только значения, которые встречаются в первых нескольких столбцах. Чтобы получить данные столбца из строки, которую я использую:

List<WebElement> columns = rows.get(rnum).findElements(By.tagName("td"));

Получает столбцы (элементы td) для номера строки rnum в таблице.

Мой вопрос: есть ли способ ограничить findElements, чтобы вернуть только первое число хх результатов? может вернуть только первые 100 столбцов? Этот метод прекрасно работает, когда имеется 20 столбцов, но занимает бесконечно 10000 столбцов. Или есть ли лучший способ перебрать элементы TD данных строки, чтобы я мог отделиться от l oop, когда нашел нужный мне столбец?

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Вы можете сначала достичь 20-го элемента, используя индекс, а затем вы можете использовать preceding в xpath для извлечения всех элементов перед этим элементом. Это даст вам первые 19 элементов в этом случае.

Вы можете сделать это следующим образом:

List<WebElement> columns = rows.get(rnum).findElements(By.xpath("//td[20]//preceding::td"));

Используя это, вы можете выбрать любое количество элементов, вам просто нужно указать это значение в xpath в качестве индекса.

1 голос
/ 09 января 2020

Если у вас есть n столбцы из списка ниже

List<WebElement> columns = rows.get(rnum).findElements(By.tagName("td"));

и вы хотите получить доступ только к первым 50 столбцам. Вы можете достичь двумя способами в Java.

Solution-1: Мы можем использовать функцию subList для получения первых 50 элементов

 List<WebElement> firstFiftyCols = columns.subList(0, 50);

Solution -2: использование Java 8 потоков

List<WebElement> firstFiftyCols = columns.stream().limit(50).collect(Collectors.toList());

Решение-3: Выберите первый N узел с помощью xpath

List<WebElement> firstFiftyCols = rows.get(rnum).findElements(By.xpath("/td[position() >= 1 and not(position() > 50)]"));

Примечание: я попробовал этот xpath и проверил, меньше ли столбцов меньше 50, затем он возвращает список до последнего столбца.

Замените 50 на количество столбцов, к которому вы хотите получить доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...