没有调用C#构造函数

时间:2019-02-05 05:04:28

标签: c#

我有一个具有构造函数的基于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)

1 个答案:

答案 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打印到控制台。

您需要向我们展示一个未被调用的地方。

直到我们可以复制粘贴并运行您的代码,直到未调用构造函数,然后您才没有完整的问题。