1

UI 自动化的新手,在 UWP 应用程序上使用 Appium WinAppDriver,我试图找到一种方法来获取特定ListView控件中所有元素的列表,然后从每个元素中获取值。我可能错了,但 some 之间似乎存在子/父关系WindowElement,在检查工具中检查特定屏幕时可以看到。请考虑以下简化的代码:

WindowElement x = session.FindElementsByClassName("ListView").ToList()[1];
List<WindowElement> y = x.FindElementsByClassName("ListViewItem").ToList();
foreach(WindowElement z in y)
{
     string name = z.FindElementByName("itemName").Text;
     string id = z.FindElementByName("itemID").Text;
}
  1. 一般来说,这是一种正确的方法,还是我错过了一些基本的东西?我想从 ListView 中获取所有项目的列表
  2. 这个声明:List<WindowElement> y = x.FindElementsByClassName("ListViewItem").ToList();给我一个错误,因为FindElementsByClassName()显然返回一个列表AppiumWebElement而不是WindowElement
4

2 回答 2

0

代替

List<WindowElement> y = x.FindElementsByClassName("ListViewItem").ToList();

试试这个,看看它是否有效

var y = x.FindElementsByClassName("ListViewItem");
foreach (var z in y)
{
 string name = z.FindElementByName("itemName").Text;
 string id = z.FindElementByName("itemID").Text;
}

对于我的测试用例,FindElements 仅适用于驱动程序而不适用于元素。它总是返回 Ilist

于 2019-06-13T12:29:00.717 回答
0

很久以前就问过这个问题,但无论如何:

  1. 这是可能的方法,但您最好避免通过 ClassName 查找元素,特别是通过具体索引[1],如果您的类不是唯一的并且将来可能添加更多相同的控件结果将变得错误。如果可能,最好对元素使用唯一的 AutomationId-s,并找到元素ByIdByAccessibilityIdByName
  2. 是的。当您尝试从 WindowElement 获取元素时,您将获得 AppiumWebElement。你可以使用它。否则,如果您想获取 Windows 元素 - 您应该在会话中搜索元素,就像在代码开头一样。
于 2020-01-31T12:49:45.153 回答