Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
677 views
in Technique[技术] by (71.8m points)

c# - 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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...