Я пытаюсь автоматизировать приложение на основе Windows, используя закодированный пользовательский интерфейс.В этом приложении некоторые элементы управления недоступны, поэтому я использовал элемент автоматизации пользовательского интерфейса для идентификации элемента управления.
Первый экран содержит список сотрудников в виде таблицы.
Когда пользователь удваивает клик по выбранному сотруднику.Новая вкладка создается там, где она содержит подробности в виде TextBox
Новая вкладка TabBage, у нас есть TextBox и некоторые другие элементы управления, такие как Checkbox и ListItem.
Элемент списка обнаруживается с помощью закодированного интерфейса, но TextBox не обнаруживается с помощью закодированного интерфейса, поэтому мы использовали элемент автоматизации пользовательского интерфейса для этого.
[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 {get {WinTabPage tab = new WinTabPage ();
возврат вкладки;}}
public WinCheckBox CurrentEmpComboBox
{
get
{
WinCheckBox combox = new WinCheckBox();
return combox;
}
}
}
// Класс содержит элемент управления, который можно обнаружить с помощью элемента автоматизации пользовательского интерфейса
открытый класс 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, он работает нормальнодо нажатия на выбранного сотрудника.как только открывается новая вкладка, я выполняю операцию на checkBox, используя закодированный пользовательский интерфейс, который работает, но когда я пытаюсь ввести текст в текстовое поле с помощью автоматизации пользовательского интерфейса.Он выдает нулевое исключение в методе GetElement () для элемента.
Поэтому я прокомментировал приведенный ниже код и вручную открыл приложение, пока не откроется новая вкладка.и запустите метод теста, теперь 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");// сделано с помощью элемента UIAutomation
empoyeeUIAutomationControl.EnterText (empoyeeUIAutomationControl.LastName, "MyLastName");// done usin Automation Element}
Когда я запускаю мой полный метод тестирования, UIAutomation не может идентифицировать элемент управления.
Пожалуйста, помогите мне решить проблему.