Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to set the AutomationID of an object without using XAML?

I need to automate a Winform application. How do I set the AutomationID (or AutomationName) like the the XAML in this article does?

From this stack overflow article the answer seems to be no, unless I switch the application to a WPF application (so I can use XAML to define the controls).

I have tried this naïve approach:

  AutomationElement formAutomation = AutomationElement.FromHandle(this.Handle);
  formAutomation.Current.Name = "SandboxResponseDialogName";
  formAutomation.Current.ClassName = "SandboxResponseDialogClassName";
  formAutomation.Current.AutomationId = "SandboxResponseDialogID;

But at this point in the constructor for the control, these Automation properties have getters only; no setters.

like image 520
John Washburn Avatar asked Jan 31 '13 01:01

John Washburn


1 Answers

If you want to set anything in relation to UI Automation in code, you need to use this:

using System.Windows.Automation;

And in your code:

YourObjectClass element = // just get your element.
element.SetValue(AutomationProperties.AutomationIdProperty, "elementAutomationID");

You can also use AutomationProperties.NameProperty for the UIAutomation Name. AutomationProperties contains all the properties for UIAutomation elements (setter and getter) as the name suggest.

like image 93
Mualig Avatar answered Oct 27 '22 01:10

Mualig