Как получить массив или список цен в doudle из списка webElement на java
Пишу авто-тест на java с использованием selenium WebDriver. В задании нужно получить список (или массив) цен со страницы сайта и отсортировать во возрастанию.
Пробовала делать так:
- получить список вэб-элементов
- достать из них текст с помощью
WebElement.getText()
затем нужно как-то использовать регулярные выражения, чтобы достать значение цены начинающееся с $, но нужно именно само значение типа double. Как это сделать? Пробовала так, конечно не получилось...
public void getPriceList() {
ArrayList<WebElement> priceList = (ArrayList<WebElement>) Link.listprice.getElementsList();
//получает отсортированный список вэб-элементов с ценой со страницы
System.out.println(priceList.toString());
Double[] priceListText = new Double[priceList.size()];
for (WebElement element : priceList) {
String s = element.getText();
for (int i = 0; i < priceListText.length; i++) {
priceListText[i] = Double.parseDouble(s);
}
}
Double temp;
for (int i = 0; i < priceListText.length - 1; i++) {
if (priceListText[i] > priceListText[i + 1]) {
temp = priceListText[i];
priceListText[i] = priceListText[i + 1];
priceListText[i + 1] = temp;
}
System.out.println(priceListText.toString());
Ответы (1 шт):
Автор решения: Alexandr
→ Ссылка
Накидал небольшой пример:
package com.somepackage;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream;
public class Main {
private static final Pattern PATTERN =
Pattern.compile(
"\\$(\\s?(\\d{1,}(?:[.,]\\d{3})*(?:[.,]\\d{2}))|(\\d{1,3}(?:[.,]\\d{3})*(?:[.,]\\d{2})?))");
public static void main(String[] args) throws ParseException {
String[] rawTexts =
Stream.of("Здесь где-то цена $1000.23 и еще может быть что-то")
.toArray(String[]::new);
System.out.println(Arrays.toString(rawTexts));
Double[] prices =
Arrays.stream(rawTexts)
.flatMap(s -> parsePrices(s).stream())
.map(Double::parseDouble)
.sorted()
.toArray(Double[]::new);
System.out.println(Arrays.toString(prices));
}
private static List<String> parsePrices(
String str) {
List<String> result = new ArrayList<>();
Matcher matcher = PATTERN.matcher(str);
while(matcher.find()) {
result.add(matcher.group(1));
}
return result;
}
}