无法使用编码的UI测试构建器在编码的UI测试的组合框中选择值

时间:2019-06-09 15:55:21

标签: coded-ui-tests

我正在研究具有多个自定义控件的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。

1 个答案:

答案 0 :(得分:0)

当我尝试使用编码的UI自动化wpf控件时,我面临着相同的问题。 我建议的最佳解决方案是使用Appium WinAppDriver(如果可能的话),因为它支持Microsoft团队提到的wpf控件。

这是有关How to use WinAppDriver

的指南

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.

我个人使用此变通办法,并且对我有效。 我希望这会有所帮助。