Я создаю небольшой инструмент автоматизации GUI-Test в C # для приложения.Одна из функций в тестовом инструменте - закрывать всплывающие диалоговые окна из тестируемого приложения.
Проблема, с которой я столкнулся, заключается в том, чтобы найти кнопку, на которую можно нажать, без указания полного имени класса.Я использовал метод 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);
}
}