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

时间:2017-01-30 12:32:30

标签: c# selenium winapi xpath winappdriver

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

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

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

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

3 个答案:

答案 0 :(得分:0)

是的,有一个XPath表达式。 鉴于x是XPath元素的字符串,您需要将/*附加到其中。 例: /bookstore是元素... /bookstore/*选择其所有子元素。参考here

答案 1 :(得分:0)

愚蠢的司机。我有8种模式无法运作。该错误表明该模式不受支持。

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

答案 2 :(得分:0)

XAML:

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

WinAppDriver测试:

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

XPath syntax functions

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的子元素有些特殊。它们是在单击组合后创建的,我在其中找到了open issues

要调试,我使用Inspect.exe(在此video和VS中的“即时”窗口中进行了说明)。 The table有助于发现这一点:

  • WPF => Inspect.exe => WinAppDriver
  • x:Name => AutomationId => FindElementByAccessibilityId(*)
  • 控件类型=> LocalizedControlType => FindElementByClass(ToUpperCamelCase(*))