如何在 win32 应用程序中使用 winappdriver 获取子元素列表?

问题描述 投票:0回答:3

我正在使用 WinAppDriver(使用 NUnit 和 C#)来测试一些旧版 win32 应用程序。

当我调试测试时,我到达了某些点,我需要查看所选元素的所有子元素的列表。这将使我能够构建测试的下一步。

我尝试过使用不同的 FindElementsXXX 方法,但没有发现任何有效的方法。似乎没有一个有通配符搜索选项。

XPath 是否有适用于这种情况的语法?我已经看到几个“应该”工作的 XPath 片段,但我收到了不支持该模式的错误。

c# selenium winapi xpath winappdriver
3个回答
0
投票

是的,有一个 XPath 表达式可以实现这一点。 鉴于

x
是 XPath 元素的字符串,您需要将
/*
附加到它。 例子:
/bookstore
是元素...
/bookstore/*
选择其所有子元素。参考这里


0
投票

愚蠢的司机。我有 8 种行不通的模式。该错误表明该模式不受支持。

我遇到了这篇文章Web Driver Issue 51,它表明某些下载链接可能指向旧版本。是的!这就是问题所在。正确的下载链接(截至2017年1月30日为 v0.7-beta


0
投票

XAML:

<ListBox x:Name="MyList">..</ListBox>

WinAppDriver 测试:

var listBox = testSession.FindElementByAccessibilityId("MyList");
var comboBoxItems = listBox.FindElementsByClassName("ListBoxItem"); 

XPath语法函数

var comboBoxItems = listBox.FindElementByXPath("//ListBoxItem"); // ok

在现实世界中,我会使用这样的东西。但它在我这边也不起作用:

var xPath = "//ListBox[@Name=\"MyList\"]//ListBoxItem[@IsSelected=\"True\"]";
listBox.FindElementByXPath(xPath);        // => not working
listBox.FindElementByXPath("//ListBox");  // => empty?
listBox.FindElementByXPath("//ListView"); // => empty?

ComboBox 的子元素有点特殊。它们是在单击组合后创建的,我发现了一些未解决的问题

为了调试,我使用 Inspect.exe,该文件在这个 video 和 VS 中的立即窗口中进行了解释。 表格有助于发现这一点:

  • WPF => Inspect.exe => WinAppDriver
  • x:名称 => AutomationId => FindElementByAccessibilityId(*)
  • 控件类型 => LocalizedControlType => FindElementByClass(ToUpperCamelCase(*))
© www.soinside.com 2019 - 2024. All rights reserved.