在Xamarin上的UITest将StyleId写为Label而不是ID

时间:2016-04-18 01:05:58

标签: xamarin.forms uitest

我正在尝试在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已输出为label属性而不是id属性

enter image description here

有没有人设法让这个工作?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

使用StyleId很快就会用2.2.0淘汰。

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

  

AutomationId支持

     

Xamarin.Forms现在拥有设置自动化的一流支持   与Xamarin UITest或其他测试框架一起使用的标识符。   只需设置AutomationID属性即可实现自动化   用于查找控件并与其进行交互的框架。

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