我尝试使用Coded UI自动化基于Windows的应用程序。在这个应用程序中,一些控件是不可访问的,所以我使用UI自动机元素来识别控件。
First Screen Contains List of Employees in the form Grid.
新的TabPage我们有TextBox和一些其他控件,如Checkbox和ListItem。
使用编码的ui可以检测到列表项,但是使用编码的ui无法检测到TextBox,因此我们使用了UI自动化元素。
[CodedUITest]
public class CodedUITest1
{
[TestMethod]
public void CodedUITestMethod2()
{
LaunchApplication(); //done using coded ui
Login()//done using Coded UI;
ClickonEmpListTab()//Done Using Coded UI
SelectEmployee()//done using Coded UI
//now new Tab is created in application
empoyeeUICodedUIControl.CurrentEmpComboBox.Checked= true; //done using coded ui
empoyeeUIAutomationControl.EnterText(empoyeeUIAutomationControl.FirsName,"MyFirstName"); // done using coded ui
empoyeeUIAutomationControl.EnterText(empoyeeUIAutomationControl.LastName,"MyLastName"); // done usin coded ui
}
private EmployeeUIAutomationUIMap _employeeUIAutomationcontrol;
public EmployeeUIAutomationUIMap empoyeeUIAutomationControl
{
get
{
if(_employeeUIAutomationcontrol == null)
{
_employeeUIAutomationcontrol = new EmployeeUIAutomationUIMap();
}
return _employeeUIAutomationcontrol;
}
}
private EmployeeUIMap _employeeUICodedUIcontrol;
public EmployeeUIMap empoyeeUICodedUIControl
{
get
{
if (_employeeUICodedUIcontrol == null)
{
_employeeUICodedUIcontrol = new EmployeeUIAutomationUIMap();
}
return _employeeUICodedUIcontrol;
}
}
//类包含可使用编码的ui
检测到的控件公共类EmployeeUIMap
{
public WinTabPage ListEmpmTab
{
得到
{
WinTabPage tab = new WinTabPage();
返回标签;
}
}
public WinCheckBox CurrentEmpComboBox
{
get
{
WinCheckBox combox = new WinCheckBox();
return combox;
}
}
}
//类包含可使用UI自动化元素检测的Control
公共类EmployeeUIAutomationUIMap {
public Condition GetCondition(AutomationProperty propery,string value)
{
Condition cond = new PropertyCondition(AutomationElement.AutomationIdProperty, value);
return cond;
}
public AutomationElement GetElement(AutomationElement parentControl,Condition cond)
{
return parentControl.FindFirst(TreeScope.Descendants, cond);
}
public AutomationElement MainRootElement
{
get
{
return AutomationElement.RootElement;
}
}
public AutomationPattern GetPattern(AutomationElement element)
{
//returns the pattern as per element
return pattern;
}
public void EnterText(AutomationElement element,string value)
{
var pattern = GetPattern(element);
pattern.SetValue = value;
}
public AutomationElement FirsName
{
var cond=GetCondition(AutomationElement.AutomationIdProperty,"FNID");
var element=GetElement(MainRootElement,cond);
return element;
}
public AutomationElement LastName
{
var cond=GetCondition(AutomationElement.AutomationIdProperty,"LNID");
var element=GetElement(MainRootElement,cond);
return element;
}
}
当我运行我的TestMethod时,它可以正常工作,直到点击选定的员工。打开新的标签页后,我使用编码的ui对checkBox执行操作,但是当我尝试使用UI自动化在文本框中输入文本时。它在元素上的GetElement()方法中抛出null异常。
所以我评论下面的代码并手动打开应用程序,直到打开新标签。并运行测试方法,现在uiAuomation识别元素并执行相应的操作。
[TestMethod]
public void CodedUITestMethod2()
{
/*
LaunchApplication(); //done using coded ui
Login()//done using Coded UI;
ClickonEmpListTab()//Done Using Coded UI
SelectEmployee()//done using Coded UI
*/
empoyeeUICodedUIControl.CurrentEmpComboBox.Checked= true; //done using coded ui
empoyeeUIAutomationControl.EnterText(empoyeeUIAutomationControl.FirsName," MyFirstName&#34); //使用UIAutomation元素
完成empoyeeUIAutomationControl.EnterText(empoyeeUIAutomationControl.LastName," MyLastName&#34); //在Automation Element中完成使用 }
当我运行完整的测试方法时,UIAutomation无法识别控件。
请帮我解决问题。
答案 0 :(得分:0)
UI Automation是一个实现非标准UI小部件标准化支持的框架。这就是说,如果没有在测试机器上实现(和安装)支持,CUIT将把所有对象作为通用对象处理。您需要首先通过UI自动化框架为您的小部件实现支持,您必须教授窗口为什么特定的WinClass是Button,以及单击它时后台应该发生什么。
之后CUIT将能够与您的对象进行交互。因此,不要将UI自动化视为一切的神奇解决方案。它类似于HPE UFT可扩展性工具包,只是在较低级别(OS)。 HPE Ext Kit在应用程序级别上运行