【发布时间】:2016-12-21 17:54:35
【问题描述】:
我正在使用 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;
}
}
公开课WelcomePage
{
[FindsBy(How = How.Name, Using = "welcome-message")]
public IWebElement LblWelcomeMessage { get; set; }
}
我的问题是,您认为将标题作为属性包含在欢迎页面中更好还是应该将它们分开?
我们以 Logout 测试方法的代码为例:
案例一:
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));
}
任何想法都将受到高度赞赏
【问题讨论】:
标签: c# selenium-webdriver