测试记录器和 Xamarin 表单 - ID 不适用于 UITest
Posted
技术标签:
【中文标题】测试记录器和 Xamarin 表单 - ID 不适用于 UITest【英文标题】:Test Recorder and Xamarin Forms - Id not available for UITest 【发布时间】:2015-12-10 21:55:55 【问题描述】:我一直在尝试针对使用 Xamarin Forms 创建的 android 和 ios 应用运行测试记录器。当我单击测试记录器中的控件时,我没有看到放置在生成的 C# 文件中的 Id,只有类类型。
我决定从等式中删除测试记录器,并尝试让基本的 UI 测试针对 Xamarin Forms Android 应用运行。
我从这里下载了一个演示应用程序:
https://developer.xamarin.com/samples/xamarin-forms/UsingUITest/
它应该有所有的东西来正确处理 UITest,包括 StyleIds 和 MainActivity 中用于将 StyleIds 映射到 ContentDescriptions 的代码。
我在 REPL 终端会话中运行 tree 来检查屏幕层次结构,它似乎没有显示应该拥有它们的控件的 id。
>>> tree
[[object CalabashRootView] > PhoneWindow$DecorView]
[ActionBarOverlayLayout] id: "decor_content_parent"
[FrameLayout > ... > Platform_DefaultRenderer] id: "content"
[ButtonRenderer]
[Button] label: "MyButton", text: "Click me"
[LabelRenderer]
[FormsTextView] label: "MyLabel", text: "Hello, Xamarin.Forms!"
[View] id: "navigationBarBackground"
[View] id: "statusBarBackground"
>>>
有什么想法吗?
【问题讨论】:
StyleId 在该输出中...看到“MyButton”和“MyLabel”了吗?这些是 StyleId 值。您是否尝试过运行选择器以查看是否可以从中进行选择? 感谢 Dylan - 我可以在输出中看到 MyButton 的 StyleId 已转换为 MyButton 的标签。进一步挖掘后,我看到 StyleId 被转换为 iOS 的 AccessibilityIdentifier 和 Android 的 ContentDescription,我猜这些都是作为标签出现的。我的问题是,虽然我可以通过编程方式访问这些,但当我单击控件时,TestRecorder 不会生成 .Marked()。 【参考方案1】:在 Xamarin Forms 中,StyleId 本质上只是一个占位符,用于转移到本机计数器部分。
对于 Android,请确保您在 MainActivity.cs 中有这个
Xamarin.Forms.Forms.ViewInitialized += (object sender, Xamarin.Forms.ViewInitializedEventArgs e) =>
if (!string.IsNullOrWhiteSpace(e.View.StyleId))
e.NativeView.ContentDescription = e.View.StyleId;
;
在 iOS 中这样做
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
global::Xamarin.Forms.Forms.Init();
Forms.ViewInitialized += (object sender, ViewInitializedEventArgs e) =>
if (null != e.View.StyleId)
e.NativeView.AccessibilityIdentifier = e.View.StyleId;
;
LoadApplication(new App());
#if ENABLE_TEST_CLOUD
// requires Xamarin Test Cloud Agent
Xamarin.Calabash.Start();
#endif
return base.FinishedLaunching(app, options);
然后您应该开始看到您的 Id 为您的 Xamarin 表单元素提供。
【讨论】:
我在 MainActivity 中有你提到的代码,我很高兴正在生成本机计数器部分。然而,测试记录器似乎无法识别这些,并且不会为带有 StyleId 的控件生成 .Marked,但仅用于按钮,甚至使用按钮标题 你是说按钮的 ID 没有通过,但其他元素还可以吗? StyleId 不会转换为 Id,而是转换为 iOS 的 AccessibilityIdentifier 和 Android 的 ContentDescription。测试记录器应该识别这些并为它们生成一个 .Marked 但不会。它确实为按钮生成 .Marked,但使用按钮标题而不是 StyleId 是的,这就是我对 Id 的意思(StyleId 没有出现)。对我来说,除了它是一个预览工具,我什么都看不到,而且你很可能遇到了一个错误。如果您可以在标准 UITests 中执行 REPL 并查看所有 StyleId,那么您将需要联系 Xamarin 的某个人。我只是想看看你需要联系谁。虽然它在旧金山的下午,可能要到明天才能得到回复。 forums.xamarin.com/categories/xamarin-test-cloud 将是您的最佳选择。 TestCloud 团队的人会看到它并查看它。我对测试记录器也不是很熟悉,所以我们可能忽略了一些明显的东西。以上是关于测试记录器和 Xamarin 表单 - ID 不适用于 UITest的主要内容,如果未能解决你的问题,请参考以下文章