我需要使用 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,例如(另请参见屏幕截图):
xpath:
"/Windows/ToolBar/Tab/TabItem[1]"
Appium会话窗口屏幕截图:
Microsofts inspect.exe屏幕截图:
现在接线的是:
如果我使用的是appium展示给我的xpath字符串,为了在此会话管理器本身中找到相应的UI元素(通过使用搜索功能并选择xpath-selector),它将找不到任何元素(请参见屏幕截图):
此外,如果我使用的是琐碎的xpath字符串,例如
"//*"
或
"/Window"
由于找不到任何元素而失败。
在此,与此相对的是工作适用于baretail.exe记事本应用程序的屏幕截图的相同步骤,即在此处我可以使用提供的xpath字符串正确找到相应的UI元素。
Appium会话Windows:
Microsofts inspect.exe:
Appium会话窗口中搜索UI元素-查询:
Appium会话窗口中搜索UI元素-结果:
最终,我需要在C#项目中使用此代码,为此,我正在使用以下代码,但得到的结果是相同的,即没有找到与我的xpath-string匹配的UI元素。 / p>
(到目前为止,我已经调试了Appium源,因此我已经知道使用xpath-selecotr的FindElement请求已成功提交,但是Appium服务器以找到的UI元素为空的结果集作为响应。)
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
有人,有什么想法吗?请...