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} 


    }

}

但是它在我的启动画面中触发,我需要它获得对我实际 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/

4

2 回答 2

2

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

你不想像指南中那样从后门启动下一个 Activity 吗?如果是这样,请按照您更紧密地链接的指南进行操作。

此外,只需仔细检查并object从该BackDoor方法返回失败,并在构建时出现 NullReferenceException。但是,对于“{Magic code to get reference to the instance of MainActivity goes here}”,您可以执行以下操作:

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

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

于 2017-01-05T02:06:03.650 回答
1

如何检索当前活动

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

Current Activity NuGet 包添加到您的 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");

该插件在 GitHub 上开源

于 2017-01-13T06:59:58.633 回答