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

时间:2016-01-18 08:02:51

标签: c# winforms automation ui-automation white

我想打开一个Windows应用程序,然后按"保存屏幕"工具栏中的按钮:

Save Screen Button

使用Visual Studio中的Spy ++,我可以获得此工具栏的以下属性:

General Tab Class Tab

根据以上信息,我试过这个:

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个图标("打印预览"按钮{{ 0}})。

我也试过SearchCriteria.ByText("Save Screen"),但这给了我错误。

那么怎么能让鼠标点击我想要的按钮呢?是否有可以调整的鼠标点击坐标偏移量?

1 个答案:

答案 0 :(得分:4)

问题是工具栏上的所有按钮都有相同的ClassName - 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)从列表中找到您的按钮并进入Point

var clickablePoint = new Point();
foreach(AutomationElement button : listAeChildren)
{
    if(button.Current.Name.Equals("Save Screen"))
    {
        clickablePoint = button.GetClickablePoint();
    }
}

5)点击点:

Mouse.Instance.Click(clickablePoint);

检查代码原因我是在没有IDE的情况下从内存中写的:)