测试记录器和Xamarin表单 - Id不适用于UITest

时间:2015-12-10 21:55:55

标签: xamarin xamarin.forms uitest

我一直在尝试针对使用Xamarin Forms创建的Android和iOS应用运行Test Recorder。当我单击Test Recorder中的控件时,我没有看到生成的C#文件中存在Id,只是类类型。

我决定从等式中删除Test Recorder,并尝试针对Xamarin Forms Android应用程序运行基本的UI测试。

我从这里下载了一个演示应用程序:

https://developer.xamarin.com/samples/xamarin-forms/UsingUITest/

它应该具备一切可以正确使用UITest,包括StyleIds和MainActivity中的代码,以将StyleIds映射到ContentDescriptions。

我在REPL终端会话中运行树来检查屏幕层次结构,它似乎没有显示应该拥有它们的控件的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"
>>>

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

在Xamarin Forms中,StyleId实际上只是一个占位符,用于转移到本机计数器部分。

对于Android,请确保在MainActivity.cs中有此功能

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);
        }

在iOS中执行此操作

{{1}}

然后你应该开始看到你的Xamarin Forms Elements的你的ID。