Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用POM在TestMethod中遍历多个页面_C#_Selenium_Pageobjects - Fatal编程技术网

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

C# 如何使用POM在TestMethod中遍历多个页面,c#,selenium,pageobjects,C#,Selenium,Pageobjects,我正处于学习Selenium/POM的开始阶段,我很好奇这样的东西是如何布置的 假设我有一个包含多个页面的应用程序,我有一个为每个页面创建的类(即HomePage.cs、LogInPage.cs等),该类包含页面中的所有定位器和操作/逻辑。如果我想创建一个能够访问所有页面的烟雾测试,我会这样做吗 [TestMethod] public void SmokeTest() { LogIn login = new LogIn(); //do somet

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

假设我有一个包含多个页面的应用程序,我有一个为每个页面创建的类(即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设计,如果我的测试涉及多个页面,我真的很困惑我的测试需要如何结构化。

首先,我建议将一个大的冒烟测试分成更小的块。我假设您使用的是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;
    }
}
我也建议使用。 在所有这些情况下,测试将如下所示:

[TestMethod]
public void Test_Login_To_Home_Page()
{
    new LoginPage(this.driver)
        .LoginAs("user", "password")
        .GoTo()
        .IsAt()
        .Should()
        .BeTrue();
}

谢谢,在每个类的末尾添加一个返回另一个页面对象的方法是有意义的。此外,将测试分解为更小的测试也是有意义的,我大体上同意,但对于烟雾测试/端到端,我看不出这是如何工作的。如果我有主页、登录页面、第3-10页……如果我想测试整个流程,我如何分解这些内容?我不能进入第3页,第4页等没有经过登录和主页第一。有道理?这篇文章让mealso感到困惑,很好地说明了流畅的断言。这将使其他人更容易阅读!谢谢如果你在做一个E2E测试,它涵盖了特定的流,那么你是对的,应该在一个测试中。当我阅读您的问题时,我认为您希望登录并只验证几页,而不涉及特定案例。