编码的用户界面和用户界面自动化不是齐头并进

时间:2018-06-07 18:19:57

标签: c# automation ui-automation coded-ui-tests

我尝试使用Coded UI自动化基于Windows的应用程序。在这个应用程序中,一些控件是不可访问的,所以我使用UI自动机元素来识别控件。

First Screen Contains List of Employees in the form Grid.

When user Doubles click on selected Employee. New Tab is created where it contains emplyee Details in the form of TextBox

新的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无法识别控件。

请帮我解决问题。

1 个答案:

答案 0 :(得分:0)

UI Automation是一个实现非标准UI小部件标准化支持的框架。这就是说,如果没有在测试机器上实现(和安装)支持,CUIT将把所有对象作为通用对象处理。您需要首先通过UI自动化框架为您的小部件实现支持,您必须教授窗口为什么特定的WinClass是Button,以及单击它时后台应该发生什么。

之后CUIT将能够与您的对象进行交互。因此,不要将UI自动化视为一切的神奇解决方案。它类似于HPE UFT可扩展性工具包,只是在较低级别(OS)。 HPE Ext Kit在应用程序级别上运行