Как получить массив или список цен в 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;
    }

}
→ Ссылка