Пример 8
Для следующего примера возьмём таблицу, значения в которой могут добавляться и удаляться динамически. Ниже приведена интерактивная таблица.
@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();
}
}
}
@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");
}
Здесь мы сделали несколько операций "add/delete" в промежутках между которыми проверяли видимость и колличество записей. А так же несколько наиболее часто встречающихся проверок. Все проверки отрабатывают верно, т.к. на все действия ListWC распространяются предустановленные ожидания. О том как устанавливать ожидания будет рассмотрено в примерах далее.