我有一个应用程序,我试图将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/
答案 0 :(得分:2)
根据Android后门方法指南,它无法返回object
类型,仅返回string
,Java.Lang.String
或void
。请参阅: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");