Вы задали довольно много вопросов, я постараюсь ответить на некоторые из них.
Я использовал Page Object в веб-приложении с использованием Selenium, а также в настольном приложении WinForms (хотя это не совсем Page Object, я использовал его точно так же - View Object, возможно?).Мой вердикт заключается в том, что он прекрасно работает, и я определенно рекомендую его.
Вот краткий пример того, как может выглядеть тест, как мы его написали:
[Test]
public void AccountPageNameIsLoggedInUsersName()
{
FirstPage() // Returns FirstPage
.LoginAs("tobbe", "s3cr3t") // Returns LoggedInPage
.ClickOnMyAccount() // Returns MyAccountPage
.AssertThat(p => p.Name, Is.EqualTo("tobbe")); // p is of type MyAccountPage
}
Здесь,магия селена находится внутри метода FirstPage () и страниц.Таким образом, вы скрываете все ненужные детали реализации из теста.Полагаю, вы можете понять, как реализованы методы.
Бонус от сокрытия содержимого Selenium внутри страниц заключается в том, что вы можете, не меняя тест, преобразовать его, например, в тест Model-View-Presenter, гдеPageObject представляет представление (это похоже на то, что я делал в приложении WinForms).
Что касается главных страниц, мы сделали то, что мы украсили страницы интерфейсом и создали методы расширения для этих интерфейсов:
public class LoggedInPage : Page<LoggedInPage>, IMainMenuHolder { ... }
public static class MainMenuHolderExtensions
{
public static MyAccountPage ClickOnMyAccount(this IMainMenuHoder me) { ... }
}