我正在用 C# 为应用程序构建一个小型 GUI 测试自动化工具。测试工具中的功能之一是关闭从测试应用程序弹出的对话框。
我遇到的麻烦是找到要单击的按钮而不给出完整的类名。我使用 FindWindowEx 方法来获取对话框和我想要单击的按钮。我知道按钮的标题,但麻烦的是我还需要为按钮指定类名。类名并不总是相同,但看起来像这样:“WindowsForms10.BUTTON.app.0.3ce0bb8”。例如,如果您在本地或通过单击一次启动应用程序,最后“3ce0bb8”的部分会有所不同。
所以,我的问题是:我怎样才能找到按钮,只需指定类的第一部分(始终相同),如“”WindowsForms10.BUTTON.app。”或者我可以用其他方式解决这个问题吗?
dll 导入如下所示:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string pszWindow);
尝试单击按钮时,我的代码如下所示:
private void SendDialogButtonClick(IntPtr windowHandle, ApplicationStartType applicationStartType)
{
if (applicationStartType == ApplicationStartType.Localy)
buttonClassName = "WindowsForms10.BUTTON.app.0.3ce0bb8";
else if (applicationStartType == ApplicationStartType.ClickOnce)
buttonClassName = "WindowsForms10.BUTTON.app.0.3d893c";
// Find the "&No"-button
IntPtr buttonAndNoHandle = FindWindowEx(windowHandle, IntPtr.Zero, buttonClassName, "&No");
// Send the button click event to the appropriate button found on the dialog
if (buttonAndNoHandle.ToInt64() != 0)
{
SendMessage(new HandleRef(null, buttonAndNoHandle), WM_CLICK, IntPtr.Zero, IntPtr.Zero);
}
}