如何使用selenium和c#将可重复的部分添加到页面对象模型?

时间:2017-04-12 07:18:42

标签: c# selenium

我正在尝试使用Selenium和C#自动化Web测试。

我有一个Web应用程序,其中包含页眉和页脚等重复多个页面的部分。

假设我有SecA,SecB,SecC部分。在我的页面中,它将显示为Page1将具有{SecA,SecB,SecC},Page2将具有{SecA,SecB}并且Page3将具有{SecB,SecC}。

我不想在每个页面对象中创建重复项。如何定义这些部分并将其包含在我的页面类中?

如果您能提供一些示例代码,那就太棒了。

3 个答案:

答案 0 :(得分:9)

//SecA:
public class SecA
    {
    [FindsBy(How = How.Id, Using = "Id")]
    private IWebElement SecAField;
    //Add Getters, setters, methods, constructors, etc..

}

//SecB:
public class SecB
{
    [FindsBy(How = How.Id, Using = "Id")]
    private IWebElement SecBField;
    //Add Getters, setters, methods, constructors, etc..
}

//SecC:
public class SecC
{
    [FindsBy(How = How.Id, Using = "Id")]
    private IWebElement SecCField;
    //Add Getters, setters, methods, constructors, etc..
}

//Page 1:

public class Page1
{
    public SecA secA { get; set; }
    public SecB secB { get; set; }
    public SecC secC { get; set; }

    //Add Getters, setters, methods, constructors, etc..
    public Page1()
    {
        secA = new SecA();
        secB = new SecB();
        secC = new SecC();
    }
}

答案 1 :(得分:2)

您必须为每个部分创建页面对象,并将其定义为所需页面中的属性/ Getters方法。

答案 2 :(得分:0)

您可以使用继承,就像在普通代码中一样。创建一个基类,其中包含页眉和页脚组件,让其他页面对象扩展这些类。

public class BasePageObject
{
    [FindsBy(How = How.Name, Using = "username")]
    private IWebElement UsernameField;
    [FindsBy(How = How.Name, Using = "password")]
    private IWebElement PasswordField;
    [FindsBy(How = How.Name, Using = "email")]
    private IWebElement MailingListFormEmail;

    public void Login() 
    {
        // Login to the application
    }

    public void SubscribeToMailingList() 
    {
        // Subscribe to the mailinglist
    }
}

public class IndexPage : BasePageObject
{
    // Your Concrete page here
}

我希望这有帮助,如果我没有正确理解你的问题,请告诉我。