我目前正在制作一个程序,该程序可以自动执行我需要在程序上执行的任务。
我目前遇到的一个问题是"单击"菜单栏中的菜单。
我使用 Spy++ 找到了菜单栏的类名,它被称为 TActionMainMenuBar,但它"下"的所有内容都本地化为 ammbSSC。
https://i.stack.imgur.com/swlxU.png
我可以使用以下命令找到主菜单栏:
var x = window.Get(SearchCriteria.ByClassName("TActionMainMenuBar"));
Console.WriteLine(x.ToString());
其中返回:
Panel. AutomationId:1311676, Name:ammbSSC, ControlType:pane, FrameworkId:Win32
TestStack.White.Application
但是试图使用.按文本或 .ByIndex(或其他任何东西(抛出一个异常,它找不到"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();
但这会使我的鼠标移动到屏幕中心周围。
我看到"菜单栏"被包装在另一个控件中,然后您可以使用它来查找您假定是所述菜单栏的子元素的内容。
在我的一种情况下,菜单栏位于窗口(弹出窗口(中,然后我在弹出窗口中找到"操作",如下所示。
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();
注意 - 我以前遇到过这种类型的控件的点击问题,希望这对你来说不会发生......"线程点击"对象以使其工作。