【发布时间】:2020-07-20 20:49:47
【问题描述】:
目前正在使用 C# 和 SpecFlow 构建自动化框架。目前我的一个抱怨是我实例化一个类以访问方法或 Web 元素的次数。
下面是我在单独的类方法中实例化的类的一部分
public class UniversalSelectors : BasePage
{
public UniversalSelectors(IObjectContainer container): base(container) { }
//iFrame
public IWebElement iFrame => Driver.FindElement(By.Id("content"));
//Nav Bar Elements
public void ClickAdministration()
{
Driver.FindElement(By.XPath("//a[@id='administration-menu-item']"));
}
public void ClickDevicesMenu()
{
Driver.FindElement(By.XPath("//*[@id='manage-devices-menu-item']"));
}
public void ClickRemoteMonitoring()
{
Driver.FindElement(By.Id("manage-monitoring-menu-item"));
}
public void ClickSystemUsers()
{
Driver.FindElement(By.XPath("//*[@id='manage-users-menu-header']"));
}
//Quick Search Elements
public IWebElement Quick_Search => Driver.FindElement(By.XPath("//*[@class='pSearch pButton']"));
public IWebElement Quick_Search_Box => Driver.FindElement(By.XPath("//*[@class='qsbox']"));
public IWebElement Quick_Search_Button => Driver.FindElement(By.XPath("//*[@class='btn btn-sm btn-success flexigrid-search-button']"));
public IWebElement Quick_Clear_Button => Driver.FindElement(By.XPath("//*[@class='btn btn-sm btn-success flexigrid-clear-button']"));
您可以在下面看到我是如何在不同类的每个方法中实例化的。但我想知道的是,这是必要的还是有更好的解决方法?
public void NavigateToRoles()
{
var universalselectors = new UniversalSelectors(_container);
universalselectors.ClickAdministration();
Thread.Sleep(1000);
universalselectors.ClickSystemUsers();
Thread.Sleep(1000);
Roles.Click();
Thread.Sleep(2000);
}
public void CreateBlankRole()
{
var universalselectors = new UniversalSelectors(_container);
Driver.SwitchTo().DefaultContent();
Driver.SwitchTo().Frame(universalselectors.iFrame);
universalselectors.ClickNewRecord();
Thread.Sleep(2000);
universalselectors.ClickSaveRecord();
Thread.Sleep(2000);
}
【问题讨论】:
-
那么您想消除或减少初始化 UniversalSelectors 的次数吗?
-
NavigateToRoles和CreateBlankRole方法属于哪个类?这些类和方法与您的步骤定义和功能文件有什么关系? -
是的,所以想知道是否有办法只在每个类中初始化 UniversalSelectors 一次,而不是在每个方法中单独初始化
-
这些方法位于称为角色的页面对象类中,它们链接到与功能文件相关的步骤定义。我还有一个基本年龄类,其中填充了可以被它绑定的任何类访问的方法。把初始化放在那里有用吗?
标签: c# selenium automation instantiation specflow