如何从testng类中不使用initElements()或new Operator来访问Page类方法?

时间:2019-01-27 16:10:54

标签: selenium selenium-webdriver testng pageobjects

我想实例化我的页面类,以在不使用PageFactory.initElements()或new Operator的情况下从testng类访问方法。我想让我的测试代码看起来干净整洁。

当前,我正在使用PageFactory.initElements()方法为所有testng类中的每个类初始化我的页面类,这导致代码不可读且不干净。

Homepage homePage = PageFactory.initElements(driver,HomePage.class);

是否有任何注释可以自动注入页面类?

1 个答案:

答案 0 :(得分:0)

第一步-创建一个静态驱动程序类

public sealed class Driver
{
    [ThreadStatic]
    private static IWebDriver driver = null;


    public static IWebDriver Instance
    {
        get
        {
            if (driver == null)
            {
                driver = new ChromeDriver();
            }
            return driver;
        }
    }

    public static void Testcleanup()
    {           
        driver.Quit();
        driver = null;

    }
}

第2步-创建将初始化页面对象的基类

public class TestBase
{
    private LoginPage loginPage;
    private HomePage homePage;

    public TestBase()
    {
        loginPage = new LoginPage();
        homepage = new HomePage();            
        PageFactory.InitElements(Driver.Instance, loginPage);
        PageFactory.InitElements(Driver.Instance, homePage);
    }

    public static LoginPage Login
    {
        get { return Instance.loginPage; }
    }


    public static HomePage Home
    {
        get { return Instance.homePage; }
    }

    private static TestBase Instance
    {
        get
        {
            return new TestBase();
        }
    }
}

Step3:最后在测试类中使用基类

   [TestClass]
public class PageInitTest : TestBase
{
    [TestMethod]
    public void PageInit()
    {

        Driver.Instance.Navigate().GoToUrl("url");
        Login.Email.SendKeys("Demo@gmail.com");  
    }     

}