首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用SpecFlow解析Bodi接口

不能使用SpecFlow解析Bodi接口
EN

Stack Overflow用户
提问于 2018-12-17 16:57:51
回答 2查看 3.2K关注 0票数 0

我已经搜索了各地,并发现了多个关于SpecFlow的博迪异常的帖子,但是没有一个是TestStack.White的,也没有一个在我的情况下有效。

我使用的方法如下:

  • SpecFlow 2.4.0
  • TestStack.White(0.13.3)
  • MsTest(1.4.0)
  • Visual Studio 2017(15.9.4)

我试图使用现有接口将自动化元素转换为TestStack.White UIItem

代码语言:javascript
复制
    UIItemFactory itemFactory { get; set; }
    ActionListener actionListener { get; set; }
    public UIItemFactoryHelper(UIItemFactory itemFactory, ActionListener actionListener)
    {
        this.itemFactory = itemFactory;
        this.actionListener = actionListener;
    }

    public virtual IUIItem CreateIUIItemFromAutoElement(AutomationElement automationElement)
    {
        var item = itemFactory.Create(automationElement, actionListener);

        return item;
    }

然后我就这样用它

代码语言:javascript
复制
    private DataGrid GetGrid(ParameterizedString Id, Window window = null)
    {
        var form = ScenarioContext.Current["activeForm"];
        var tab = ScenarioContext.Current["activeTab"];
        var parent = GetElementParent(form.ToString(), Id.parentLevel, tab.ToString());

        if (window == null)
        {
            window = WindowHelper.GetWindow();
        }
        var parentUIItem = uiItemFactoryHelper.CreateIUIItemFromAutoElement(parent);
        var element = parentUIItem.Get<DataGrid>(SearchCriteria.ByText("DataGrid"));
        return element;
    }

当我运行测试时,我会得到以下错误

消息:测试方法SmokeTests.SmokeTestSpec.SmokeTestsFeature.EditsAreSaved抛出异常: BoDi.ObjectContainerException:接口无法解析: TestStack.White.Factory.UIItemFactory

我尝试过在ScenarioHooks中注册容器,并在预场景钩子中注册接口。当我这样做的时候,我得到了完全一样的东西。

代码语言:javascript
复制
class ScenarioHooks
{
    IObjectContainer objectContainer;
    public XmlHelper xmlHelper { get; set; }
    public ScenarioHooks(XmlHelper xmlHelper, IObjectContainer objectContainer)
    {
        this.xmlHelper = xmlHelper;
        this.objectContainer = objectContainer;
    }
    [BeforeScenario]
    protected void RegisterInterfaces()
    {
        objectContainer.ResolveAll<UIItemFactory>();
    }
}

我做SpecFlow已经很长时间了,但是我总是被这个容器注入的东西卡住了。我已经阅读了文档并搜索了不同的网站,但我无法做到这一点。

欢迎任何建议。我完全被困在这里了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-18 12:19:13

BoDi和其他每一个DI容器一样,只有在接口注册时才能解析它。

要获得UIItemFactory接口的实例,必须注册一个实现。

RegisterInterfaces方法中,不是注册接口,而是解析接口。您必须将行objectContainer.ResolveAll<UIItemFactory>()更改为objectContainer.RegisterTypeAs<THE_IMPLEMENTATION, UIItemFactory>()

票数 2
EN

Stack Overflow用户

发布于 2018-12-18 18:47:36

如果有人在这里讨论将自动化元素转换为TestStack.White的UIItem问题,我的问题太复杂了。

结果表明,您可以通过执行以下操作来隐式地执行此操作。

代码语言:javascript
复制
    public virtual IUIItem CreateIUIItemFromAutoElement(AutomationElement automationElement)
    {
        var element = new UIItem(automationElement, new NullActionListener());
        return element;
    }

您可以有一个空操作监听器,只需创建传入AutomationElement的新AutomationElement。这将隐式调用UIItemFactory.Create方法,从而消除了为显式调用注册接口的需要。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53819783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档