Есть таблица с данными, линками и чекбоксом. По ходу тестов мне надо проверять данные в строке таблицы / открывать ее на редактирование и тп…
Я соорудил кастомный блок на подобии HtmlElement предствляющий собой строку таблицы, с getValue методами и кликами.
public class ScheduleInvoices extends ElementsContainer{
@FindBy(xpath = "//span[@class='rowCheckbox']")
private SelenideElement invoiceCheckbox;
@FindBy(xpath = "//a[@href and text()='Edit']")
private SelenideElement invoiceEditLink;
@FindBy(xpath = "//td[@class='checkboxColumn']/following-sibling::td[5]")
private SelenideElement invoiceNumber;
public void clickEdit() {
invoiceEditLink.click();
}
public String getInvoiceNumber() {
return invoiceNumber.getText();
}}
Немного непонятно как его инициализировать на “основной странице”. Сейчас я делаю это через page() метод.
public class SchedulesPage extends BasePage{
private ScheduleInvoices invoicesList = page(ScheduleInvoices.class);
public void clickEdit() {
invoicesList.clickEdit();
Так же меня интересует как создать коллекцию подобных блоков, чтобы можно было итерировать ее, например по invoiceNumber доставая из коллекции нужную строку. Если этот велосипед не поедет, выслушаю возможные, более оптимальные варианты. Спасибо.
@FindBy(xpath = "//table[@id='invoiceGrid']//tr")
public ScheduleInvoices scheduleInvoices;
То, метод scheduleInvoices.clickEdit() отрабатывает, драйвер находит первое вхождение элемента и кликает на линку в таблице. Непонятно почему блоки не иницализируются в виде list.
Сегодня или вчера вышел пул реквест для селенида с аннотацией FindAll ищет все вхождения, я как понял аналог для такой штуки: @FindBys(@FindBy(css = “”))
тоже ищет все вхождения FindBy
Получается ты не инициализируешь нужные для тебя коллекции элементов в ScheduleInvoices
То что должно быть коллекцией делай через ElementsCollection
@FindBy(xpath = “//table[@id=‘invoiceGrid’]//tr”) такой штукой ты проинициализировал одну строку в таблице инвойсГрид. Для начала найди таблицу инвйос грид, а в ней уже и ищи коллекцию строк