【问题标题】:WinAppDriver: how to obtain a list of children to a ListView controlWinAppDriver:如何获取 ListView 控件的子列表
【发布时间】:2019-10-11 09:01:08
【问题描述】:

UI 自动化新手,在 UWP 应用程序上使用 Appium WinAppDriver,我试图找到一种方法来获取特定 ListView 控件中所有元素的列表,然后从每个元素中获取值。我可能错了,但在某些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&lt;WindowElement&gt; y = x.FindElementsByClassName("ListViewItem").ToList(); 给了我一个错误,因为FindElementsByClassName() 显然返回了AppiumWebElement 的列表而不是WindowElement

【问题讨论】:

  • AFAIK 这就是 WinAppDriver 的工作方式,只是你不需要调用 ToList() 因为 FindElementsByClassName("ListViewItem") 应该给你一个迭代。

标签: c# user-interface automation appium winappdriver


【解决方案1】:

代替

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

【讨论】:

    【解决方案2】:

    问题是很久以前提出的,但无论如何:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-13
      • 2017-06-15
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      相关资源
      最近更新 更多