Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Помогите пожалуйста разобраться с коллекцией List

selenium
java
Теги: #<Tag:0x00007f7b619ff400> #<Tag:0x00007f7b619ff1d0>

(Eugeniylennik) #1

Здравствуйте!

Занимаюсь автоматизацией, и появилась проблема автоматизировать таблицу на сайте (скриншот таблицы - http://prntscr.com/ddn28b)

Вот на данный момент моя реализация этой таблицы

public class TableRoundsCompleted {

    private SelenideElement code;
    private SelenideElement title;
    private SelenideElement state;
    private SelenideElement location;
    private SelenideElement dueDate;
    private SelenideElement riskLevel;
    private SelenideElement responsible;

    public SelenideElement getTitle() {
        return title;
    }

    public void setTitle(SelenideElement title) {
        this.title = title;
    }

    public SelenideElement getCode() {
        return code;
    }

    public void setCode(SelenideElement code) {
        this.code = code;
    }

    public SelenideElement getState() {
        return state;
    }

    public void setState(SelenideElement state) {
        this.state = state;
    }

    public SelenideElement getLocation() {
        return location;
    }

    public void setLocation(SelenideElement location) {
        this.location = location;
    }

    public SelenideElement getDueDate() {
        return dueDate;
    }

    public void setDueDate(SelenideElement dueDate) {
        this.dueDate = dueDate;
    }

    public SelenideElement getRiskLevel() {
        return riskLevel;
    }

    public void setRiskLevel(SelenideElement riskLevel) {
        this.riskLevel = riskLevel;
    }

    public SelenideElement getResponsible() {
        return responsible;
    }

    public void setResponsible(SelenideElement responsible) {
        this.responsible = responsible;
    }

    public List<TableRoundsCompleted> getRoundsCompletedTable(){
        List<TableRoundsCompleted> result = new ArrayList<>();
        SelenideElement table = $(By.xpath(".//table[contains(@class, 'checklistParts')]"));
        List<SelenideElement> rows = table.$$(By.xpath(".//tbody/tr[contains(@class, 'ng-scope') and not(contains(@class, 'checklistParts__collapse'))]"));
        for (int i = 0; i < rows.size() ; i++) {
            result.add(i, setRoundsCompletedTable(rows.get(i)));
        }
        return result;
    }

    private TableRoundsCompleted setRoundsCompletedTable(SelenideElement row) {
        List<SelenideElement> columns = row.$$(By.xpath(".//td"));
        TableRoundsCompleted result = new TableRoundsCompleted();
        result.setCode(columns.get(0));
        result.setTitle(columns.get(1));
        result.setState(columns.get(2));
        result.setLocation(columns.get(3));
        result.setDueDate(columns.get(4));
        result.setRiskLevel(columns.get(5));
        result.setResponsible(columns.get(6));
        return result;
    }
}

На выходе я получаю коллекцию данных из этой таблицы (http://prntscr.com/ddn3rl)
Подскажите пожалуйста, как мне отсортировать эти данные и получить те элементы у которых state = “NO” ?


(Sergey Korol) #2

Какая-то странная у вас коллекция. Вы называете сущность таблицей, хотя по факту работаете с ней, как со строкой таблицы. Со стороны выглядит так, будто у вас не 1 таблица, а N.

Следующий момент касатется самого контента. Зачем возвращать список UI элементов, если вас интересует лишь содержимое ячеек?

Ну а вообще, сама задача сортировки, фильтрации и трансформации элементарно решается при помощи стримов.