我试图在文本框中设置一些值(Automaion id:txtFieldID参见附图)。我无法获取此窗格中父类型所在的元素。
的Winform
---> Win32的
--------> InternetExplorer
我有这个文本框。
Application app = TestStack.White.Application.Attach("Encompass");
mainWindow = app.GetWindows();
TextBox txtFieldId = mainWindow.Get(SearchCriteria.ByAutomationId("TxtFieldID"));
在最后一行,我没有收到文本框错误。
来自inspect的Here is a screenshot,请告诉我如何在文本框中设置/获取值。
答案 0 :(得分:1)
来自mainWindow
的Get方法正在白色的最低级别使用TreeScope.Children。这意味着您需要在途中找到要访问要设置文本的元素的元素。这是UIA的一个很好的做法,可以找到所有元素,而不是从应用程序的顶层搜索。如果从应用程序的顶层搜索,最终可能会遍历许多元素,并且可能需要很长时间才能完成。当您拥有可在每个单元格内部具有三个或更多控件的表格和网格时,这尤其会变得很痛苦。
以下是一些示例代码,它们可能完全或可能不完全正常工作。我只能在屏幕截图的基础上做到这一点。此外,检查的屏幕截图对于这样的问题非常有帮助。我希望每个人都能用他们的UIA问题发布检查的屏幕截图。
Application app = TestStack.White.Application.Attach("Encompass");
//If you have more than one window you will need to do something else here to get the right window.
Window mainWindow = app.GetWindows().First();
//Searching on the type without anything else should get the first element it finds of that type.
//I highly suggest looking at the elements and see if you can find anything else unique about them to search on.
Panel panel1 = mainWindow.Get<Panel>();
Panel panel2 = panel1.Get<Panel>();
Panel panel3 = panel2.Get<Panel>();
Tab tab = panel3.Get<Tab>();
//Text searches the name property in inspect.
Panel loan = tab.Get<Panel>(SearchCriteria.ByText("Loan"));
Window subWindow = loan.Get<Window>();
Panel panel4 = subWindow.Get<Panel>();
Panel panel5 = panel4.Get<Panel>();
Panel panel6 = panel5.Get<Panel>();
Panel panel7 = panel6.Get<Panel>();
Panel panel8 = panel7.Get<Panel>();
Panel panel9 = panel8.Get<Panel>();
Panel panel10 = panel9.Get<Panel>();
Panel panel11 = panel10.Get<Panel>();
TextBox txtField = panel11.Get<TextBox>(SearchCriteria.ByAutomationId("TxtFieldID"));
//Setting the text property will set the text in your text box.
txtField.Text = "Your text here.";
我无法看到每个元素的所有属性,所以我使用TreeView中可以看到的内容,通常是LocalizedControlType和Name。我强烈建议除了ControlType之外,尽可能使用AutomationId返回并更改我的代码。