1

我目前正在制作一个程序,该程序将自动执行我需要在程序上执行的任务。

我目前遇到的一个问题是“单击”菜单栏中的菜单。

我使用 Spy++ 找到了菜单栏的类名,它被称为 TActionMainMenuBar,但它“下”的所有内容都本地化为 ammbSSC。

https://i.imgur.com/R7lLfVg.png

我可以使用以下命令找到主菜单栏:

var x = window.Get(SearchCriteria.ByClassName("TActionMainMenuBar"));

Console.WriteLine(x.ToString());

返回:

Panel. AutomationId:1311676, Name:ammbSSC, ControlType:pane, FrameworkId:Win32
TestStack.White.Application

但是尝试使用 .ByText 或 .ByIndex (或其他任何东西)查找“ACTIONS”会引发无法找到“ACTIONS”的异常。

我还能找到这样的文字吗?或者我应该求助于使用鼠标输入 - 即自动化鼠标移动?

编辑:

我也试过这样做:

window.GetMultiple(SearchCriteria.ByControlType(ControlType.Pane).AndByClassName("TActionMainMenuBar"))[1].Click();

但这会引发“索引超出了数组的范围。”

我也试过这样做:

window.GetMultiple(SearchCriteria.ByControlType(ControlType.Pane))[1].Click();

和:

window.GetMultiple(SearchCriteria.ByControlType(ControlType.Pane).AndByClassName("TActionMainMenuBar").AndByText("ACTIONS"));

window.Click();

但这会将我的鼠标移动到屏幕中心附近。

4

1 回答 1

1

我已经看到“菜单栏”被包装在另一个控件中,然后您可以使用它来查找您认为是所述菜单栏的子元素的内容。

在我的一种情况下,菜单栏在一个窗口(弹出窗口)中,然后我在弹出窗口中找到“操作”,如下所示。

Window PopUp => Window.ModalWindows().Last(); //Gets the latest popup
var all = PopUp.GetMultiple(SearchCriteria.ByControlType(ControlType.Text)); //Get all the options, most cases, the menu items are in a textbox, use whatever you see in your spy tool
var menu = all.FirstOrDefault(m => m.Name.Equals("actionValue") && m.Visible); 
menu?.Click();

注意 - 我之前遇到过这种类型的控件的点击问题,希望你不会发生这种情况......在对象上“线程点击”以使其工作。

于 2018-11-20T13:24:52.990 回答