C#TestStack.White-无法精确定位到我想要的按钮
我想打开windows应用程序,然后按工具栏上的“保存屏幕”按钮:C#TestStack.White-无法精确定位到我想要的按钮,c#,winforms,automation,ui-automation,white-framework,C#,Winforms,Automation,Ui Automation,White Framework,我想打开windows应用程序,然后按工具栏上的“保存屏幕”按钮: var toolbar = window.Get(SearchCriteria.ByClassName("ToolbarWindows32")); 使用Visual Studio中的Spy++,我可以获取此工具栏的以下属性: 根据以上信息,我尝试了以下方法: Application app = Application.Attach(7492); //The process was manually opened Wind
var toolbar = window.Get(SearchCriteria.ByClassName("ToolbarWindows32"));
使用Visual Studio中的Spy++,我可以获取此工具栏的以下属性:
根据以上信息,我尝试了以下方法:
Application app = Application.Attach(7492); //The process was manually opened
Window window = app.GetWindow("Scope Link - Virtual Instrument", InitializeOption.Nocache);
SearchCriteria sc = SearchCriteria.ByClassName("ToolbarWindows32"); //AutomationID is 59392
var saveBtn = window.Get(sc);
saveBtn.Click();
通过上面的代码,程序能够找到工具栏,但它只需单击工具栏的中间,即左侧第9个图标(“打印预览”按钮)
我还尝试了SearchCriteria.ByText(“保存屏幕”)
,但这给了我错误
那么,如何让鼠标点击我想要的按钮呢?是否有我可以调整的鼠标点击坐标偏移量?问题是工具栏上的所有按钮都具有相同的类名-ToolbarWindows32 尝试查找工具栏上的所有按钮,并按索引获取您的按钮
toolbar.GetMultiple(SeacrhCriteria.ByControlType(ControlType.Button))[INDEX].Click();
通常,您可以使用本机UI自动化:
1) 查找工具栏:
var toolbar = window.Get(SearchCriteria.ByClassName("ToolbarWindows32"));
2) 获取工具栏的自动化元素:
AutomationElement toolbarAe = toolbar.AutomationElement;
3) 获取此AutomationElement的所有子项
var listAeChildren = toolbarAe.findAll(Treescope.Children, new PropertyCondition(AutomationElement.ControltypeProperty, ControlType.Button));
4) 从列表中找到您的按钮并进入要点
var clickablePoint = new Point();
foreach(AutomationElement button : listAeChildren)
{
if(button.Current.Name.Equals("Save Screen"))
{
clickablePoint = button.GetClickablePoint();
}
}
5) 点击点:
Mouse.Instance.Click(clickablePoint);
检查代码,因为我是在没有IDE的情况下从内存中编写的:)问题是工具栏上的所有按钮都具有相同的类名 尝试查找工具栏上的所有按钮,并按索引获取您的按钮
toolbar.GetMultiple(SeacrhCriteria.ByControlType(ControlType.Button))[INDEX].Click();
通常,您可以使用本机UI自动化:
1) 查找工具栏:
var toolbar = window.Get(SearchCriteria.ByClassName("ToolbarWindows32"));
2) 获取工具栏的自动化元素:
AutomationElement toolbarAe = toolbar.AutomationElement;
3) 获取此AutomationElement的所有子项
var listAeChildren = toolbarAe.findAll(Treescope.Children, new PropertyCondition(AutomationElement.ControltypeProperty, ControlType.Button));
4) 从列表中找到您的按钮并进入要点
var clickablePoint = new Point();
foreach(AutomationElement button : listAeChildren)
{
if(button.Current.Name.Equals("Save Screen"))
{
clickablePoint = button.GetClickablePoint();
}
}
5) 点击点:
Mouse.Instance.Click(clickablePoint);
检查代码,因为我是在没有IDE的情况下从内存中编写的:)能否使用Visual UIA Verify为该元素创建屏幕截图?能否使用Visual UIA Verify为该元素创建屏幕截图?非常感谢您的帮助!我做了一些尝试和错误,找到了我想要的按钮的正确索引号。但是,我无法使您的本机UI自动化代码正常工作,没有
GetClickablePoint()
method.yes。你说得对。它应该是button.GetClickablePoint();谢谢你!您的代码确实帮助我了解了更多:)顺便说一句,仅供将来参考,TestStack中的正确语法。基于ControlType
和Index
进行搜索的白色是这样的:var saveBtn=window.Get(SearchCriteria.ByControlType(ControlType.Button)和索引(5));saveBtn.Click()代码>非常感谢您的帮助!我做了一些尝试和错误,找到了我想要的按钮的正确索引号。但是,我无法使您的本机UI自动化代码正常工作,没有GetClickablePoint()
method.yes。你说得对。它应该是button.GetClickablePoint();谢谢你!您的代码确实帮助我了解了更多:)顺便说一句,仅供将来参考,TestStack中的正确语法。基于ControlType
和Index
进行搜索的白色是这样的:var saveBtn=window.Get(SearchCriteria.ByControlType(ControlType.Button)和索引(5));saveBtn.Click()代码>