Управление динамической таблицей

Пример 8

Далее рассматриваем сразу c использованием Allurium

Для следующего примера возьмём таблицу, значения в которой могут добавляться и удаляться динамически. Ниже приведена интерактивная таблица.



1. Описываем Page Object

@PageObject
@Getter
@Accessors(fluent = true)
public class DynamicEmployeesListPage extends Page {

    @Name("Add Employee")
    @Locator(css = "#addEmployeeButton")
    protected Button btnAddEmployee;

    @Name("Clear the table")
    @Locator(id = "removeAllButton")
    protected Button btnClearTable;

    @Name("Employees")
    @ListLocator(css = "#employeeTableBody tr")
    protected ListWC<EmployeeRecord> employees = new ListWC<>();

    @Widget
    @Getter
    @Accessors(fluent = true)
    public static class EmployeeRecord extends AbstractWidget {

        @Name("First name")
        @LocatorChain(xpath = "td[1]")
        protected Value firstName;

        @Name("Last name")
        @LocatorChain(xpath = "td[2]")
        protected Value lastName;

        @Name("Age")
        @LocatorChain(xpath = "td[3]")
        protected Value age;

        @Name("Email")
        @LocatorChain(xpath = "td[4]")
        protected Value email;

        @Name("Salary")
        @LocatorChain(xpath = "td[5]")
        protected Value salary;

        @Name("Department")
        @LocatorChain(xpath = "td[6]")
        protected Value department;

        @Name("Delete")
        @LocatorChain(xpath = "td[7]")
        protected Button btnDelete;

        public EmployeeRecord(SelenideElement rootElement) {
            super(rootElement);
        }

        @Override
        public String getId() {
            return email.text();
        }
    }
}

2. Пишем сценарий

@Test
@DisplayName("Showcase ListWC interaction methods")
public void dynamicListActionsShowcase() {
    UiSteps.openBrowser(dynamicTablePageUrl);
    dynamicEmployeesListPage.employees().assertSize(3);
    dynamicEmployeesListPage.btnAddEmployee().click();
    dynamicEmployeesListPage.employees().assertSizeGreaterThan(3);
    dynamicEmployeesListPage.btnAddEmployee().click();
    dynamicEmployeesListPage.employees().assertSize(5);
    dynamicEmployeesListPage.employees().get("john.smith").btnDelete().click();
    dynamicEmployeesListPage.employees().assertSizeLessThan(5);
    dynamicEmployeesListPage.btnClearTable().click();
    dynamicEmployeesListPage.employees().assertEmpty();
    dynamicEmployeesListPage.employees().assertNotVisible();
    UiSteps.refreshCurrentPage();
    dynamicEmployeesListPage.employees().assertVisible();
    dynamicEmployeesListPage.employees().assertHasItem("jane.doe@example.com");
    dynamicEmployeesListPage.employees().assertHasNotItem("ng.doe@example.com");
    dynamicEmployeesListPage.employees().assertHasItemsWithText("Human Resources");
    dynamicEmployeesListPage.employees().assertHasNoItemsWithText("Inhuman Resources");
}


Смотрим отчёт:

Отчёт Allurium: Динамическая таблица

Здесь мы сделали несколько операций "add/delete" в промежутках между которыми проверяли видимость и колличество записей. А так же несколько наиболее часто встречающихся проверок. Все проверки отрабатывают верно, т.к. на все действия ListWC распространяются предустановленные ожидания. О том как устанавливать ожидания будет рассмотрено в примерах далее.