Xamarin Forms 上的 UITest 将 StyleId 写为标签而不是 ID

Posted

技术标签:

【中文标题】Xamarin Forms 上的 UITest 将 StyleId 写为标签而不是 ID【英文标题】:UITest on Xamarin Forms writing StyleId as Label rather than ID 【发布时间】:2016-04-18 01:05:58 【问题描述】:

我正在尝试在 Xamarin 表单项目上设置 UI 测试

我按照指南 here 并将 StyleId 添加到我的用户名控件

<Entry x:Name="username_name" 
        StyleId="username_styleid"
        Text="Binding Username, Mode=TwoWay"
        IsEnabled="Binding IsBusy, Converter=StaticResource ReverseBoolConverter"
        Style="StaticResource TextboxLight"
        Placeholder="Binding UsernameLabel" />

我在 android MainActivity 中添加了代码

Forms.ViewInitialized += (sender, e) => 
    if (!string.IsNullOrWhiteSpace(e.View.StyleId))
    
        e.NativeView.ContentDescription = e.View.StyleId;
    
;

当我运行测试并使用 REPL 时,我可以看到 StyleId 已作为标签属性而不是 id 属性输出

有没有人设法让它工作?

【问题讨论】:

【参考方案1】:

这是按设计工作的。在 ios 上,您将看到该值显示为 id;在 Android 上,它将显示为 label

app.Query(c=&gt;c.Marked("username_styleid")) 可以跨平台工作。 app.Query("username_styleid") 的缩写形式也一样。

Marked 将在 iOS 上的 id 字段中找到具有指定值的元素; Android 上的 label 字段和任何一个上的 text。因此,在编写测试时让这一切变得简单实用的关键是使 StyleID(或 AutomationId)与应用中显示的文本不同。

【讨论】:

谢谢格伦。我开始意识到这一点,但很高兴得到确认。【参考方案2】:

在 2.2.0 中使用 StyleId 很快就会被淘汰。

我还没有亲自测试过,但是

AutomationId 支持

Xamarin.Forms 现在对设置自动化具有一流的支持 用于 Xamarin UITest 或其他测试框架的标识符。 简单地设置 AutomationID 属性应该允许自动化 框架来查找控件并与之交互。

不确定 AutomationId 转换为什么,希望是 ID。

【讨论】:

感谢亚当,好消息。我希望它运行良好,因为我们要编写大量 UI 测试。 刚刚玩了 2.2.04-pre2 和新的 AutomationId 属性。不幸的是,它仍然将其输出为标签,而不是 id 很高兴看到它在上面得到确认。我正要仔细检查,但我觉得这应该是标签。

以上是关于Xamarin Forms 上的 UITest 将 StyleId 写为标签而不是 ID的主要内容,如果未能解决你的问题,请参考以下文章

走进 Xamarin Test Recorder for Xamarin.Forms

如何在需要使用 Xamarin.UITest 访问 iOS 上的照片的权限对话框中点击确定按钮?

走进 UnitTest for Xamarin.Forms

如何使用 xamarin.UITest 从 iOS 上的表格单元格中清除文本?

Xamarin.UITest:如何检索设备显示的坐标

将 Xamarin.UITest 与 MvvmCross 绑定一起使用