6

uiautomatorAndroidのツールを使用してテストケースの一部としてwifiをオンにしたい。uiautomatorテストケースで次のコードを使用してみました。

WifiManager wi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
      if(wi.isWifiEnabled()){
        wi.setWifiEnabled(false);
      }else{
        wi.setWifiEnabled(true);
    }

しかし、それはこのエラーを与えました:

「getSystemservice」メソッドはMainclassに対して未定義です

4

6 に答える 6

9

実際にUIAutomatorを使用して、WiFi設定のオンとオフを設定できます。私は今晩コードを書きました:)

これがコードです。ここにあるAndroidの例に追加できますhttp://developer.android.com/tools/testing/testing_ui.html

クラスの先頭に次の列挙型を追加します

private enum OnOff {
    Off,
    On
};

次の後に新しいコードを追加します。

    // Validate that the package name is the expected one
    UiObject settingsValidation = new UiObject(new UiSelector()
    .packageName("com.android.settings"));
    assertTrue("Unable to detect Settings", settingsValidation.exists());

新しいコードは次のとおりです。

    UiSelector settingsItems = new UiSelector().className(android.widget.TextView.class.getName());
    UiObject wiFi = appViews.getChildByText(settingsItems, "Wi-Fi");

    // We can click on Wi-Fi, e.g. wiFi.clickAndWaitForNewWindow();
    // So we know we have found the Wi-Fi setting

    UiSelector switchElement = new UiSelector().className(android.widget.Switch.class.getName());
    setSwitchTo(OnOff.Off); // Or set it to On as you wish :)
}   

private void setSwitchTo(OnOff value) throws UiObjectNotFoundException {

    String text;
    UiObject switchObject = getSwitchObject();
    for (int attempts = 0; attempts < 5; attempts++) {
        text = switchObject.getText();
        boolean switchIsOn = switchObject.isChecked();
        final OnOff result;
        if (switchIsOn) {
            result = OnOff.On;
        } else {
            result = OnOff.Off;
        }

        System.out.println("Value of switch is " + switchObject.isSelected() + ", " + text + ", " + switchIsOn);
        if (result == value) {
            System.out.println("Switch set to correct value " + result);
            break;
        } else {
            switchObject.click();
        }
    }
}

private UiObject getSwitchObject() {
    UiObject switchObject = new UiObject(new UiSelector().className(android.widget.Switch.class.getName()));
    assertTrue("Unable to find the switch object", switchObject.exists());
    String text;
    return switchObject;
}

ループは、クリックによってスイッチの位置が変わらないように見える、私が観察したいくつかの動作を補正するためのものでした。

于 2013-03-08T22:17:44.717 に答える
2

Android 4.2 および 4.4 の本番環境で使用

コードで Android Wifi 設定を開くには:

final Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK);
mContext.startActivity(intent);

UiAutomator でオン/オフ スイッチをクリックするには (アクティビティが適切に行われていることを確認した後):

public void enableWifiOnAndroidWifiSettings(boolean enabled) throws UiObjectNotFoundException {
    final UiSelector wifiSwitchSelector = new UiSelector().className(android.widget.Switch.class.getName());
    UiObject wifiSwitch = UiDevice.getInstance(sInstrumentation).findObject(wifiSwitchSelector);
    if (wifiSwitch.waitForExists(5000) && wifiSwitch.isEnabled()) {
        if (wifiSwitch.isChecked() != enabled) {
            wifiSwitch.click();
        }
    }
}

既知の制限: 利用可能な最初のスイッチを検索しています。カスタム ROM を使用している場合、または Android 設定アプリが将来進化する場合、それでは十分ではない可能性があります。

于 2016-05-12T13:31:06.880 に答える
0

次のように、adb を介して wifi を有効または無効にできます。

adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db update secure set value=1 where name='wifi_on'; 。出口

ただし、uiautomator ツールを使用して同じことを行うことはできません

于 2013-01-14T16:26:00.657 に答える
-5

これはできません。UI Automator テストは Android フレームワークの一部として実行されないため、Android システム サービスにアクセスできません。UI をテストするためのものです。フル機能のテスト フレームワークであるとは主張していません。テストを実行する前に、WiFi を手動でオンにします。

于 2012-12-21T18:55:24.990 に答える