UiAutomator UiAutomator 自动打开关闭 wifi

steven · 2016年12月03日 · 最后由 steven 回复于 2018年08月22日 · 3087 次阅读

在 UiAutomator 2.0 里,我们终于可以调用到 Android 的接口了,那么有些操作就不要再用 UI 脚本的方式去实现了,从而避免与 UI 界面耦合。

比如,有那么一两条测试用例,需要在 wifi 关闭或开启的状态下进行测试的,那就可使用如下方法去操作。

**
 * 是否开启 wifi true开启 false关闭 
 *  
 * @param isEnable 
 */  
public void setWifi(boolean isEnable) {  

    //  
    if (mWm == null) {  
        mWm = (WifiManager) InstrumentationRegistry.getContext().getSystemService(Context.WIFI_SERVICE);  
        return;  
    }  
    if (isEnable) {// 开启wifi  

        if (!mWm.isWifiEnabled()) {  

            mWm.setWifiEnabled(true);  

        }  
    } else { 
        // 关闭 wifi  
        if (mWm.isWifiEnabled()) {  
            mWm.setWifiEnabled(false);  
        }  
    }  

}  
共收到 6 条回复 时间 点赞

原来还可以这样 昨天按 UI 脚本写 都是按字符 on 和 off 来判断了 学习了

—— 来自 TesterHome 官方 安卓客户端

#1 楼 @lingdu 如果 wifi on 或 off 不是你这条 case 的检查点,那就用 android 接口来实现是比较好的

#2 楼 @steven 嗯 我就是要点击 WiFi 开关并检测 WiFi 开启和关闭的状态 设置里面和状态栏的检测就不一样了 用你这样的话就这样一个判断就可以搞定 我那样两个不同的场景得写两个不同的判断

—— 来自 TesterHome 官方 安卓客户端

#3 楼 @lingdu
厉害啊,看了你这个终于解决我的问题👍
不过直接使用的话,为什么就调不出相应的方法呢,比如下面这样
WifiManager mwm=(WifiManager) InstrumentationRegistry.getContext().getSystemService(Context.WIFI_SERVICE);
mvm. <------为什么不能这样直接调用对应的方法呢,而是要加一个 boolean?

public static void setWifi(boolean isEnable){
        WifiManager wm = (WifiManager) InstrumentationRegistry.getContext().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        if (isEnable) {
            //open wifi
            if (!wm.isWifiEnabled()) {
                wm.setWifiEnabled(true);
            }
        } else {
            // close wifi
            if (wm.isWifiEnabled()) {
                wm.setWifiEnabled(false);
            }
        }
    }

楼主,我是这么写的,N sdk,出现 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 这个错

检查一下是不是没有过去到 context 对象吧,空指针

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册