Я получил доступ к веб-таблице с помощью селена и собрал все строки таблицы в список:
List<WebElement> nameColumn = driver.findElements(By.xpath("//tbody/tr/td[2]/span"));
Я просмотрел список, getText
из элементов и сохранил результат в String
:
for (WebElement tdElement : nameColumn) {
String records = tdElement.getText();
//To be able to filter the result so as to collect words starting with a particular pattern, I converted the `String` to a `List`:
List<String> myList = new ArrayList<>(Arrays.asList(records.split(",")));
System.out.println(myList);
}
Выход:
["test1"]
["testme"]
["demoit"]
["sampleit"]
["johndoe"]
["testeurope"]
["testusa"]
["testitaly"]
["gomali"]
Using stream()
, я пробовал собирать элементы, начинающиеся с test
:
List<String> filteredFields = myList.stream().filter(field -> field.startsWith("test")).collect(Collectors.toList());
System.out.println(filteredFields);
Выход:
[]
[]
[]
[]
[]
[]
[]
[]
[]
Был возвращен пустой список. Почему фильтр может быть пуст? Может ли это быть из-за преобразования String
в List
? Как мне собрать все элементы, которые startsWith
test
?
Весь блок кода выглядит так:
public void demo() throws InterruptedException {
List<WebElement> nameColumn = driver.findElements(By.xpath("//tbody/tr/td[2]/span"));
for (WebElement tdElement : nameColumn) {
String records = tdElement.getText();
//convert to List
List<String> myList = new ArrayList<>(Arrays.asList(records.split(",")));
System.out.println(myList);
//Get elements that start with test
List<String> filteredFields = myList.stream().filter(field -> field.startsWith("test")).collect(Collectors.toList());
System.out.println(filteredFields);
}
}
@ Луи Вассерман, filteredFields
держит myList
Это не отвечает на мой вопрос. Пожалуйста, покажите полный цикл, начиная с for (WebElement tdElement : nameColumn)
, включая код filteredFields
.
Я не знаю, что еще вы ищете. Это весь соответствующий код, за исключением того, что вы ищете имена методов и классов.
Я хочу видеть один блок кода, в котором есть и filteredFields
, и ваш цикл for, а не два блока кода. Да, вы, вероятно, показали нам «весь соответствующий код», но вы не показали нам, как вы соединили два блока кода вместе, а это актуальная и важная информация.
Предусмотрен функциональный блок
Ваш arraylist содержит слова с кавычками, т.е. "тест1".
Поэтому не стоит проверять напрямую с field.startswith
. Но вы должны сначала удалить цитату, а затем проверить field.startswith
.
Используйте ниже:
List<String> filteredFields = myList.stream().filter(field -> field.substring(1, field.length()-1).startsWith("test")).collect(Collectors.toList());
Почти правильно. Каждая строка содержит вывод одного списка, сгенерированного в цикле WebElement. Внешние скобки в каждой строке создаются методом ArrayList.toString() и не являются частью данных. Однако кавычки являются частью каждой строки. Итак, ваш ответ правильный, если вы измените смещения с 2 на 1. Или, предпочтительно, просто используйте field.startsWith("test", 1).
@abhinav3414, красиво. Это работает. Спасибо
Где именно вы разместили этот код, включающий
filteredFields
?