2017-01-04 2 views
0

У меня есть приложение, в котором я пытаюсь включить тесты Xamarin UI. Мне нужно Backdoor приложение, чтобы обойти мой процесс входа в систему. My Backdoor метод срабатывает просто отлично.Xamarin.UITest Backdoor with Splash Screen

[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. Как получить ссылку на MainActivity в моем методе BackDoor?

Xamarin Backdoor Docs: https://developer.xamarin.com/recipes/testcloud/start-activity-with-backdoor/ https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

+0

В соответствии с руководством для бэкдор-метода для Android он не может возвращать тип 'object', только строка, Java.Lang.String или void. См. Https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/. Вы не хотите запускать следующую активность из бэкдора? Если да, просто следуйте руководству, которое вы связываете более подробно. – jgoldberger

+0

nevermind, сделал комментарий ответ – jgoldberger

+0

Его фактически приложение Xamarin Forms. Я должен получить MainActivity, который запускается после экрана Splash, чтобы получить ссылку на Xamarin.Application, чтобы получить ссылку на стек навигации, чтобы ввести логин. – David

ответ

1

Как Получить Текущая активность

Чтобы получить MainActivity, вы можете использовать @JamesMontemagno «s 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.

+1

Надеюсь наконец. Я дал ему выстрел и обновил соответственно спасибо – David

+0

Ха-ха, пожалуйста, @David! Удачи и дайте мне знать, если у вас есть вопросы! –

+0

Привет @David! Это решение решило ваш вопрос? Если да, отметим это как ответ, чтобы помочь будущим разработчикам с тем же вопросом! –

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. Конечно, вы можете вернуть строковое описание. Я не знаю, почему вам нужна ссылка на активность в вашем тестовом коде, так как в тестовом коде вы не можете с ним поделать.

+0

Yaeh - пример взломанной версии моего приложения для демонстрации. Я решил, что кто-то прокомментирует тип возврата и, вероятно, должен был потратить больше времени на его очистку. Очистите его сейчас, чтобы кто-то не вырезал и не вставлял его и не ругал меня. – David

+0

Похоже, что это не дает мне ссылку на действие, это дает ссылку на имя_компьютера. – David