Xamarin.UITest Backdoor with Splash Screen



我有一个应用程序,我正在尝试放置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} 

    }
}
但是,它

在我的启动画面中触发,我需要它获得对我实际主活动的引用,而不是我的启动活动。如何在后门方法中获取对主活动的引用?

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

根据 Android 后门方法指南,它不能返回object类型,只能返回 stringJava.Lang.Stringvoid 。请参阅: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 方法返回它。当然,您可以返回字符串描述。我不知道为什么你需要在测试代码中引用该活动,因为在测试代码中你可以用它做很多事情。

如何检索当前活动

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

将当前活动 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 上是开源的。

最新更新