Selen - Best Practices - Seite Objekt-Sprüche & Page Factory

Ich habe die Entwicklung von meinem Projekt seit 1 Jahr von 0. Ich habe ein bestimmtes Niveau erreicht "Wartung" von meinem Rahmen und tests.
Aber, jeden Tag habe ich mehr Zweifel, ob ich mit den guten Praktiken in mein Projekt. Wäre Super wenn jemand erfahrenes Antworten konnte, für ein paar meiner Fragen. Meist habe ich Fragen, die für das Page-Objekt Prasseln und Seite Factory.

Kurze Beschreibung:

Mein Projekt ist ein one-page-basierte Anwendung, geschrieben in C#, angular.js, javascript. Treiber ist eine statische Instanz und es hat einige zusätzliche Methoden(im code unten habe ich nur Karte 2). Jede Seite ist eine statische Instanz initialisiert, die in Seiten-Klasse.
Aufgrund der oben ich habe nicht initialisiert werden die Objekte, die in Prüfungen der Klasse.

Fragen-Liste:

  1. Ist es guter Ansatz, um statische Instanz Initialisieren in die Seiten.cs ? Meiner Meinung nach die [Test] mehr redeable, wenn ich dabei bin es so.

  2. Was sind die "echten" Vorteilen der Verwendung von PageObject-Bibliothek? Nur die Benennung der Variablen? "[FindsBy(Wie=Wie.Id)]" ?

  3. Was sind die "echten" Vorteilen der Verwendung von PageFactory? Weil ich finde nicht alle oder für mein Projekt ist es nutzlos.

In meinem richtigen Projekt habe ich eine Basisklasse, von der untergeordneten Klassen Erben und gemeinsame Methoden für alle Kind-Klassen geschrieben werden, in PageBase.cs. Also ich habe kein problem mit duplizierten code.

Recht, nun habe ich Sie umgesetzt Singleton in jeder Seite, so dass es ähnlich wie das Programm verwendet in folgenden code (der Unterschied ist nur die Art und Weise der Initialisierung der PageObject)

#region Signleton
private static StartPage instance;

private StartPage()
{
}

public static StartPage Instance
{
    get
    {
        if (instance == null)
        {
            instance = new StartPage();
        }

        return instance;
    }
}
#endregion
  1. Jedoch in [Test] muss ich den Namen der Variablen "Instanz", und es ist nicht so gut lesbar wie der Ansatz mit der Initialisierung des PageObject-in-Seiten.cs.
    Sind Sie damit einverstanden?

Singleton-Instanz

StartPage.Instance.Search();

Konzept der Ansatz:

Browser.cs

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

namespace SeleniumTestFramework
{
    public static class Browser
    {
        public static IWebDriver Driver { get; set; }
        public static bool Initialised { get; set; }

        public static void Initialize()
        {
            string chromeDriverDirectory = @"C:\chromedriver_win32";
            Driver = new ChromeDriver(chromeDriverDirectory);
            Initialised = true;
        }

        public static void Quit()
        {
            Driver.Quit();
            Initialised = false;
        }
    }
}

LoginPage.cs

using OpenQA.Selenium;

namespace SeleniumTestFramework.Pages
{
    public class LoginPage
    {
        private IWebElement screenLogin = Browser.Driver.FindElement(By.Id("onScreenLogin"));

        public void OpenLoginModal()
        {
            screenLogin.Click();
        }
    }
}

LoginModal.cs

using OpenQA.Selenium;

namespace SeleniumTestFramework.Pages
{
    public class LoginPage
    {
        private IWebElement screenLogin = Browser.Driver.FindElement(By.Id("onScreenLogin"));

        public void OpenLoginModal()
        {
            screenLogin.Click();
        }
    }
}

StartPage.cs

using OpenQA.Selenium;

namespace SeleniumTestFramework.Pages
{
    public class StartPage
    {
        private IWebElement surenameInput = Browser.Driver.FindElement(By.CssSelector(".id_surname_startpage_testId + input"));
        private IWebElement searchButton = Browser.Driver.FindElement(By.CssSelector(".search-button.search-customer"));


        public void Search()
        {
            surenameInput.SendKeys("1");
            searchButton.Click();
        }
    }
}

Seiten.cs

namespace SeleniumTestFramework.Pages
{
    public static class Pages
    {
        public static LoginPage LoginPage
        {
            get
            {
                var loginPage = new LoginPage();
                return loginPage;
            }
        }

        public static LoginModal LoginModal
        {
            get
            {
                var loginModal = new LoginModal();
                return loginModal;
            }
        }

        public static StartPage StartPage
        {
            get
            {
                var startPage = new StartPage();
                return startPage;
            }
        }
    }
}

Tests.cs

using NUnit.Framework;
using SeleniumTestFramework;
using SeleniumTestFramework.Pages;
using OpenQA.Selenium.Support.PageObjects;
using System.Threading;

namespace SeleniumTest
{
    [TestFixture]
    public class Tests
    {
        [SetUp]
        public void Before()
        {
            if (!Browser.Initialised) Browser.Initialize();
            Browser.Driver.Navigate().GoToUrl("http://localhost:8080/client/");
        }

        [TearDown]
        public void After()
        {
            Browser.Quit(); 
        }

        [Test]
        public void Test_without_static()
        {
            LoginPage loginPage = new LoginPage();
            loginPage.OpenLoginModal();

            LoginModal loginModal = new LoginModal();
            loginModal.Login();

            StartPage startPage = new StartPage();
            startPage.Search();
        }

        [Test]
        public void Test_with_static()
        {
            Pages.LoginPage.OpenLoginModal();
            Pages.LoginModal.Login();
            Pages.StartPage.Search();
        }
    }
}
Ich werde die Abstimmung zu schließen, ist diese Frage off-topic, weil es migriert werden sollen corereview.stackexchange.com
Es ist eine gute Frage... es ist einfach nicht dazu gedacht, für die Stack-Overflow-Website.
Eine Frage an dich..Wenn es morgen haben Sie Anspruch parallelisieren tests, wie würde u erreichen, wie der ur-browser-Instanz ist eine statische Referenz?? (wink).. Vorschlag immer verwenden, Komposition über Vererbung gibt Ihnen viel mehr Flexibilität als nur die Lesbarkeit

InformationsquelleAutor Arsey | 2015-09-17

Schreibe einen Kommentar