是否可以使用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)编写的。
答案 0 :(得分:3)
使用Xamarin.UITest识别UI控件的最佳方法是为应用程序源代码中的每个控件分配唯一的标识符。
在Xamarin.iOS中,我们可以在应用程序的源代码中分配AccessibilityIdentifier
属性,然后在Xamarin.UITest中使用x => x.Marked
对其进行引用。
有几种方法可以在Xamarin.iOS中设置AccessibilityIdentifier
。
每种方法都能达到相同的结果。使用最适合您当前代码库的方法。
对于此示例,我将UILabel的AccessibilityIdentifier
设置为FirstAndLastNameLabel
。
var firstAndLastNameLabel = new UILabel
{
AccessibilityIdentifier = "FirstAndLastNameLabel"
};
为每个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;
}
Marked
https://docs.microsoft.com/appcenter/test-cloud/uitest/#using-marked-to-locate-views
AccessibilityIdentifier
API 标识符可用于唯一标识使用UI Automation接口编写的脚本中的元素