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

问题描述 投票:0回答:2

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

但是,似乎PageFactory现在已经过时了.netcore如下所述:https://github.com/SeleniumHQ/selenium/issues/4387

我遇到的问题是初始化我的页面为selenium的自动化框架没有PageFactory.Init我在其他用法中使用/锯。我似乎无法为下面的示例代码传递null引用异常。这就是我现在建立的:

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

示例设置:

test.cs中

[Fact]

public void CanLogin()

{

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

}

Pages.cs

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

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

有任何想法吗?

selenium .net-core pageobjects
2个回答
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);
        }
    }

}

0
投票

这是由SeleniumExtras.PageObjects解决的

然后我能够按照上面原始帖子中找到的模式:PageFactory.InitElements(driver,page)

© www.soinside.com 2019 - 2024. All rights reserved.