我正在尝试在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属性
有没有人设法让这个工作?
答案 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。