Я использую драгоценный камень Cheezy Page Object (что также означает, что я использую Watir, что также означает, что я использую Selenium). У меня также есть явно загруженный драгоценный камень.
В любом случае, у меня есть сайт, который я моделирую с пользовательским интерфейсом, написанным на угловом изображении, где есть 1 страница, содержание которой изменяется в зависимости от выпадающего списка. Страница имеет несколько разделов, но она одинакова для каждого выпадающего списка. Единственное отличие состоит в том, что я использую локаторы xpath, чтобы добраться туда (в разделах нет уникального идентификатора).
Так, например, у меня есть xpath, например html/body/div[1]/div/div[1]/div/**green**/div/div[1]
, а другой -
html/body/div[1]/div/div[1]/div/**red**/div/div[1]
Элементы в разделах, как ни странно, имеют одинаковый атрибут ID и одинаковое имя класса. Поэтому я использовал xpath для элементов, поскольку это делает его уникальным локатором.
Проблема в том, что в настоящее время существует семь выпадающих вариантов, каждый из которых имеет несколько разделов, подобных этому. И они имеют явно одинаковые элементы и структуру (с точки зрения конечного пользователя), но когда вы смотрите на html, единственная разница заключается в локаторе, который выглядит так для элементов:
html/body/div[1]/div/div[1]/div/green/div/div[1]/**<element>**
и другоекак
html/body/div[1]/div/div[1]/div/red/div/div[1]/**<element>**
В моем текущем дизайне я создал одну страницу и создал разделы страницы для каждого раздела на странице. Умножьте количество разделов страницы на количество выпадающих вариантов, и вы увидите, что это много. Некоторые из вариантов действительно генерируют дополнительные элементы, но все же есть общие элементы между всеми разделами. Я также должен продублировать все эти элементы на семи разных страницах, потому что xpath отличается. Есть ли какой-то способ для меня передать какой-то инициализатор в Page_bject page_section, например строку типа a или type-b, а затем на основе этого я также могу выбрать правильный xpath для всех элементов?
Так, если у меня естьтекстовое поле, например, в виде объекта базовой страницы page_section:
text_field(:team, xpath: "...#{type_variable}")
Можно ли сделать что-то вроде section = SomePageObject.page_section_name(type_variable)
?
РЕДАКТИРОВАТЬ: Добавление кода объекта страницы для запроса
class BasePO
include PageObject
#Option S1 Cards
page_section(:options_red_card, OptionRedCard, xpath: "/html/body/app-component/app-page/div[2]/div/div/div[1]/div/div/div/ngb-tabset/div/div/red/div[2]/div[2]/div/div/div/div")
page_section(:options_green_card, OptionGreenCard, xpath: "/html/body/app-component/app-page/div[2]/div/div/div[1]/div/div/div/ngb-tabset/div/div/green/div[2]/div[2]/div/div/div/div")
page_section(:options_yellow_card, OptionYellowCard, xpath: "/html/body/app-component/app-page/div[2]/div/div/div[1]/div/div/div/ngb-tabset/div/div/yellow/div[2]/div[2]/div/div/div/div")
#Detail S2 Cards
page_section(:detail_red_card, DetailRedCard, xpath: "/html/body/app-component/app-page/div[2]/div/div/div[1]/div/div/div/ngb-tabset/div/div/red/div[1]/div/div/div")
page_section(:detail_green_card, DetailGreenCard, xpath: "/html/body/app-component/app-page/div[2]/div/div/div[1]/div/div/div/ngb-tabset/div/div/green/div[1]/div/div/div")
page_section(:detail_yellow_card, DetailYellowCard, xpath: "/html/body/app-component/app-page/div[2]/div/div/div[1]/div/div/div/ngb-tabset/div/div/yellow/div[1]/div/div/div")
end
EDIT2: добавление содержимого page_section для каждого запроса. Все карты опций разделяют эти элементы как минимум. Различные элементы в Карточках с подробностями, но такая же структура, как и у Карточек с вариантами.