无法使用White框架找到文本框

时间:2016-12-13 07:59:53

标签: c# white

我试图在文本框中设置一些值(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,请告诉我如何在文本框中设置/获取值。

1 个答案:

答案 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返回并更改我的代码。