美文网首页
Appium 自动化实例

Appium 自动化实例

作者: 自如_ | 来源:发表于2019-06-27 17:47 被阅读0次

    我们以一个开发者头条的app,为例,演示一下自动化的过程

    3.1 准备一些事情

    即使安装好上述软件后。要自动化,还要准备一些事情,首先当然需要有被测试的 app 应用了。这里我们用的是开发者头条的 app 是从应用市场上下载下来。大家可以到其官网上下载安卓应用的 apk 文件

    https://toutiao.io/

    在一个合适的目录汇中,比如 E:\tools\ 目录下面。其次,运行 appium server ,这里就是上面安装的 appium desktopappium desktop 桌面图标长这个样子。

    image.png

    双击启动起来,大家注意这只是打开 appium desktop 界面。

    image.png

    要把 Appium server 启动起来要点击 Start Server

    image.png

    然后界面呈现这种状态。


    image.png

    Welcome to Appium 这个就是 Appium server 的版本。** Appium REST http interface listener started on 0.0.0.0:4723** 这样才是启动成功。

    3.2 连接真实设备

    连接手机的方法请移步

    https://www.jianshu.com/p/878517b1b6d6

    3.3 运行代码

    打开开发者头条,点击 “+” 进入登录页面,只后点击用邮箱登录

    image.png image.png

    然后输入我们注册的用户名和密码点击登录。


    image.png

    大家创建个 python 文件,输入如下内容:

    #导包
    from appium import webdriver
    
    #准备自动化配置信息
    desired_caps={
        #移动设备平台
        'platformName':'Android',
        #平台OS版本号
        'plathformVersion':'8',
        #设备的名称--值可以随便写
        'deviceName':'test0106',
        #提供被测app的信息-包名,入口信息
        'appPackage':'com.alpha.lagouapk',
        'appActivity':'.HelloActivity',
        #确保自动化之后不重置app
        'noReset':True,
        #设置session的超时时间,单位秒
        'newCommandTimeout':6000,
        #更换底层驱动
        'automationName':'UiAutomator1',
        'unicodeKeyboard':True,#修改手机的输入法,UI2不需要设置
        'resetKeyboard':True#自动化结束之后将输入法还原
    }
    
    #初始化driver对象-用于控制手机
    driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
    driver.implicitly_wait(10)#稳定元素
    
    try:
    
        # 根据id找到元素,并点击,id和 html 元素的id不同
        driver.find_element_by_id("tab_bar_plus").click()
        time.sleep(1)
        driver.find_element_by_id("btn_email").click()
        time.sleep(1)
    
        # 输入用户名、密码
        ele = driver.find_element_by_id("edt_email")
        ele.send_keys('输入自己的账号')
        ele = driver.find_element_by_id("edt_password")
        ele.send_keys('输入自己的密码')
    
        time.sleep(2)
        # 点击登录
        driver.find_element_by_id('btn_login').click()
    
    except:
        print(traceback.format_exc())
    
    input('**** Press to quit..')
    driver.quit()
    
    

    大家运行一下,看看是否能成功登陆开发者头条。

    3.4 代码解释

    我们先看第一行代码

    from appium import webdriver
    

    from selenium import webdriver很相似,这个 webdriver 是个什么东西呢,我们可以点进去看一下。大家点进去可能会很奇怪,会以为有个文件叫 webdriver.py 呢,但是不是,它是一个 _init_.py 的文件。

    image.png

    注意当我们 import 导入一个模块的时候,如果说这个 appium 目录下没有这个 webdriver.py 的文件,如果说没有,但是 appium 下面有个 webdriver 目录,它就会把目录下的这个 _init_.py 也可以作为 webdriver 模块。

    image.png

    配置项部分:

    
    #准备自动化配置信息
    desired_caps={
        #移动设备平台
        'platformName':'Android',
        #平台OS版本号,写整数位即可
        'plathformVersion':'8',
        #设备的名称--值可以随便写
        'deviceName':'test0106',
        #提供被测app的信息-包名,入口信息:
        #adb shell dumpsys activity recents | findstr intent={
        'appPackage':'com.hpbr.bosszhipin',
        'appActivity':'.module.launcher.WelcomeActivity',
        #确保自动化之后不重置app
        'noReset':True,
        #设置session的超时时间,单位秒
        'newCommandTimeout':6000,
        #设置底层测试驱动-1.15默认使用的底层驱动就是UiAutomator2
        'automationName':'UiAutomator2',#或者UiAutomator1
        # 'skipServerInstallation':True#跳过UI2的安装,如果第一次运行程序,不要添加该配置
    }
    

    这里定义的 desired_capabilities ,作为下面生成 webdriver 时的参数。这些键值对告诉 appium server 测试程序希望进行的是什么样的测试。大家可以根据如下注释,了解每个配置项的含义。

    #导包
    from appium import webdriver
    
    #准备自动化配置信息
    desired_caps={
        #移动设备平台
        'platformName':'Android',
        #平台OS版本号,写整数位即可
        'plathformVersion':'8',
        #设备的名称--值可以随便写
        'deviceName':'test0106',
        #提供被测app的信息-包名,入口信息:
        #adb shell dumpsys activity recents | findstr intent={
        'appPackage':'com.hpbr.bosszhipin',
        'appActivity':'.module.launcher.WelcomeActivity',
        #确保自动化之后不重置app
        'noReset':True,
        #设置session的超时时间,单位秒
        'newCommandTimeout':6000,
        #设置底层测试驱动-1.15默认使用的底层驱动就是UiAutomator2
        'automationName':'UiAutomator2',#或者UiAutomator1
        # 'skipServerInstallation':True#跳过UI2的安装,如果第一次运行程序,不要添加该配置
    }
    
    #启动Remote RPC,将 capability参数传入,
    #创建一个 webdriver对象, 和Selenium 类似。
    #初始化driver对象-用于控制手机-启动被测应用
    #IP-appium-server所在机器的网络ip,port-监听的端口号,path固定/wd/hub
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    
    try:
        # 和Selenium含义一样,问问大家还记得吗?
        driver.implicitly_wait(10)
    
        # 根据id找到元素,并点击,id和 html 元素的id不同
        driver.find_element_by_id("io.manong.developerdaily:id/tab_bar_plus").click()
        time.sleep(1)
        driver.find_element_by_id("io.manong.developerdaily:id/btn_email").click()
        time.sleep(1)
    
        # 输入用户名、密码
        ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_email")
        ele.send_keys('jcyrss@163.com')
        ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_password")
        ele.send_keys('sdfsdf')
    
        time.sleep(2)
        # 点击登录
        driver.find_element_by_id('io.manong.developerdaily:id/btn_login').click()
        pass
    
    except:
        print(traceback.format_exc())
    

    我们看下面这行代码。

    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    

    webdriver.Remote,注意我们前面做 selenium 的时候,如果是谷歌浏览器就是webdriver.Chrome,至于 appnium 这里就写 Remote 因为这个 Remote 就是 appium 里面的一个 webdriver 对象,它的第一个参数是 appium server 它所运行的 url ,因为 appium server 它是以一个 web 服务的状态启动的,我们的自动化程序就是要连接这个appium server 服务,这个web* 服务它是 http 服务协议通信的.。因为我这个是启动在本机上所以这里就写 localhost 。端口 4723,有的人会问,我怎么知道这个端口啊?还有后面的这些东西,后面这些 /wd/hub 几乎是不变的,这个是 url 的固定地址,这块就固定填写/wd/hub 就行了,localhost:4723 就看你 appium server 启动在哪,大部分都是在本机上,所以说//localhost:4723/wd/hub 这个地址是几乎不变的,有可能变的是端口,只要你不改几乎也是不变的,因为 4723 是缺省端口,除非端口冲突了,正好有另外一个应用也占用了 4723 一般不会99%的不会 ,所以只要填固定的地址就可以了,我们启动之前不是有地址和端口吗。

    image.png

    我们通常不需要去改它,然后第二个参数 desired_caps 就是上面创建的字典对象,字典对象里面存了配置参数。把它传给 appium server 这行代码想创建webdriver实例对象,它的初始化操作干什么事情呢?就是去连接 appium server 并且把这次自动化的参数传递给他。告诉它们我们做的是Android的自动化,这个时候appium server 就会做一系列的事情,比如当前appium server 所在的这台电脑有没有连接一个安卓手机,并且安卓的版本是7的。。等等还有一些其他参数。

    相关文章

      网友评论

          本文标题:Appium 自动化实例

          本文链接:https://www.haomeiwen.com/subject/ygjlcctx.html