Включить / отключить Wi-Fi с помощью Xamarin UiTest - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь включить / отключить Wi-Fi программно в рамках теста Xamarin Ui.
Я уже нашел это: Android: Как программно включить / отключить Wi-Fi или подключение к Интернету .Но, похоже, он не работает в UiTest.

Я также попробовал что-то вроде этого:

Context appContext = Android.App.Application.Context;
var wifiManager = (WifiManager)appContext.GetSystemService(Context.WifiService);
bool status = false;
wifiManager.SetWifiEnabled(status);

Первая строка (Android.App.Application.Context) выдает исключение:

Message: System.IO.FileNotFoundException : Could not load file or assembly 'Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065' or one of its dependencies. The system cannot find the file specified.

Я использую следующие пространства имен:

using Android.Net.Wifi;
using Android.Content;

В моем проекте есть ссылка на Mono.Android.

1 Ответ

0 голосов
/ 17 мая 2018

Бэкдор подходит для меня отлично.

Решение, которое работает для меня, было комбинацией:

1 .: Добавить следующую строку в файл AndroidManifest.xml проекта Android:

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

2 .: Добавить следующие строки вMainActivity.cs проекта Android:

using Java.Interop;
using Android.Net.Wifi;

[Export("ChangeWifiState")]
public void ChangeWifiState(bool state)
{
    Context appContext = Android.App.Application.Context;
    var wifiManager = (WifiManager)appContext.GetSystemService(WifiService);
    wifiManager.SetWifiEnabled(state);
}

3 .: Вызвать следующий метод из теста Xamarin Ui:

app.Invoke("ChangeWifiState", false);    // true to enable wifi, false to disable wifi

PS: я использую формы Xamarin.У меня есть четыре разных проекта: основной проект, проект Android, проект пользовательского интерфейса и тестовый проект.

Я только что нашел второе решение без использования реального приложения .
Он использует команды ADB для включения / выключения Wi-Fi:

        var process = new System.Diagnostics.Process();
        var startInfo = new System.Diagnostics.ProcessStartInfo
        {
            WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
            FileName = "cmd.exe",
            Arguments = "/C adb shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings adb shell input keyevent 19 & adb shell input keyevent 19 & adb shell input keyevent 23 & adb shell input keyevent 82 & adb shell input tap 500 1000"
        };
        process.StartInfo = startInfo;
        process.Start();

Это можно использовать без рутованного устройства :).
Шаги объяснили:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings открывает настройки Wi-Fi.
adb shell input keyevent 23 включает / отключает Wi-Fi.
Я не уверен, почему используется команда adb shell input keyevent 19, но она работает.
adb shell input keyevent 82 нажимает кнопку меню, чтобы вернуться к исходному приложению.
adb shell input tap 500 1000 щелкает координату x = 500, y = 1000 (центр экрана). Возможно, это потребуется изменить для различных решений.
Источники для этого решения:

...