Использование разных наборов объектов страницы с одинаковыми тестами селена

[Это перекрестная публикация с SQA - https://sqa.stackexchange.com/questions/35081/using-different-sets-of-page-objects-with-the-same-selenium-tests]

Я работаю над набором тестов селена для набора похожих сайтов. Набор тестов будет выполняться отдельно для каждого сайта, и тесты в наборе применимы ко всем веб-сайтам.

Эти веб-сайты построены на одной базовой платформе, однако имеют разные темы / схемы, и поэтому объекты страниц для этих сайтов должны быть разными. Это не тот случай, когда один или два селектора различны, но большинство селекторов различны, но остальная структура одинакова.

Я могу легко создать два (или три, или что угодно) набора объектов страницы, однако я не могу понять, как сказать исполнителю теста (в моем случае Cucumber cli), какие объекты страницы использовать.

Самое близкое, что я могу придумать, - это использовать разные имена пакетов с общими базовыми классами, а затем отдельные страницы, выходящие из общих базовых классов. Другой возможностью является извлечение всех селекторов в файлы свойств и загрузка того или иного на основе входного параметра, однако это помешает мне использовать PageFactory. Я также, возможно, могу создавать отдельные наборы объектов страниц в разных исходных наборах, а затем компилировать один или другой в зависимости от моих потребностей - но, опять же, я могу думать о теории, но не о ее выполнении.

Итак, каков правильный подход и как этого добиться? Если это имеет значение, проект построен с использованием gradle.

2 ответа

Поскольку тесты подходят для всех сайтов, я предполагаю, что единственная разница между страницами заключается в селекторах за объектами.

cssSelector а также xpath обеспечивает or, Предполагая, что текстовое поле имеет идентификатор id1, id2 или же id3 зависит от страницы, которую вы можете использовать

@FindBy(how = How.CSS, using = "#id1, #id2, #id3")
private WebElement textField;

Это вернет WebElement соответствует одному из идентификаторов.

Решением стало использование пользовательских ElementLocator и ElementLocatorFactory с соответствующей пользовательской аннотацией. Это немного больше работы, но это очень четкое решение. Я опубликовал это на github. Короче говоря, реализация позволяет сделать это:

public class MyPage {
    @SearchWith(page="MyPage", name="myElement", locatorsFile="{locators}")
    WebElement someElement

    ...
}

Затем запустите весь тест с -Dlocators=site1.json или же -Dlocators=site2.json - и соответствующие локаторы будут загружены с одного или другого. Это даже позволяет указать -Dlocators=[site3.json] и загрузить локаторы из site3.json ресурс (как получено с использованием this.getClass().getResourceAsStream(locatorsFile))

Другие вопросы по тегам