0

Xamarin UI テストを配置しようとしているアプリケーションがあります。ログイン プロセスをバイパスするには、アプリをバックドアする必要があります。バックドア メソッドは正常に起動します。

[Activity(Label = "AppName", Icon = "@drawable/icon", Theme = "@style/Theme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        StartActivity(typeof(MainActivity));
    }

    [Java.Interop.Export("BackDoor")] 
    public void BackDoor()
    {
        var myActivity = {Magic code to get reference to the the instance of MainActivity goes here} 


    }

}

ただし、スプラッシュ画面で起動するため、SplashActivity ではなく、実際の MainActivity への参照を取得する必要があります。BackDoor メソッドで MainActivity への参照を取得するにはどうすればよいですか?

Xamarin バックドア ドキュメント: https://developer.xamarin.com/recipes/testcloud/start-activity-with-backdoor/ https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

4

2 に答える 2

2

Android のバックドア メソッドのガイドによると、object型を返すことはできずstring、 、Java.Lang.String、またはのみvoidです。参照: https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

ガイドのようにバックドアから次のアクティビティを開始したくありませんか? その場合は、より密接にリンクしたガイドに従ってください。

また、 NullReferenceException でビルド時にダブル チェックobjectしてメソッドから戻るだけで失敗します。BackDoorただし、「{MainActivity のインスタンスへの参照を取得するマジック コードはここに入る}」の場合は、次のことができます。

ActivityManager am = (ActivityManager)this.GetSystemService(Context.ActivityService);
var myActivity = am.GetRunningTasks(1)[0].TopActivity;

これmyActivityは最上位のアクティビティへの参照になりますが、BackDoor メソッドからそれを返すことはできません。もちろん、文字列の説明を返すことができます。テストコードでできることはあまりないので、とにかくテストコードでアクティビティへの参照が必要な理由がわかりません。

于 2017-01-05T02:06:03.650 に答える