zoukankan      html  css  js  c++  java
  • NO.6 appium-网络设置

    在测试过程中难免需要有一些跟网络状态相关的设置,比如要确保'wifi'是连接的,或者确保'数据网络'是连接的,或者是没网络的.有问题先翻查API,翻查之后发现appium也灰常给力的提供了相关的API,将尝试过程中的一些问题总结一下.

    好嘞,上菜!

    1.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

    这个API的大概意思是:设置网络连接类型,通过`appium.webdriver.ConnectionType`枚举类型设置.

    0=无/1=飞行模式/2=wifi/4=数据/6=所有网络


    先不管那个什么枚举类型了,直接上API+参数开跑代码,实践出真理!首先试一下'6',看看这个'所有网络'都包括什么~

    我手机现在的状态是这样的:

    都是关闭的状态

    执行代码:

    driver.set_network_connection(6)

    结果:

    额~~所好的所有网络,只开启一个wifi````````````

     

     

    接着就是'4'数据,应该就是指手机卡的网络开关,我们设置一下来验证.

    执行代码:

    driver.set_network_connection(4)

    结果:

    这是什么鬼````你好歹开启点啥啊```居然还是没反应?

     

     

    再来试试'2'wifi连接

    执行代码:

    driver.set_network_connection(2)

    结果:

    这是正常的```

    接下来是飞行模式

    执行代码:

    driver.set_network_connection(1)

    结果:

    这也是正常的```

     

     

    最后是'0'代表无连接,那我就先把各种连接都打开好了:

     

    执行代码:

    driver.set_network_connection(0)

    结果:

    合着"数据"连接,就是体系外的了,执行"0无连接",关闭的也只是wifi`````````

     

     

    轮流试过一遍了,我又想去纠结一下,这个`appium.webdriver.ConnectionType`,于是我就去这个地方看了看:

    跟API写的差不都一个意思,我搜索了一下,于是乎发现了另一个使用方法如下:

    from appium.webdriver.connectiontype import ConnectionType

    driver.set_network_connection(ConnectionType.AIRPLANE_MODE)

    又臭又长的写法,不知道能不能打开数据网络呢?去试试~

    执行代码:

    driver.set_network_connection(ConnectionType.DATA_ONLY)

    结果:然而并没什么软用``````````````好吧,能开一个wifi我就满足了.

    在实际测试的时候,没跑一条用例就执行一次打开wifi是挺烦的,于是乎我考虑自己组装一个方法,先查看一下网络状态,如果wifi没开,我在打开wifi连接.有这个想法后,我又去翻了api,还真有获取当前网络的方法.

    2.network_connection

    Returns an integer bitmask specifying the network connection type.
    Android only.
    Possible values are available through the enumeration `appium.webdriver.ConnectionType`

    这个API的大概意思:返回网络连接类型的整数

    我手机现在的状态是这样的:

     

    执行代码:

    print(driver.network_connection)

    结果:0

    鉴于刚才,打开"数据"网络无效,所以我想试试,如果我开启数据网络,获取到的信息是什么样:

    执行代码:

    print(driver.network_connection)

    结果:4

    "纳尼"(*・∀・)`````正确返回4了!!真是匪夷所思的体验``

    刚刚我们执行"6所有网络"的时候,仅开启了wifi,这回试试仅开启wifi返回的是什么:

    执行代码:

    print(driver.network_connection)

    结果:2

    "纳尼"(*・∀・)`````正确返回2了!!!好吧,看来查询状态的API,比设置状态的API靠谱很多.

    我以为这样我就可以拿去用了,然后还有坑,我的测试机,是没有手机卡的,于是乎我遇到了坑.

    测试机的状态是这样的:

    没有手机卡,"数据"不可点击状态,颜色稍微特别一点.

    执行代码:

    print(driver.network_connection)

    结果:4

    "纳尼"(*・∀・)`````怎么是4呢?我连手机卡都没有啊!!!!,假如把wifi也开启,岂不是返回6了??

    我们来试试:

    执行代码:

    print(driver.network_connection)

    结果:6

    "纳尼"(*・∀・)`````还真是6啊!6啊!6啊!服了`````跪拜~

    实际用这两个组合的时候还是要多试一下,我发现的坑没准仅针对我自己的这几台测试机而已.仅供参考~~

    3.启动蓝牙

    appium并没有启动蓝牙的API,搜索了一下相关问题发现了两个解决方案:

    第一方案:适用于代码能力好的大牛,思路超简单,就是重构appium的API,增加启动蓝牙的功能......#大神们应该也不用看我废话

    第二方案:用python的自带库(subprocess),执行adb am命令,启动蓝牙

    在执行adb am命令的时候,会弹出一个询问打开蓝牙的对话框,是可以直接点击的,如图:

    '允许'有唯一的ID,可以直接点击

    好吧,不废话了,直接上代码.

    手机目前的状态:

    执行代码:

    subprocess.call("adb shell am start -a android.bluetooth.adapter.action.REQUEST_ENABLE",shell=True)
    driver.find_element_by_id("android:id/button1").click() #这是点击'允许'

    结果:

    蓝牙开启成功

    对于那串adb命令不理解的,大家去搜'adb am'命令学习一下好了,理论上通过'adb am'命令还能开启更多appium没法完成的设置

     

    菜齐了!

  • 相关阅读:
    jQuery.noConflict() 函数详解
    Meta标签用法大全
    解决
    如何在同一台服务器上安装多套通达OA
    Android UI设计系统-android selector 开始自定义样式
    Android UI设计系统---LayoutParams[转]
    jquery Ajax应用总结
    阿里云主机安装Memcached
    PHP搭建OAuth2.0
    制作干净系统 批处理删除所有设备驱动
  • 原文地址:https://www.cnblogs.com/dianxiao2/p/5607971.html
Copyright © 2011-2022 走看看