如何使用POM在TestMethod中遍历多个页面

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

我正处于学习Selenium / POM的初期阶段,我很好奇如何布置这样的东西...

假设我有一个包含多个页面的应用程序,并且我为每个页面创建了一个Class(即HomePage.cs,LogInPage.cs等...),该类在页面中具有所有定位符和动作/逻辑。如果我想创建一个击打所有页面的冒烟测试,我会做这样的事情吗?

 [TestMethod]
    public void SmokeTest()
    {
        LogIn login = new LogIn();
        //do something
        HomePage homepage = new HomePage();
        //do something
        //do something
        PostsPage postspage = new PostsPage();
        // do something
        // do something
    }

在我上课时要实例化每个班级?还是这不是构建测试的正确方法?我了解基本的一页测试,但是如果给定POM设计,如果我的测试碰到多页,该如何构造我真的很困惑。

c# selenium pageobjects
1个回答
1
投票

首先,我建议将一个大型烟雾测试分成较小的块。我假设您正在使用MSTest(因为您的代码中有TestMethod)。请使用属性TestClass标记将包含某些烟雾测试的类。

通过将烟雾测试分成较小的烟雾测试,您可以轻松确定什么,失败的部分以及应用程序的哪些部分工作正常。通过图像进行测试时,一开始的验证就会失败。执行将在此处停止,其余测试将无法运行。通过切碎,只有其中一项测试将失败,其余测试可以运行。

现在回到您的主要问题。什么是处理更改页面的好方法?如果更改与应用程序中的特定流程一起进行(例如,登录后将您重定向到主页),则最好使用导致打开它的方法返回新页面的对象。示例:

public class LoginPage
{
    private IWebDriver _driver;
    public LoginPage(IWebDriver driver)
    {
        _driver = driver;
    }
    public HomePage LoginAs(string user, string password)
    {
        // Providing user and password and clicking login button
        return new HomePage(_driver);
    }
}

首页:

public class HomePage
{
    private IWebDriver _driver;
    public HomePage(IWebDriver driver)
    {
        _driver = driver;
    }
    public HomePage GoTo()
    {
        // Do something
        return this;
    }
    public bool IsAt()
    {
        return true;
    }
}

我也建议使用FluentAssertion。有了这些,测试看起来就像:

[TestMethod]
public void Test_Login_To_Home_Page()
{
    new LoginPage(this.driver)
        .LoginAs("user", "password")
        .GoTo()
        .IsAt()
        .Should()
        .BeTrue();
}
© www.soinside.com 2019 - 2024. All rights reserved.