如何使用Selenium在.netcore中正确初始化页面?

时间:2019-01-10 18:11:39

标签: selenium .net-core pageobjects

在其他示例之后,我以前是按照PageFactory.InitElements(driver, page)的方法来初始化我的页面的,然后才调用该方法以在那些特定页面上查找元素。

但是,似乎PageFactory现在已被.netcore淘汰,如此处所述:https://github.com/SeleniumHQ/selenium/issues/4387

我遇到的问题是在没有PageFactory.Init的情况下初始化用于硒自动化框架的页面。我似乎无法通过以下示例代码的空引用异常。这是我现在设置的:

使用最新的.netcore,selenium.chrome.webdriver,selenium.webdriver,selenium支持和xunit

示例设置:

Test.cs

[Fact]

public void CanLogin()

{

    Pages.Login.Login("username", "password");
    Assert.True(true);

}

Pages.cs

///这是我想要初始化我的登录名并返回它但有困难的地方。这是完全假的...这就是我想要发生的地方

public LoginPage Login

{

    return Init LoginPage here;

}

LoginPage.cs

private IWebElement userNameTextField;

private IWebElement passwordTextField;

public void Login(string userName, string password)

{

    userNameTextField.SendKeys(userName);
    passwordTextField.SendKeys(password);

}

一旦击中Pages.Login.Login(),它就不会说System.NullReferenceException : Object reference not set to an instance of an object.

我已经尝试了很多方法,但是找不到能够遵循的正确模式以能够启动Pages.cs中的所有必需页面,例如:LoginPage

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

创建页面类的实例,并在测试中通过该实例。请参阅下面的解决方案

[TestClass]
public class UnitTest2
{
    [TestMethod]
    public void CanLogin()
    {
        Page LoginPage = PageInitialization.Login;
        LoginPage.Login("username", "password");
    }

    public class PageInitialization
    {
        private Page loginPage;

        public PageInitialization()
        {
            loginPage = new Page();
        }

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

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


    public class Page
    {
        private IWebElement userNameTextField;

        private IWebElement passwordTextField;

        public void Login(string userName, string password)
        {

            userNameTextField.SendKeys(userName);
            passwordTextField.SendKeys(password);
        }
    }

}

答案 1 :(得分:0)

这已由SeleniumExtras.PageObjects解决

然后,我就能按照上面原始发布中找到的模式进行操作:PageFactory.InitElements(驱动程序,页面)