我正在研究具有多个自定义控件的WPF应用程序。我正在使用编码的UI测试生成器来为我的应用程序测试创建脚本。当我运行测试时,它给了我一个例外,该例外发生在下面显示的行。
uIRadComboBoxComboBox.SelectedItem = this.SelectingWeddingParams.UIRadComboBoxComboBoxSelectedItem;
我尝试使用鼠标单击并更改坐标,但是效果不佳。
该功能的代码为
WpfCustom uIItemCustom = this.UIIntelliClientWindow.UIItemCustom;
WpfComboBox uIRadComboBoxComboBox = this.UIIntelliClientWindow.UIEventInfoRegionCustom1.UIPleasewaitProgressBar.UIRadComboBoxComboBox;
#endregion
// Click custom control
Mouse.Click(uIItemCustom, new Point(448, 307));
// Select 'Wedding' in 'RadComboBox' combo box
uIRadComboBoxComboBox.SelectedItem = this.SelectingWeddingParams.UIRadComboBoxComboBoxSelectedItem;
该异常粘贴在下面。
结果StackTrace:
在Microsoft.VisualStudio.TestTools.UITest.Playback.Engine.IScreenElement.FindAllDescendants(String bstrQueryId,Object&pvarResKeys,Int32 cResKeys,Int32 nMaxDepth)
在Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.FindAllScreenElement(字符串queryId,Int32深度,布尔singleQueryId,布尔throwException,布尔resetSkipStep)
在Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.FindScreenElement(String queryId,Int32 depth,Boolean resetSkipStep)
在Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindFirstDescendant(String queryId,Int32 maxDepth,Int32&timeLeft)
---内部异常堆栈跟踪的结尾---
在Microsoft.VisualStudio.TestTools.UITesting.Playback.MapControlNotFoundException(例如,COMException,IPlaybackContext上下文)
在Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowComException(COMException innerException,IPlaybackContext上下文)
在Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowException(Exception异常,IPlaybackContext上下文)
在Microsoft.VisualStudio.TestTools.UITesting.Playback.MapAndThrowException(Exception exception,String queryId)
在Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindFirstDescendant(String queryId,Int32 maxDepth,Int32&timeLeft)
在Microsoft.VisualStudio.TestTools.UITesting.SearchHelper.GetElement(Boolean useCache,ISearchArgument searchArg)
在Microsoft.VisualStudio.TestTools.UITesting.SearchHelper.Search(ISearchArgument searchArg)
在Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindInternal()
在Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FindControlIfNecessary()
在Microsoft.VisualStudio.TestTools.UITesting.UITestControl.SetPropertyPrivate(String propertyName,Object value)
在Microsoft.VisualStudio.TestTools.UITesting.UITestControl。<> c__DisplayClass180_0.b__0()
在Microsoft.VisualStudio.TestTools.UITesting.CodedUITestMethodInvoker.InvokeMethod [T](Func`1函数,UITestControl控件,布尔firePlaybackErrorEvent,布尔logAsAction)
在Microsoft.VisualStudio.TestTools.UITesting.UITestControl.SetProperty(String propertyName,Object value)
在Microsoft.VisualStudio.TestTools.UITesting.WpfControls.WpfComboBox.set_SelectedItem(字符串值)
位于C:\ Users \ Dev2 \ source \ repos \ AddingEventUsingDataDrivenTesting \ AddingEventUsingDataDrivenTesting \ UIMap.Designer.cs:line 166中的AddingEventUsingDataDrivenTesting.UIMap.SelectingWedding()
在C:\ Users \ Dev2 \ source \ repos \ AddingEventUsingDataDrivenTesting \ AddingEventUsingDataDrivenTesting \ CodedUITest1.cs:line 30中的AddingEventUsingDataDrivenTesting.CodedUITest1.CodedUITestMethod1()处
结果消息:
测试方法AddingEventUsingDataDrivenTesting.CodedUITest1.CodedUITestMethod1引发异常:
Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException:回放未能找到具有给定搜索属性的控件。额外细节:
技术名称:'UIA'
FrameworkId:“ Wpf”
ControlType:“组合框”
HelpText:“ RadComboBox”
实例:“ 2”
搜索“” TabList可能失败,因为它可能已虚拟化了子级。如果要搜索的控件是''TabList的后代,则将其包含为父容器可能会解决此问题。 ---> System.Runtime.InteropServices.COMException:从对COM组件的调用返回了错误HRESULT E_FAIL。
答案 0 :(得分:0)
当我尝试使用编码的UI自动化wpf控件时,我面临着相同的问题。 我建议的最佳解决方案是使用Appium WinAppDriver(如果可能的话),因为它支持Microsoft团队提到的wpf控件。
的指南Visual Studio 2019之后将弃用CodedUI(在视频中由Microsoft团队的成员之一提到),尽管将提供支持。
为解决此问题,我建议您使用Keyboard.Sendkeys()来设置组合框。 例如:-
UITestControl combobox = new UITestControl();
//add properties of combobox
WinEdit textboxOfCombobox = new WinEdit(comboBox);
textboxOfCombobox.SendKeys("value to enter");
// Add code to verify if the combobox has the correct value selected.
我个人使用此变通办法,并且对我有效。 我希望这会有所帮助。