2

Xamarin Forms で作成された Android および iOS アプリに対して Test Recorder を実行しようとしています。テスト レコーダーでコントロールをクリックすると、生成された C# ファイルに ID が表示されず、クラス タイプだけが表示されます。

方程式から Test Recorder を削除し、Xamarin Forms Android アプリに対して基本的な UI テストを実行することにしました。

ここからデモアプリをダウンロードしました:

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

StyleIds と、StyleIds を ContentDescriptions にマップするための MainActivity のコードを含め、UITest に対して正しく動作するようにすべてを配置する必要があります。

画面階層を検査するために 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"
>>>

何か案は?

4

1 に答える 1

3

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

次に、Xamarin Forms Elements の Id が表示されるようになるはずです。

于 2015-12-10T22:41:14.457 に答える