我需要使用xpath和Appiums xpath-selector在我的Windows 桌面 WPF 应用程序中找到 UI 元素。
它适用于“简单”应用程序,但不适用于我的目标应用程序。
我的环境是:
操作系统:Windows 10
目标应用程序:x86 WPF
Appium Windows 驱动程序:4.0.0.6 beta
Appium 桌面应用程序:1.13.0
Selenium WebDriver:3.141.0
这就是我正在尝试的:
一旦我通过 Appium 桌面应用程序启动了我的目标应用程序,它的会话窗口会告诉我 UI 元素的 xpath,例如(另见屏幕截图):
路径:
"/Windows/ToolBar/Tab/TabItem[1]"
Appium 会话窗口截图:
微软inspect.exe截图:
现在有线的事情是:
如果我正在使用 appium 向我显示的 xpath 字符串,为了在此会话管理器本身中找到相应的 UI 元素(通过使用搜索功能并选择 xpath 选择器),它无法找到任何元素(请参阅截图):
另外,如果我使用的是简单的 xpath 字符串,例如
"//*"
或者
"/Window"
它也因找不到任何元素而失败。
作为对比,这里是由 bartail.exe 记事本应用程序的屏幕截图捕获的相同步骤,它适用于该应用程序,即我能够使用提供的 xpath-string 正确找到相应的 UI 元素。
Appium 会话窗口:
微软inspect.exe:
Appium Session Window 搜索 UI-Element - 查询:
Appium Session Window 搜索 UI-Element - 结果:
最终,我需要在 C# 项目中使用它,为此我使用以下代码,但我得到了相同的结果,即没有找到任何与我的 xpath 字符串匹配的 UI 元素。
(到目前为止,我调试了 Appium 源,我已经知道使用 xpath-selecotr 的 FindElement-request 已成功提交,但 Appium 服务器以找到的 UI-Elements 的空结果集进行响应。)
AppiumOptions options = new AppiumOptions();
options.AddAdditionalCapability("app", "path/to/my/target/application");
options.AddAdditionalCapability("deviceName", "WindowsPC");
options.AddAdditionalCapability("platformName", "Windows");
options.AddAdditionalCapability("newCommandTimeout", "60000");
session = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), options);
Assert.IsNotNull(session);
session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1.5);
string xpath = "/Window/MenuBar/MenuItem[2]"; // valid xpath to an UI-Element
var result = session.FindElementsByXPath(xpath); // successfully returns an empty collection
任何人,任何想法?请 ...