Я искал повсюду и нашел несколько сообщений об исключениях Боди со ссылкой на 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
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, но я всегда зацикливаюсь на этих инъекциях контейнера.Я прочитал документацию и искал различные сайты, но не могу заставить это работать.
Любые предложения приветствуются.Я здесь совершенно тупой.