首页 > 解决方案 > Appium 无法使用 XPath 找到 UI 元素

问题描述

我需要使用xpathAppiums 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

任何人,任何想法?请 ...

标签: seleniumselenium-webdriverxpathappiumappium-desktop

解决方案


推荐阅读