我正在尝试使用 WinAppDriver、Appium 和 C# 在一个古老的 Delphi 5 应用程序上进行一些 UI 自动化。它启动应用程序,有一个小闪屏,然后是一个用于登录的 Windows 模式框。用户名已经填写,所以只需输入密码并按 OK 按钮。
var appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", @"C:\APP\APP1998.exe");
appCapabilities.SetCapability("deviceName", "WindowsPC");
Session = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
Assert.IsNotNull(Session);
Assert.IsNotNull(Session.SessionId);
Assert.AreEqual("APP1998", Session.Title.ToUpper());
Session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(15);
Session.Keyboard.SendKeys("PASSWORD1");
这些都失败了:
//The logon dialog OK button
Session.FindElementByName("OK").Click();
//The File menu
Session.FindElementByName("File").Click();
//The Exit command from the File menu
Session.FindElementByName("Exit").Click();
我正在使用 WinAppDriver 1.0 和 Appium 3.0.0.2,并以管理员身份运行 Visual Studio、WinAppDriver 和 Inspect.exe。
Inspect 将登录屏幕和启动屏幕显示为在树中未连接的单独屏幕。
登录后的页面来源为:
<?xml version="1.0" encoding="utf-16"?><Window AcceleratorKey="" AccessKey="" AutomationId="" ClassName="TApplication" FrameworkId="Win32" HasKeyboardFocus="False" HelpText="" IsContentElement="True" IsControlElement="True" IsEnabled="True" IsKeyboardFocusable="True" IsOffscreen="True" IsPassword="False" IsRequiredForForm="False" ItemStatus="" ItemType="" LocalizedControlType="window" Name="Mop1998" Orientation="None" ProcessId="11084" RuntimeId="42.1578230" x="0" y="0" width="1" height="1" CanMaximize="False" CanMinimize="True" IsModal="False" WindowVisualState="Normal" WindowInteractionState="ReadyForUserInteraction" IsTopmost="False" CanRotate="False" CanResize="False" CanMove="False" IsAvailable="True" />
来自 webdriver 背景,我在其中看不到任何 ID - 难怪它无法找到它们,或者这是我的误解。