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

Xamarin.ios Xamarin.UITest:如何选择当前节点的下一个元素,xamarin.ios,ios-ui-automation,xamarin.uitest,Xamarin.ios,Ios Ui Automation,Xamarin.uitest,是否有任何方法可以使用Xamarin.UITest.querys.AppQuery选择当前节点的下一个元素 以下是一个REPL源: [CalabashRootView > ... > UIView] [UILabel] [UIButton] label: "arrow prev" [UIImageView] id: "arrow-prev.png" [iLobby_iOS_

是否有任何方法可以使用
Xamarin.UITest.querys.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)。

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

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

设置AccessibilityIdentifier,Xamarin.iOS 有几种方法可以在Xamarin.iOS中设置
可访问性标识器

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

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

1.故事板,Visual Studio(Mac)

2.故事板

3.编码
var firstandlastnamelab=新UILabel
{
AccessibilityIdentifier=“FirstAndLastNameLabel”
};
引用Xamarin.UITest中的唯一标识符 为每个UI控件创建唯一标识符后,我们可以在Xamarin.UITest中使用
x=>x.Marked

readonly System.Func firstAndLastNameLabelQuery=x=>x.Marked(“FirstAndLastNameLabel”);
公共字符串GetFirstAndLastNameLabelText()
{
var label=app.Query(firstAndLastNameLabelQuery)?.FirstOrDefault();
返回标签?文本?字符串。空;
}
补充资料 在Xamarin.UITest中使用标记的

AccessibilityIdentifier
API 标识符可用于唯一标识使用UI自动化界面编写的脚本中的元素


你好,谢尔盖!您的应用程序使用哪种框架/语言:Xamarin.Forms、Xamarin.iOS、React Native、Swift或ObjC?嗨,布兰登!我们正在使用Xamarin。太好了!我现在就来做答案。我还更新了问题和标签,以包括Xamarin.iOS,希望这有助于将来Xamarin.iOS开发人员解决相同的问题!嗨,布兰登!当然这是最好的办法。我以为还有别的办法。无论如何谢谢你!我在这里遵循了这个模式,但似乎不起作用。也许这是当前iOS版本的问题。我在UILabel中添加了一个唯一的AccessibilityIdentifier。我可以在REPL树视图中看到id。当我在REPL中运行查询时,它会查找并返回结果。但是,在UITest中使用相同的查询不会返回任何结果。确实是个谜。当前版本的Xamarin.iOS和Xamarin.UITest没有问题。我建议打开一个新问题并发布您的代码,以便我们查看。要确认,您是说无法在Xamarin.UITest中选择下一个节点/元素吗?我很欣赏向元素添加唯一标识符的做法,也许可以使用AutomationId属性,但如果自动化测试人员没有权限更改应用程序的源代码,该怎么办?或者如果让开发人员添加相关ID有延迟?这是否意味着我必须找到一些可能需要时间的时髦的解决方法,或者干脆暂停我的测试,直到开发人员有时间添加ID?