Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#TestStack.White-无法精确定位到我想要的按钮_C#_Winforms_Automation_Ui Automation_White Framework - Fatal编程技术网

C#TestStack.White-无法精确定位到我想要的按钮

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

我想打开windows应用程序,然后按工具栏上的“保存屏幕”按钮:

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()