我正处于学习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设计,如果我的测试碰到多页,该如何构造我真的很困惑。
首先,我建议将一个大型烟雾测试分成较小的块。我假设您正在使用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();
}