Selenium Automation со стати c Страница объектной модели - PullRequest
0 голосов
/ 01 февраля 2020

Я смотрел на множество примеров каркасов 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;

1 Ответ

1 голос
/ 02 февраля 2020

Я вижу один большой недостаток - вы не можете выполнять свои тесты параллельно. Если у вас есть драйвер stati c, это означает, что вы можете выполнить только один тест за один раз. Одним из правил испытаний является то, что тест не должен зависеть от какого-либо другого теста. Это было бы нарушено.

Так, каков выбор? Я предпочитаю объединить методы, чтобы сделать их более свободными Предположим, что LoginPage выглядит следующим образом:

public class LoginPage
{
    private IWebDriver _driver;
    public LoginPage(IWebDriver driver)
    {
        _driver = driver;
    }
    public HomePage LoginAs(string user, string password)
    {
        // Providing user and password and clicking login button
        return new HomePage(_driver);
    }
}

HomePage:

public class HomePage
{
    private IWebDriver _driver;
    public HomePage(IWebDriver driver)
    {
        _driver = driver;
    }
    public HomePage GoTo()
    {
        // Do something
        return this;
    }
    public bool IsAt()
    {
        return true;
    }
}

Я также советую использовать FluentAssertion . При этом тест будет выглядеть так:

[Test]
public void Test_Login_To_Home_Page()
{
    new LoginPage(this.driver)
        .LoginAs("user", "password")
        .GoTo()
        .IsAt()
        .Should()
        .BeTrue();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...