Xamarin.UITest:如何select当前节点的下一个元素
Xamarin.UITest: How to select a next element of the current node
有什么方法可以使用 Xamarin.UITest.Queries.AppQuery
select 当前节点的下一个元素吗?
这是一个 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]
挑战是 select UILabel 旁边的 UITextField 元素
我正在寻找与 xPath 类似的方法。在我的例子中,它看起来像:
//UILabel[@text='FIRST AND LAST NAME']/following::UITextField
有什么想法吗?我们的应用程序是用 Xamarin.iOS 编写的(没有 Xamarin.Forms)。
说明
用 Xamarin.UITest 识别 UI 控件的最佳方法是在应用程序的源代码中为每个控件分配一个唯一标识符。
在Xamarin.iOS中,我们可以在我们应用程序的源代码中分配AccessibilityIdentifier
属性,然后在Xamarin.UITest中使用x => x.Marked
引用它。
设置辅助功能标识符,Xamarin.iOS
有几种方法可以在 Xamarin.iOS 中设置 AccessibilityIdentifier
。
每种方式都实现相同的结果。使用最适合您当前代码库的方法。
对于此示例,我将 UI 标签的 AccessibilityIdentifier
设置为 FirstAndLastNameLabel
。
1。故事板,Visual Studio (Mac)
2。故事板,Xcode
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
An identifier can be used to uniquely identify an element in the scripts you write using the UI Automation interfaces
有什么方法可以使用 Xamarin.UITest.Queries.AppQuery
select 当前节点的下一个元素吗?
这是一个 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]
挑战是 select UILabel 旁边的 UITextField 元素
我正在寻找与 xPath 类似的方法。在我的例子中,它看起来像:
//UILabel[@text='FIRST AND LAST NAME']/following::UITextField
有什么想法吗?我们的应用程序是用 Xamarin.iOS 编写的(没有 Xamarin.Forms)。
说明
用 Xamarin.UITest 识别 UI 控件的最佳方法是在应用程序的源代码中为每个控件分配一个唯一标识符。
在Xamarin.iOS中,我们可以在我们应用程序的源代码中分配AccessibilityIdentifier
属性,然后在Xamarin.UITest中使用x => x.Marked
引用它。
设置辅助功能标识符,Xamarin.iOS
有几种方法可以在 Xamarin.iOS 中设置 AccessibilityIdentifier
。
每种方式都实现相同的结果。使用最适合您当前代码库的方法。
对于此示例,我将 UI 标签的 AccessibilityIdentifier
设置为 FirstAndLastNameLabel
。
1。故事板,Visual Studio (Mac)
2。故事板,Xcode
3。在代码中
var firstAndLastNameLabel = new UILabel
{
AccessibilityIdentifier = "FirstAndLastNameLabel"
};
引用 Xamarin.UITest
中的唯一标识符在我们为每个 UI 控件创建了唯一标识符之后,我们可以使用 x => x.Marked
;
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
An identifier can be used to uniquely identify an element in the scripts you write using the UI Automation interfaces