1

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

我按照此处的指南并将 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 属性输出

在此处输入图像描述

有没有人设法让它工作?

4

2 回答 2

4

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

app.Query(c=>c.Marked("username_styleid"))将跨平台工作。较短的形式app.Query("username_styleid")做同样的事情。

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

于 2016-04-18T19:44:48.433 回答
2

使用 StyleId 将很快在 2.2.0 中过时。

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

自动化 ID 支持

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

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

于 2016-04-18T06:18:34.730 回答