Невозможно получить доступ к узлам дерева с помощью TestStack.White
Я пытался автоматизировать просмотр календаря MS Outlook с помощью TestStack.White
но я не могу обращаться с деревьями и элементами дерева.
В представлении календаря Outlook есть дерево папок календаря со следующей структурой:
SearchCriteria searchCriteria = SearchCriteria.ByText("Calendar Folders").AndControlType(ControlType.Tree).AndIndex(0);
Tree calendarTree = (Tree)WhiteWindows.mainWindow.Get(searchCriteria);
calendarTree.Click(); // this action is performed correctly - clicks on the tree
Console.WriteLine("No. of nodes: " + calendarTree.Nodes.Count); // this line throws an exception
что-то:
Result StackTrace:
at TestStack.White.Mappings.ControlDictionary.GetTestControlType(String className, String name, ControlType controlType, String frameWorkId, Boolean isNativeControl) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Mappings\ControlDictionary.cs:line 157
at TestStack.White.Mappings.ControlDictionary.GetTestControlType(AutomationElement automationElement) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Mappings\ControlDictionary.cs:line 218
at TestStack.White.Factory.DictionaryMappedItemFactory.Create(AutomationElement automationElement, ActionListener actionListener) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Factory\DictionaryMappedItemFactory.cs:line 13
at TestStack.White.UIItemList`1..ctor(List`1 collection, UIItemFactory factory, ActionListener actionListener) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItemList.cs:line 26
at TestStack.White.UIItems.TreeItems.Tree.get_Nodes() in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\TreeItems\Tree.cs:line 54
at TestStack.White.Bricks.DelegateInvoker.ActionInvokerWrapper`1.Call(Object[] args) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Bricks\DelegateInvoker.cs:line 198
at TestStack.White.Bricks.DynamicProxyInterceptors.Process(IInvocation invocation, CoreInterceptContext interceptedContext) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Bricks\DynamicProxyInterceptors.cs:line 21
at TestStack.White.Interceptors.CoreInterceptor.Intercept(IInvocation invocation) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Interceptors\CoreInterceptor.cs:line 31
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Castle.Proxies.TreeProxy.get_Nodes()
at UI.Tests.StepDefinitions.TempSteps.WhenCalendarIsSelectedOnPage(String p0, String p1) in StepDefinitions\TempSteps.cs:line 183
at lambda_method(Closure , IContextManager , String , String )
at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch match, Object[] arguments)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep()
at TechTalk.SpecFlow.TestRunner.CollectScenarioErrors()
at UI.Tests.Features.PlaygroundFeature.ScenarioCleanup() in UI.Tests\Features\Playground.feature.cs:line 0
at UI.Tests.Features.PlaygroundFeature.SelectNewCalendar() in UITests\Features\Playground.feature:line 11
Result Message:
Test method UI.Tests.Features.PlaygroundFeature.SelectNewCalendar threw exception:
TestStack.White.Mappings.ControlDictionaryException: Multiple TestControls found for ControlType=tree view item and FrameworkId: - TestStack.White.UIItems.TreeItems.Win32TreeNode, TestStack.White.UIItems.TreeItems.WPFTreeNode, TestStack.White.UIItems.TreeItems.Win32TreeNode
Для следующего фрагмента кода произошло то же исключение:
foreach(TreeNode node in calendarTree.Nodes) // Exception thrown here
{
//perform action on nodes
}
У кого-нибудь есть обходной путь для этого?
2 ответа
Мы столкнулись с точно такой же проблемой. Кажется, это ошибка. Обходное решение, которое мы разработали, состояло в том, чтобы взаимодействовать с узлами как IUIItems вместо TreeNodes. Вы должны написать немного больше пользовательского кода для взаимодействия с ними, но, по крайней мере, он позволяет вам выполнять действия с кликом и т. Д.
Похоже, это уже работает. TestStack.White [0.13.3] + UIAComWrapper [1.1.0.14] (мой конфиг, но вы можете попробовать без последнего):
Tree tree = mainWindow.Get<Tree>("treeMenu"); //primaryId
tree.Click();
MessageBox.Show(tree.Nodes.Count.ToString());