2017-01-04 37 views
0

Xamarin UIテストを実装しようとしているアプリケーションがあります。ログイン処理をバイパスするには、バックドアする必要があります。 私のバックドアメソッドはうまくいきます。Xamarin.UITestスプラッシュ画面のバックドア

[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/

+0

Android用バックドアメソッドのガイドによると、 'object'型、文字列、Java.Lang.String、またはvoidのみを返すことはできません。 https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/を参照してください。バックドアから次のアクティビティを開始したくないですか?その場合は、リンク先のガイドに従ってください。 – jgoldberger

+0

nevermind、made comment answer – jgoldberger

+0

実際にはXamarinフォームアプリです。 Splash画面の後に起動するMainActivityを取得してXamarin.Applicationへの参照を取得し、ログインスタックを参照するナビゲーションスタックへの参照を取得する必要があります。 – David

答えて

1

MainActivityを取得するには現在のアクティビティに

を取得するにはどのように、あなたは@JamesMontemagnoのCurrentActivityPluginを使用することができます。

Xamarin.AndroidプロジェクトにCurrent Activity NuGet Packageを追加し、Xamarin.Androidプロジェクトで次のコード行を使用して現在のアクティビティを取得し、MainActivityであることを確認できます。

Activity currentActivity = Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity as MainActivity; 

if (!(currentActivity is MainActivity)) 
    throw new System.Exception("Current Activity is not MainActivity"); 

このプラグインはopen-sourced on GitHubです。

+1

ようやく欲しいです。病気はそれにショットを与え、それに応じて更新 – David

+0

ハハ、あなたは大丈夫です、@ダビッド!あなたに質問がある場合は幸い、私に知らせてください! –

+0

こんにちは@David!このソリューションはあなたの質問を解決しましたか?もしそうなら、同じ質問を持つ将来の開発者を助けるためにそれを答えたものにしましょう! –

2

Android用バックドアの方法のためのガイドによれば、それだけstringJava.Lang.String、又はvoidobject型を返すことができません。参照:https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

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

また、BackDoorメソッドのobjectメソッドをダブルチェックすると、NullReferenceExceptionでビルドに失敗します。しかし、「{MainActivityのインスタンスへの参照を取得するための魔法のコードをここに}」のためにあなたが行うことができます。

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

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

+0

その例はデモのポイントのための私のアプリのハッキングされたバージョンのバージョンです。私は、誰かが返品の種類についてコメントしていると考えて、おそらくそれをきれいにするために多くの時間がかかりました。誰かが切り取って貼り付けるのを阻止して私を泣かせないように、これをきれいにしました。 – David

+0

これは、実際には私には、それがRefetを提供するアクティビティへの参照を与えるdoesntのように見えます。 – David

関連する問題