2016-04-06 86 views
1

我試圖自動化女士Outlook日曆視圖與TestStack.White但我無法處理樹和樹項目。無法訪問樹節點使用TestStack.White

在Outlook的日曆視圖有一個日曆文件夾樹結構如下:

enter image description here

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 
} 

有沒有人有這方面的解決方法?

回答

0

我們遇到了完全相同的問題。它似乎是一個錯誤。我們開發的解決方法是作爲IUIItems而不是TreeNodes與節點交互。你必須編寫更多的自定義代碼來與它們交互,但至少它可以讓你執行點擊操作等。

+0

你能詳細說明嗎?我遇到了同樣的問題。 – AustinMatherne

0

看起來它已經工作了。 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());