Я смотрел на множество примеров каркасов Selenium с объектными моделями страниц, они обычно показывают:
[Test]
public void Test_Login_To_Home_Page()
{
var login = new LoginPage(this.driver);
login.LoginAs(“user”, “password1”);
var home = new HomePage(this.driver);
home.GoTo();
Assert.IsTrue(home.IsAt(), "failed to login successfully");
}
Если содержимое (методы, веб-элементы) было на странице c классы объектов, и они были представлены Экземпляру класса драйвера, это выглядело бы так:
[Test]
public void Test_Login_To_Home_Page()
{
LoginPage.LoginAs(“user”, “password1”);
HomePage.GoTo();
Assert.IsTrue(HomePage.IsAt(), "failed to login successfully");
}
Я не вижу, что получается при создании экземпляра классов объектов страницы. Последний метод выглядит намного чище, он убирает много шума из тестов и легче обучает неопытных тестировщиков, которым не хватает навыков программирования.
Есть ли какие-либо недостатки в использовании последнего метода? Я не могу думать ни о каком другом, но, кажется, нигде не продвигаю этот подход, все они, кажется, используют первый метод. Есть ли недостатки?
Пример вызова драйвера для поиска элемента в объекте страницы:
using static SeleniumWebDriver;
public class housesPage
{
private static IWebElement houses_SelectMenu => Instance.FindElement(By.Id("housesSelect"));
и в классе SeleniumWebDriver:
public static class SeleniumWebDriver
{
public static IWebDriver Instance { get; set; }
public static IWebDriver CreateWebDriver()
{
Instance = CreateChromeDriver();
return Instance;