【问题标题】:Instantiate a non static class to use across other classes without inheritance实例化一个非静态类以跨其他类使用而无需继承
【发布时间】:2019-03-03 20:08:32
【问题描述】:

我正在尝试改进我的测试框架,并避免我的许多类之间存在过多的相互依赖关系。这是为了测试自动化。我有一个名为 WebDriverSupport 的类,它主要包含 selenium webdriver 方法,例如 - Click()、entertext...

我有各种使用这些方法的页面对象类,但我不想继承该类。我目前的实现是这样的 -

public class WebDriverSupport{
public void ClickElement(IWebElement element){element.Click()}}

然后我有一个页面对象类,比如说主页 -

public class HomePage{
private WebDriverSupport Support{get;set;} = new WebDriverSupport();
public void ClickOnThatElement(){
Support.ClickElement(Element)}

我的问题是,有没有更好的方法来实现我的 webdriversupport 类,而无需主页继承该类或我像上面那样实例化该类?

谢谢

【问题讨论】:

  • 你使用依赖注入框架吗?那是你要的吗?为什么有私有属性而不是字段?
  • 继承有什么问题?或实例化一个类?为什么你认为删除这些“更好”?
  • @Icepickle 我确实使用依赖注入框架。这就是我想要做的,这样我就没有太多的耦合类。你是什​​么意思有字段而不是私有属性?

标签: c# selenium


【解决方案1】:

您可以使用Extensions 创建static

public static class WebElementSupport 
{
    public static void ClickElement(this IWebElement element) 
    {
        //implementation
    }
}

然后通过 using 类扩展来使用它

using Namespace.With.Extension.WebElementSupport;

public class HomePage
{
    public void ClickOnThatElement()
    {
        Element.ClickElement();
    }
}

【讨论】:

  • 谢谢你,但我也尽量避免使用静态类。我想这是最直接的解决方案。
  • @MrB 请问你为什么要避免静态类?
  • @MrB 如果你想避免它,那么这不应该是你的答案。 Rafal,在这里您将失去将WebDriverSupport 交换为基于测试或生产框架的不同实现的可能性,我猜 OP 更喜欢这样(但随后使用 DI)
猜你喜欢
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多