我正在使用Selenium为我的网站构建一个测试框架,我实际上希望您在使用页面对象模型时对良好实践的想法:让我们说,我有一个欢迎页面,其中包含一个注销按钮存在的标题,这个标题可以在大多数页面中看到在我的页面中,我认为最好为标题写一个单独的类,比如:
public class Header
{
[FindsBy(How = How.Name, Using = "user_profile")]
public IWebElement BtnUserProfile{ get; set; }
[FindsBy(How = How.ClassName, Using = "logout_button")]
public IWebElement BtnLogout { get; set; }
public void Logout()
{
BtnLogout.Click();
}
}
public class LoginPage
{
[FindsBy(How = How.Name, Using = "username")]
public IWebElement TxtbxUserName { get; set; }
[FindsBy(How = How.Name, Using = "password")]
public IWebElement TxtbxPassword { get; set; }
[FindsBy(How = How.ClassName, Using = "button")]
public IWebElement BtnSignIn { get; set; }
public string GoTO()
{
Driver.Navigate().GoToUrl(LoginURL);
}
public void Login(string username, string password)
{
TxtbxUserName.SendKeys(username);
TxtbxPassword.SendKeys(password);
BtnSignIn.Click();
}
public bool IsAt()
{
return Driver.Url == LoginURL;
}
}
公共类欢迎页
{
[FindsBy(How = How.Name, Using = "welcome-message")]
public IWebElement LblWelcomeMessage { get; set; }
}
我的问题是,你认为在欢迎页面中包含标题作为属性更好还是应该将它们分开?
让我们以注销测试方法的代码为例:
案例一:
public void LogoutTest() {
LoginPage loginpage = new LoginPage();
loginpage.GoTo();
loginpage.login("user", "pass");
Header header = new Header();
header.Logout();
Assert.IsTrue(loginpage.IsAt());
}
案例2:
public void LogoutTest() {
LoginPage loginpage = new LoginPage();
loginpage.GoTo();
loginpage.login("user", "pass");
WelcomePage wlcmPage = new WelcomePage();
WelcomePage.Logout();
Assert.IsTrue(loginpage.IsAt());
}
第二个问题是,您如何考虑为驱动程序编写一个静态类,而不是为每个页面编写一个单独的驱动程序。
第三个问题是你建议如何使用等待?我正在考虑将此方法添加到我的驱动程序静态类
public static void Wait(int seconds)
{
Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(seconds));
}
任何想法都将受到高度赞赏
下面的代码只是一个表示代码,您可能需要添加更多的行,例如页面工厂等。
public class driverConfig{
Static WebDriver driver;
public Static WebDriver getDriver{
driver = new WebDriver();
//Navigate to the URL here
return driver;
}
}
public Class PageClass{
public WebDriver driver;
public PageClass(){
driver = driverConfig.getDriver();
}
}
这是我在框架工作时遵循的概念:
希望有帮助!
是否有任何Gem(比如siteprism:用于Web自动化测试)可以在我的移动自动化测试项目中使用,以使用页面对象模型模式定义屏幕。 提前谢谢
我正在使用Perl和Selenium构建一个测试自动化项目。我正在使用页面对象模型。我有点不确定Selenium驱动程序将适合页面对象模型的实现。 每个页面对象是否应该“有”一个驱动程序?我的想法是,每个页面对象代表页面向用户提供的一组服务。考虑到这个概念,页面对象与驱动程序没有“has-a”关系。页面对象与驱动程序交互。不过,我仍在寻求建议。我应该将驱动程序作为web应用程序中每个页面对象的一部
想象有一个页面在说http://google.com/AddUser在这里输入记录的详细信息,然后单击保存。完成此操作后,页面将重定向到 http://google.com/userList 您可以在其中查看用户列表,包括您刚刚输入的新记录。 如果我们按照页面对象模型,那么在和验证记录是否实际保存和显示的方法应该在 如果我们认为addUser和userList是两个类的对应对象,它会像下面这样:
我想在我的页面对象中使用剧作家的定位器。我找到了一个Javascript示例(为了简洁起见,将其剥离): 试图在我的Java代码中做同样的事情: 引发空指针异常,因为初始化登录按钮时,尚未启动。 我可以 但是对于大型页面对象类来说,这将变得有点冗长/混乱。 有没有关于如何在Java中实现这一点的想法? 谢谢
在Java页面对象模型中创建步骤时实例化对象的最佳方法是什么? 有人知道Cucumber脚本是如何编译的吗? 我想,如果一切都建成并符合要求,下面的第二个或第三个选项可能是最好的方法。 如果只编译与正在执行的测试相关的步骤,那么我想这将是第一个。 我举了以下例子: 以上所有步骤(在同一个LoginSteps.java类中加上更多)从以下开始 这是最好的方法,还是创建单个实例更好? 或者在Login
我们有一个复杂的多页面应用程序,单个页面上有多达100个网页元素,多个网格,动态元素等。POM模式要求页面的所有内容都封装在页面中,即在页面类中,我需要将我的定位器定义为字符串或Bys。我还应该定义与这些元素交互的公共方法。有两种处理这些交互的方法: 为每个元素和每个交互定义一个方法。例如,我有一个元素“Submit”。在我的page类中,我将创建ClickSubmit()公共方法,并在测试中调用