Appium 运行脚本前如何做手机是否连网的判断

enumerate · 2016年11月07日 · 最后由 enumerate 回复于 2016年11月08日 · 2976 次阅读

1.首先写这个的原因是,以前写的脚本运行时人都会在旁边,运行前会看下是否连网之类的前期判断,现在要实现真正的人机分离,手机和电脑连上就不会管了,固定时间会自动运行脚本,那么问题来了,我不保证,手机放在那没人动,假设如果有同事动了手机,wifi 断了,那么我在运行脚本时没有网络,之后的 case 肯定就是失败了。
2.这次想实现运行脚本后第一件事就是判断手机是否连网
3.自己找了几个方法,但对我没有帮助,这里也贴出来,有需要的朋友可以拿走使用了
第一种是 adb 命令,但是这种方法是需要 root 的,我的手机没有 root 所以不能使用,我也不能因为使用脚本就把手机 root 了,那么多手机不可能都为了这个原因就 root,这样太被动了,而且找到的命令是打开和关闭 wifi,并不是做判断这点要注意
adb shell
su
svc wifi enable 开启 wifi
svc wifi disable 关闭 wifi
是否可用自己试下吧,我没有试
第二种是 appium 自带的一个方法,可以打开手机的下拉菜单,我使用的是 python 版本方法
driver.open_notifications()
实验了下,没有成功打开下拉菜单
4.目前的方法绕一下路就是,先打开手机的设置一步一步的去点击打开 wifi,但问题就是,我怎么知道现在是否开启还是关闭呢。如果已经是开启的我点两下,那就保证会开启,如果是关闭的我点两下那就又给关闭了。
想知道 appium 里有没有判断手机是否连网的方法,自己找了半天没有找到,或者有其他好的思路的朋友可以分享下,谢谢

共收到 10 条回复 时间 点赞

.......脚本里随便连接一下网络判断下返回状态就好了啊

#1 楼 @zuiniao123 你好你的意思是进入 shell,ping 一下吗

是不是可以使用 set_network_connection,不管当前网络状态如何,执行测试之前,主动设置一次网络

31. set_network_connection
set_network_connection(self, connectionType):

Sets the network connection type. Android only.
    Possible values:
        Value (Alias)      | Data | Wifi | Airplane Mode
        -------------------------------------------------
        0 (None)           | 0    | 0    | 0
        1 (Airplane Mode)  | 0    | 0    | 1
        2 (Wifi only)      | 0    | 1    | 0
        4 (Data only)      | 1    | 0    | 0
        6 (All network on) | 1    | 1    | 0
    These are available through the enumeration `appium.webdriver.ConnectionType`
    设置网络类型
    :Args:
     - connectionType - a member of the enum appium.webdriver.ConnectionType

用法  先加载from appium.webdriver.connectiontype import ConnectionType
dr.set_network_connection(ConnectionType.WIFI_ONLY)
ConnectionType的类型有
NO_CONNECTION = 0
AIRPLANE_MODE = 1
WIFI_ONLY = 2
DATA_ONLY = 4
ALL_NETWORK_ON = 6

#3 楼 @xinxjxjxj 以前不知道这个方法,我查一下,多谢介绍

#3 楼 @xinxjxjxj 还有请问,你的这些 api 是在哪能看到呢,我目前就知道网站上给的 api

#3 楼 @xinxjxjxj 试了一下成功了,谢谢你了

给你一个 adb 命令不用 root 的,self.__find根据系统替换为 grep/findstr

def get_wifi_state(self):
    """
    获取WiFi连接状态
    :return:
    """
    return 'enabled' in self.shell('dumpsys wifi | %s ^Wi-Fi' % self.__find).read().strip()

def get_data_state(self):
    """
    获取移动网络连接状态
    :return:
    """
    return '2' in self.shell('dumpsys telephony.registry | %s mDataConnectionState' % self.__find).read().strip()

adb shell getprop wifi.interface 得到返回 string1

adb shell getprop dhcp.string1.result 得到返回状态

当然这个只能看你 wifi 连没连,并不能知道网络通不通

#7 楼 @heyniu 好的谢谢,我试下😀

#8 楼 @ganyunxiao 好的谢谢,我的目的就是看下 wifi 有没有连接,至于通不通,我也没有办法了😄

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