按照其他示例,我之前在调用方法以查找这些特定页面上的元素之前,先按照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
有任何想法吗?
创建页面类的实例并在测试中传递实例。请参阅以下解决方案
[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);
}
}
}
这是由SeleniumExtras.PageObjects解决的
然后我能够按照上面原始帖子中找到的模式:PageFactory.InitElements(driver,page)