Xamarin.UITest Backdoor with Splash Screen

时间:2017-01-04 18:07:12

标签: xamarin xamarin.android xamarin.forms xamarin.uitest

我有一个应用程序,我试图将Xamarin UI测试放在上面。我需要Backdoor应用程序以绕过我的登录过程。 我的后门方法很好。

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


    }

}

然而,它在我的Splash屏幕中触发并且我需要它来引用我的实际MainActivity而不是我的SplashActivity。如何在BackDoor方法中获得对MainActivity的引用?

Xamarin后门文档: https://developer.xamarin.com/recipes/testcloud/start-activity-with-backdoor/ https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

2 个答案:

答案 0 :(得分:2)

根据Android后门方法指南,它无法返回object类型,仅返回stringJava.Lang.Stringvoid。请参阅:https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

你不想像在指南中那样从后门开始下一个活动吗?如果是这样,请按照您更密切联系的指南进行操作。

此外,只需双重检查并从object方法返回BackDoor在使用NullReferenceException的构建时失败。但是,对于“{获取对MainActivity实例的引用的魔术代码}”,您可以这样做:

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

myActivity将是对最顶层活动的引用,但无论如何都无法从BackDoor方法返回它。您当然可以返回字符串描述。我不知道为什么你需要在测试代码中引用活动,因为在测试代码中没有太多可以用它做的。

答案 1 :(得分:1)

如何检索当前活动

要检索MainActivity,您可以使用@JamesMontemagno的CurrentActivityPlugin。

Current Activity NuGet Package添加到您的Xamarin.Android项目中,然后,在您的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