我有一个具有构造函数的基于Selenium的页面对象模型。当我调用构造函数时,不会调用它导致测试失败。以下是我的POM代码和测试代码:
POM:
public class SellerLogin : PageObjectBase
{
public SellerLogin(IWebDriver driver) : base(driver)
{
WaitForElement(pageHeading);
}
public IWebElement pageHeading = ActionKeyword.GetElement(Driver, By.ClassName("login-title"));
public IWebElement userName = ActionKeyword.GetElement(Driver, By.Id("UserName"));
public IWebElement password = ActionKeyword.GetElement(Driver, By.Id("Password"));
public IWebElement login = ActionKeyword.GetElement(Driver, By.XPath("//input[@value='Login']"));
public override string PageUrl => "lxcheckout";
public void Login(string UserName, string Password)
{
ActionKeyword.EnterText(userName, UserName);
ActionKeyword.EnterText(password, Password);
login.Click();
}
}
测试:
[DataSource(dataSourceSettingName: "SellerCheckout")]
[TestCategory("LisaXpress"), TestMethod]
public void LisaXpress_SellerCheckout()
{
Test(() =>
{
var url = GetData("ApplicationUrl");
LogInfo("Starting new test");
Driver.Url = url;
var a = new SellerLogin(Driver);
a.Login("Electrical", "Password1");
});
}
(当我调试步骤时)构造函数不会被调用:
var a = new SellerLogin(Driver);
我为此挠头。当我删除对基页类的引用时,将调用构造函数。有什么想法吗?
基本构造函数:
namespace Flexigroup_UI_Automation.Base
{
public abstract class PageObjectBase
{
public abstract string PageUrl { get; }
static int Timeout { get; set; }
public static IWebDriver Driver { get; set; }
protected PageObjectBase(IWebDriver driver)
{
Driver = driver;
PageFactory.InitElements(Driver, this);
Timeout = ConfigurationManager.AppSettings["Timeout (s)"] != null
? int.Parse(ConfigurationManager.AppSettings["Timeout (s)"])
: 10;
}
谢谢, 拉胡尔·迪克西特(Rahul Dixit)
答案 0 :(得分:1)
这里有一个Minimal, Complete, and Verifiable example,说明构造函数确实被调用。
void Main()
{
var sl = new SellerLogin(new WebDriver());
Console.WriteLine(SellerLogin.Driver != null);
}
public abstract class PageObjectBase
{
public static IWebDriver Driver { get; set; }
protected PageObjectBase(IWebDriver driver)
{
Driver = driver;
}
}
public class SellerLogin : PageObjectBase
{
public SellerLogin(IWebDriver driver) : base(driver) { }
}
public interface IWebDriver { }
public class WebDriver : IWebDriver { }
这会将True
打印到控制台。
您需要向我们展示一个未被调用的地方。
直到我们可以复制粘贴并运行您的代码,直到未调用构造函数,然后您才没有完整的问题。