【问题标题】:Xamarin.UITest Backdoor with Splash Screen带有初始屏幕的 Xamarin.UITest 后门
【发布时间】:2017-01-04 18:07:12
【问题描述】:

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

【问题讨论】:

  • 根据Android后门方法指南,不能返回object类型,只能返回string、Java.Lang.String或void。请参阅:developer.xamarin.com/guides/testcloud/uitest/working-with/…。你不想从后门开始下一个Activity吗?如果是这样,请按照您更紧密地链接的指南进行操作。
  • 没关系,发表评论回答
  • 它实际上是一个 Xamarin Forms 应用程序。我必须获取在启动屏幕之后启动的 MainActivity 以获取对 Xamarin.Application 的引用以获取对导航堆栈的引用以弹出登录。
  • 自动化登录会不会更容易,IOW输入用户信息并实际登录?
  • 据我所知,我无法使用 Xamarin.UI.Tests 解决 web 视图中的组件。我认为最后我只需要创建一个单独的启动器应用程序,它没有启动屏幕并自动绕过登录。但是我实际上不会测试我的应用程序。感谢您的跟进。

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


【解决方案1】:

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

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

此外,只需仔细检查并从BackDoor 方法返回object 会在构建时失败并出现 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 方法返回它。您当然可以返回字符串描述。我不知道为什么您需要在测试代码中引用活动,因为在测试代码中您无能为力。

【讨论】:

  • 是的,这个例子是我的应用程序的破解版本,用于演示。我想有人会对返回类型发表评论,并且可能应该花更多时间来清理它。现在把它清理干净,以防止有人剪切和粘贴它并咒骂我。
  • 看起来这实际上并没有给我一个 Activity 的引用它给 ComponetName 一个引用。
【解决方案2】:

如何检索当前活动

要检索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

【讨论】:

  • 终于有了希望。我会试一试并相应更新谢谢
  • 哈哈,不客气,@David!祝你好运,如果您有任何问题,请告诉我!
  • 嗨@大卫!此解决方案是否解决了您的问题?如果是这样,让我们​​将其标记为已回答,以帮助未来的开发人员解决同样的问题!
  • 还没有机会回到这个问题,所以还没有验证它,但它确实看起来不错
猜你喜欢
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多