0

我进行了全面搜索,发现了多篇关于 Bodi 异常的帖子,但这些帖子都没有与 TestStack.White 相关,而且在我的情况下没有任何回复有效。

我正在使用以下内容:

  • 规范流 2.4.0
  • TestStack.White(0.13.3)
  • 女士测试(1.4.0)
  • 视觉工作室 2017(15.9.4)

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

    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;
    }

然后我像这样使用它

    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 中注册容器并在 Before Scenario 挂钩中注册接口。当我这样做时,我得到完全相同的东西。

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 已经有很长时间了,但我总是被这种容器注入的东西所困扰。我已阅读文档并搜索了各个站点,但无法正常工作。

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

4

2 回答 2

2

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

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

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

于 2018-12-18T12:19:13.443 回答
-1

如果有人在这里解决将自动化元素转换为 UIItem 的 TestStack.White 问题,那么我的问题就过于复杂了。

事实证明,您可以通过执行以下操作来隐式执行此操作。

    public virtual IUIItem CreateIUIItemFromAutoElement(AutomationElement automationElement)
    {
        var element = new UIItem(automationElement, new NullActionListener());
        return element;
    }

您可以有一个空动作侦听器,只需创建传入 AutomationElement 的新 UIItem。这将隐式调用 UIItemFactory.Create 方法,无需为显式调用注册接口。

于 2018-12-18T18:47:36.897 回答