首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到WinAppDriver元素

找不到WinAppDriver元素
EN

Stack Overflow用户
提问于 2018-03-19 23:04:38
回答 3查看 2.9K关注 0票数 0

我试图使用WinAppDriver、Appium和C#在一个古老的Delphi5应用程序上实现一些UI自动化。它启动应用程序,有一个小飞溅屏幕,然后是一个窗口模式框登录。用户名已经填写完毕,所以只需键入密码并按OK按钮即可。

代码语言:javascript
复制
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");

这些都失败了:

代码语言:javascript
复制
//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和Appum3.0.0.2,Visual、WinAppDriver和Inspect.exe作为管理员运行。

检查显示登录屏幕和启动屏幕作为单独的屏幕,这些屏幕在树中没有连接。

登录后的页面源是:

代码语言:javascript
复制
  <?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在那里-难怪它找不到他们,或这是我的误解。

这款应用对WinAppDriver来说太老了吗?我该放弃吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-20 16:30:15

这不是最好的选择,但我认为您可以使用sendkey来访问OK按钮。像Session.Keyboard.SendKeys(Keys.Alt + "o“+Keys.Alt)一样;因为访问键是Alt+o。

票数 1
EN

Stack Overflow用户

发布于 2020-01-30 12:25:32

您可以使用下面的代码片段来处理启动屏幕和任何类型的桌面窗口(例如,如果您有两个窗口并希望切换)

代码语言:javascript
复制
var currentWindowHandle = driver.CurrentWindowHandle;
    Thread.Sleep(TimeSpan.FromSeconds(5));
            var allWindowHandles = driver.WindowHandles;
    driver.SwitchTo().Window(allWindowHandles[0]);
票数 0
EN

Stack Overflow用户

发布于 2020-06-17 14:21:00

我在Actions类方面的成功要比使用.Click()中的webdrivers与WindowElement对象进行交互要成功得多。

此外,使用多个属性进行XPath搜索以确定对象的效果要好得多,至少对我来说是这样。

因此,根据我过去几年在WinAppDriver工作的经验,我会尝试:

新Actions(Session).Click(Session.FindElementByXPath("//*@Name='OK‘和@ClassName='TWAOkButton'")).Build().Perform();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49373799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档