我已经看过很多带有页面对象模型的示例Selenium框架,它们通常显示:
[Test]
public void Test_Login_To_Home_Page()
{
var login = new LoginPage(this.driver);
login.LoginAs(“user”, “password1”);
var home = new HomePage(this.driver);
home.GoTo();
Assert.IsTrue(home.IsAt(), "failed to login successfully");
}
如果内容(方法,web元素)在页面对象类中是静态的,并且它们被暴露在驱动程序类的实例中,那么它看起来像:
[Test]
public void Test_Login_To_Home_Page()
{
LoginPage.LoginAs(“user”, “password1”);
HomePage.GoTo();
Assert.IsTrue(HomePage.IsAt(), "failed to login successfully");
}
我看不到通过创建页面对象类的实例得到了什么。后一种方法看起来更干净,它消除了测试中的大量噪音,并且更容易培训缺乏编程技能的无经验自动化测试人员。
在使用后一种方法时是否有任何固有的缺点?我想不出有什么办法,但似乎没有任何地方能推广这种方法,他们似乎都在使用前一种方法。有什么缺点吗?
如何调用驱动程序以查找页面对象中的元素的示例:
using static SeleniumWebDriver;
public class housesPage
{
private static IWebElement houses_SelectMenu => Instance.FindElement(By.Id("housesSelect"));
在SeleniumWebDriver类中:
public static class SeleniumWebDriver
{
public static IWebDriver Instance { get; set; }
public static IWebDriver CreateWebDriver()
{
Instance = CreateChromeDriver();
return Instance;
我看到了一个很大的缺点——您无法并行运行测试。如果您有一个静态驱动程序,这意味着您一次只能执行一个测试。测试规则之一是测试不应依赖于任何其他测试。这将被违反。
那么选择是什么呢?我更喜欢连锁的方法,使它更流畅。让我们假设LoginPage如下所示:
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。在所有这些情况下,测试将如下所示:
[Test]
public void Test_Login_To_Home_Page()
{
new LoginPage(this.driver)
.LoginAs("user", "password")
.GoTo()
.IsAt()
.Should()
.BeTrue();
}
在Selenium中,我们可以将对象存储库维护为页面对象模型。但是我们可以通过将变量定义为publicstaticfinal来维护或通过一个单独的类,并在需要时在其他类中使用。 对于例如。 并在代码中使用与 有人能帮我理解区别吗?什么是更好的方法?
我有一个列数可变的表(取决于客户),所以我在寻找一种使用JPA/Hibernate或其他方法将该表与java对象映射的方法 我不能使用POJO,因为它仅限于一个稳定的表,所以我想像这样使用java对象 } 存储MyObject的表: 当然还有质疑的可能性
我遵循这里的POM指南 问题是当输入有效的用户/密码时,POM正在返回新的HomePage(驱动程序),新的HomePage构造函数正在通过传递的驱动程序验证我们实际上在“主页”页面上。自然,驱动程序被打开到登录页面,所以在主页上查找元素是徒劳的。POM方法应该如何将“PageFactory”主页对象实际“打开”返回到主页?
可以在页面对象模型中处理动态元素吗? 例子: 我想从测试方法中传递输入的name属性值。
我正在使用Selenium为我的网站构建一个测试框架,我实际上希望您在使用页面对象模型时对良好实践的想法:让我们说,我有一个欢迎页面,其中包含一个注销按钮存在的标题,这个标题可以在大多数页面中看到在我的页面中,我认为最好为标题写一个单独的类,比如: 公共类欢迎页 我的问题是,你认为在欢迎页面中包含标题作为属性更好还是应该将它们分开? 让我们以注销测试方法的代码为例: 案例一: 案例2: 第二个问题
是否有任何Gem(比如siteprism:用于Web自动化测试)可以在我的移动自动化测试项目中使用,以使用页面对象模型模式定义屏幕。 提前谢谢