Привіт. Таке питання. Якщо підганяти модель під стиль PageObject, то чи можна використовувати всередині коду xpath? Чи його потрібно виключати і замінювати визначеним елементом? Наприклад всі елементи сторінки визначені як змінні через PageObject, і з ними непогано працюється. Проте існують ситуації, коли потрібно використовувати xpath і нічим його не замінити. Чи дозволяє це філософія PageObject?
Це більше питання локаторів, якшо ви їх зберігаєте окремо від фреймворку, або у верньому класі, то варто притримуватись одного стилю в записах локаторів.
Тому кращим фіксом даної проблеми - це зробити обгортку для елементів які будуть доступні через xpath і управляти ними як обєктами, або ж створювати змінні типу WebElement у класах які генерують Ваші тесткейси.
недавно переводил проект на page object pattern, какраз задавался подобным вопросом. Сделал следующим образом, обьект страницы реализует интерфейс страницы(Java).
а в свою очередь в интерфейсах определены локаторы в виде констант, после чего используется предложенный выше вариант с PageFactory, определяется элемент который присутствует на данной странице и через аннотацию @FindBy берет данные из интерфейса.(это применимо к статическим локаторам, к динамическим, когда локатор может менятся в зависимости от определенных данных следует использовать несколько другой подход).
после этого в конструкторе страниц я инициализирую все необходимые элементы при помощи PageFactory.initElements;
вот код одного из классов страницы:
public class SomePage extends BasicPage implements ISomePage{
PageObject не удобен, возьмем к примеру форму логина - она бывает двух состояний (авторизирован пользователь или нет) и тянеться через большинство страниц сайта.
Вибачте, що так довго не відповідав. Був зайняти з іншим проектом.
Звичайно я розумію, що можна їх задефайнити по аналогії з id. Проте часто буває коли потрібно перевіряти значення елементів таблиці, і там вже самі розумієте шо є купа динамічних xpath і без їх використання ніяк не обійтися.
Наскільки я зрозумів, то Ви пропонуєте дефайнити лише частину xpath, а динамічне значення вписувати вже між змінними, правильно?
предлагаю использовать метод который будет в качестве параметра принимать данные которые нужно искать в ячейках таблицы, и естественно использовать в этом случае составной xpath, например:
Shaman, @FindBy берет данные из интерфейса.(это применимо к статическим локаторам, к динамическим, когда локатор может менятся в зависимости от определенных данных следует использовать несколько другой подход).
С этого момента прошу поподробнее, как можно сделать обвертку элементу, если к количество чекбоксов (элементов) внутри обьекта меняется в зависимости от установленных настроек.
Один и вариантов что я разсматриваю - делать ArrayList<WebElement> (Java), а потом уже работать с тем что словил вебдрайвер внутри List-а.