Selenium 页面对象模型是-A还是Has-A?
我正在为一个简单的应用程序编写一个自动化框架,我有一个关于几页的问题,我应该使用继承还是使用组合。我很乐意和你讨论这个问题 1.我有一个抽象页面,每个页面都必须继承。现在这个页面有很多等待方法,我想把它们放在页面之外。我应该为此使用继承吗。我的意思是我应该创建一个wait类并在Page类中继承它,还是应该使用composition。 公共类等待工具{ //所有的等待方法 } 2.应用程序有一个菜单栏,在所有页面上都是通用的。我应该为菜单栏创建一个单独的页面,然后在页面中继承它吗?在这里,请认为我可能还需要从上面继承waitTool类。或者我应该创建这个菜单栏作为导航类。我的意思是,这个类包含生成每个页面的PageObject的函数Selenium 页面对象模型是-A还是Has-A?,selenium,inheritance,webdriver,composition,pageobjects,Selenium,Inheritance,Webdriver,Composition,Pageobjects,我正在为一个简单的应用程序编写一个自动化框架,我有一个关于几页的问题,我应该使用继承还是使用组合。我很乐意和你讨论这个问题 1.我有一个抽象页面,每个页面都必须继承。现在这个页面有很多等待方法,我想把它们放在页面之外。我应该为此使用继承吗。我的意思是我应该创建一个wait类并在Page类中继承它,还是应该使用composition。 公共类等待工具{ //所有的等待方法 } 2.应用程序有一个菜单栏,在所有页面上都是通用的。我应该为菜单栏创建一个单独的页面,然后在页面中继承它吗?在这里,请认为我
public class TopMenu extends Page{
By homeLink = By.cssSelector("a[ui-sref='home']");
public TopMenu(WebDriver driver) {
super(driver);
}
public void gotoHomePage(){
}
}
Page
public class Page
{
public Page()
{
PageFactory.InitElements(SeleniumInfo.Driver, this);
}
}
静态Web驱动程序的位置创建一个类SeleniumInfo
:
public static class SeleniumInfo
{
public static IWebDriver Driver { get; set; }
}
SeleniumExtensionMethods
。这将包括您的wait
方法
public static class SeleniumExtensionMethods
{
public static WebDriverWait wait = new WebDriverWait(SeleniumInfo.Driver, TimeSpan.FromSeconds(20));
public static void SafeClick(this IWebElement webElement)
{
try
{
wait.Until(ExpectedConditions.ElementToBeClickable(webElement)).Click();
}
catch (TargetInvocationException ex)
{
Console.WriteLine(ex.InnerException);
}
}
}
页面
类继承。这是您的IWebElements
。像这样:
public class Page_Home : Page
{
[FindsBy(How = How.LinkText, Using = "Dashboard")]
private IWebElement btnDashboard { get; set; }
}
仅当派生类具有“IS a”关系时才扩展基类。如果页面“有”组件,则使用合成 我建议你用概念
您可以查看Arquillian lib以了解它们的特性。它非常容易使用 为什么有这么多等待方法?等待方法的一些例子是什么?它们是否与页面上的内容或通用等待方法相关?任何与给定页面相关的内容都应该在该页面类中。对于菜单栏,一个不同的类是有意义的。
public class Page_Home : Page
{
[FindsBy(How = How.LinkText, Using = "Dashboard")]
private IWebElement btnDashboard { get; set; }
}