Xamarin.UITest:如何选择当前节点的下一个元素

时间:2018-07-09 16:11:02

标签: xamarin.ios ios-ui-automation xamarin.uitest

是否可以使用Xamarin.UITest.Queries.AppQuery选择当前节点的下一个元素?

以下是REPL来源:

[CalabashRootView > ... > UIView]                                              
  [UILabel]
  [UIButton] label: "arrow prev"
    [UIImageView] id: "arrow-prev.png"
  [iLobby_iOS_Controls_UIAnimatedButtonView]
  [UILabel] label: "Tell us about yourself",  text: "Tell us about yourself"
  [UILabel] label: "FIRST AND LAST NAME",  text: "FIRST AND LAST NAME"
  [UILabel] label: "*",  text: "*"
  [UITextField]
    [UIImageView]
    [_UITextFieldContentView]
    [UIAccessibilityTextFieldElement]
  [UILabel] label: "COMPANY",  text: "COMPANY"
  [UITextField]
    [UIImageView]
    [_UITextFieldContentView]
    [UIAccessibilityTextFieldElement]

面临的挑战是选择UILabel旁边的UITextField元素

我正在寻找类似xPath的方法。就我而言,它看起来像:

//UILabel[@text='FIRST AND LAST NAME']/following::UITextField

有什么想法吗?我们的应用程序是使用Xamarin.iOS(没有Xamarin.Forms)编写的。

1 个答案:

答案 0 :(得分:3)

说明

使用Xamarin.UITest识别UI控件的最佳方法是为应用程序源代码中的每个控件分配唯一的标识符。

在Xamarin.iOS中,我们可以在应用程序的源代码中分配AccessibilityIdentifier属性,然后在Xamarin.UITest中使用x => x.Marked对其进行引用。

设置AccessibilityIdentifier Xamarin.iOS

有几种方法可以在Xamarin.iOS中设置AccessibilityIdentifier

每种方法都能达到相同的结果。使用最适合您当前代码库的方法。

对于此示例,我将UILabel的AccessibilityIdentifier设置为FirstAndLastNameLabel

1。故事板,Visual Studio(Mac)

enter image description here

2。情节提要,Xcode

enter image description here

3。在代码中

var firstAndLastNameLabel = new UILabel
{
    AccessibilityIdentifier = "FirstAndLastNameLabel"
};

在Xamarin.UITest中引用唯一标识符

为每个UI控件创建唯一的标识符之后,我们可以使用x => x.Marked;在Xamarin.UITest中引用它。

readonly System.Func<Xamarin.UITest.Queries.AppQuery, Xamarin.UITest.Queries.AppQuery> firstAndLastNameLabelQuery = x => x.Marked("FirstAndLastNameLabel");

public string GetFirstAndLastNameLabelText()
{
    var label = app.Query(firstAndLastNameLabelQuery)?.FirstOrDefault();
    return label?.Text ?? string.Empty;
}

其他信息

在Xamarin.UITest中使用Marked

https://docs.microsoft.com/appcenter/test-cloud/uitest/#using-marked-to-locate-views

AccessibilityIdentifier API

  

标识符可用于唯一标识使用UI Automation接口编写的脚本中的元素

https://developer.apple.com/documentation/uikit/uiaccessibilityidentification/1623132-accessibilityidentifier?language=objc