appium_appium 滑动 - CSDN
精华内容
参与话题
  • Appium使用教程_Android篇

    万次阅读 多人点赞 2020-05-15 15:45:20
    一、Appium介绍 Appium是一个开源的自动化测试工具,其支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用。 1、Appium 理念 Appium是基于以下的四个理念设计来满足移动平台测试自动化的要求的: 1)您不...

     

    --by keeng2008@qq.com 2016-05-16

    一、Appium介绍

    Appium是一个开源的自动化测试工具,其支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用。

    1、Appium 理念

    Appium是基于以下的四个理念设计来满足移动平台测试自动化的要求的:

    1)您不应该因为需要自动化测试您的应用而不得不以任何形式去重新编译或者修改你的app

    2)您不应该把自己固定在一门特定的语言和一个特定的框架上去实现和运行你的测试

    3)当说到测试自动化APIs的时候,一个移动测试框架不应该做“重新发明轮子”的事情,

    4)一个移动测试自动化框架应该是开源的,无论是在精神上,实际上,还是名义上!

    2、使用Appium进行自动化测试有两个好处

    Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。

    Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架.Appium实现了真正的跨平台自动化测试。(本文主要介绍Python的用法)

    3、Appium架构

    Appium 是一个用Node.js编写的HTTP server,它创建、并管理多个 WebDriver sessions 来和不同平台交互,如 iOS ,Android等等. 

    Appium 开始一个测试后,就会在被测设备(手机)上启动一个 server ,监听来自 Appium server的指令. 每种平台像 iOS 和Android都有不同的运行、和交互方式。所以Appium会用某个桩程序“侵入”该平台,并接受指令,来完成测试用例的运行。

     

     

     

    二、Appium环境搭建(Android)

    1、首先需要准备

    1) jdk(步骤不再啰嗦)

    2) android SDK,下载地址:http://developer.android.com/sdk/index.html,下载sdk tools,可能需要FQ,提供一个国内下载地址:http://www.androiddevtools.cn/

    3) appium,下载地址:http://appium.io/

    4) nodejs,下载地址:https://nodejs.org/en/

    5) appium lib,下载地址:http://appium.io/downloads.html

         选择Python版本的Lib: Appium-Python-Client-0.22.tar.gz

         由于Appium依赖于Selemium,所以还要下载 Selemium Lib: selenium-2.53.2.tar.gz   https://pypi.python.org/pypi/selenium

    6) python, 下载地址:https://www.python.org/, 下载2.X 的版本。

    上述软件都准备好后,则进入搭建步骤。

    2、安装、配置

    将上述软件依次安装。

    1) android sdk安装完毕后,需要配置环境变量

    新建ANDROID_HOME    D:\ProgramFiles (x86)\Android\android-sdk

    在PATH中添加:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

    2)  nodejs安装完毕后,需要配置环境变量

    在PATH中添加:D:\Program Files\nodejs;

    3) appium安装完毕后,需要配置环境变量

    D:\Program Files (x86)\Appium\node_modules\.bin;

    4) 配置好后,启动cmd,

    输入node -v,查看node安装版本

    输入appium-doctor检查appium的安装环境是否成功,如下图:

     

     

    5) 安装Python,配置环境变量,如C:\Python27,检查是否设置成功,如下图:

     

     

    三、开始例子(Python)

    1) 启动Appium

    打开命令行,输入appium, 显示成功启动:

     

     

    2)连接Android手机(或者模拟器)

    3)编写客户端代码

    假设我们的代码放在目录E:\PythonTest\AppiumClientPython 中。首先把 Appium-Python-Client-0.22.tar.gz 里面的 appium 目录解压到AppiumClientPython 中, 把 selenium-2.53.2.tar.gz里面的 selenium 目录解压到AppiumClientPython中。

    创建文件hello_appium.py , 编辑内容:

    #coding=utf-8

    from appium import webdriver

     

    desired_caps = {}

    desired_caps['platformName'] = 'Android'

    desired_caps['platformVersion'] = '4.4.2'

    desired_caps['deviceName'] = 'Android Emulator'

    desired_caps['appPackage'] = 'com.android.calculator2'

    desired_caps['appActivity'] = '.Calculator'

     

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

    driver.find_element_by_name("1").click()

    driver.find_element_by_name("5").click()

    driver.find_element_by_name("9").click()

    driver.find_element_by_name("9").click()

    driver.find_element_by_name("5").click()

    driver.find_element_by_name("+").click()

    driver.find_element_by_name("6").click()

    driver.find_element_by_name("=").click()

    driver.quit()

     

    4)运行

    打开命令行,cd到E:\PythonTest\AppiumClientPython 中,运行 python hello_appium.py, 正常情况可以看到手机按照代码控制,打开计算器,逐个点击按钮完成计算。

    四、Appium文档

    1、安装应用后打开

    import os

    from appium import webdriver

    APK_PATH = 'apk/my-debug.apk'

    COMMAND_EXECUTOR_URL = 'http://localhost:4723/wd/hub'

      

        desired_caps = {}

        desired_caps['platformName'] = 'Android'

        desired_caps['platformVersion'] = '5.0'

        desired_caps['deviceName'] = 'Android Emulator'

        desired_caps['app'] = os.path.abspath(APK_PATH)

     

        driver = webdriver.Remote(COMMAND_EXECUTOR_URL, desired_caps)

     

    2、查找控件

    1)通过名称查找

    btn = driver.find_element_by_name("+")

    2)  通过ID查找

    start_btn =driver.find_element_by_id('com.cn21.myapp:id/instruction_close_btn')

    或 start_btn = driver.find_element_by_id('instruction_close_btn')

    3)通过类名查找

    child_text =parent.find_element_by_class_name('android.widget.TextView')

    4)通过android_uiautomator查找

    start_btn =driver.find_element_by_android_uiautomator('new UiSelector().clickable(true)')

    以上find_element_by_XX 都是返回符合条件的第一个控件,如果要返回多个控件,可以调用 find_elements_by_XX, 返回的是一个list。

    注意:如果找不到符合条件的控件,会抛出异常。

    5)查找结点,不希望返回异常,写个函数就行了

    def find_element_by_id_no_except(driver, id):

        element = None

        try :

            element = driver.find_element_by_id(id)

        except Exception,e:

            print Exception, ':', e

        return element

     

    3、模拟按钮点击

    login_btn.click()

    注意:有的点击如果需要等待动画、或者网络请求,建议等待一会:

    import time

    time.sleep(2)  # 睡眠2秒

     

    4、输入框输入文本

    user_input.send_keys('123456')

    注意:Android如果要正确输入,需要把使用系统自带的输入法,第三方输入法无法正确输入。

    5、模拟点击返回键

    driver.press_keycode(4)

    其中按钮的定义,由Android里的KeyEvent.java里定义的,所以其它的Android按钮也是支持的。

    6、关闭driver

    driver.quit()

    注意:一定要记得关闭driver, 否则下次连接的时候可能会出异常,因为Appium以为你上次未关闭,会创建Session失败。

    为了避免代码出现异常而没有关闭,可以在捕获异常时再关闭。

    7、滑动界面

    下面的例子,演示点击屏幕中间,并向上拉动(相当于查看列表下面的内容了)。

    from appium.webdriver.common.touch_action import TouchAction

    def test_scroll_down(driver):

        screen = driver.get_window_size()

        action = TouchAction(driver)

        action.press(x=screen['width']/2,y=screen['height']/2)

        action.move_to(x=0,y=-screen['height']/10)

        action.release()

        action.perform()

     

    等等,怎么获取界面的属性来验证正确性?

    8、获取界面属性,控件属性

    1)获取当前Activity名称

    activity = driver.current_activity

    2) 获取屏幕宽高

    screen = driver.get_window_size()

    3)获取控件文本

    mobile_name.get_attribute('text') 或者 mobile_name.text

    4)获取控件类名

    mobile_name.get_attribute('className')

    5)判断控件是否显示

    mobile_name.is_displayed() 或者 mobile_name.get_attribute('displayed')

    6)获得控件位置

    mobile_name.location

    7)获得控件大小

    mobile_name.size

    8)查找控件子结点

    parent.find_elements_by_class_name('android.widget.TextView')

    同样:查找控件的其它方法,也适用于查找子结点。

     

    对于交互后的验证,无法验证到具体的数据内容,可以验证当前的Activity,或者文本,或者列表是否为空等等。

    更多参考:http://blog.csdn.net/crisschan/article/details/50416860

     

    五、结合单元测试框架编写用例

    Python自带有unittest用于单元测试,其结构类似于JUnit。

    一个测试类需要继承于unittest.TestCase, 方法setUp 用于测试初始化,每个用例开始前都会调用,tearDown用于用例结束时调用,每个以test开始的函数被当成一个用例。

    test_random.py

    import random

    import unittest

     

    class TestSequenceFunctions(unittest.TestCase):

     

        def setUp(self):

            self.seq = range(10)

     

        def test_shuffle(self):

            # make sure the shuffled sequence does not lose any elements

            random.shuffle(self.seq)

            self.seq.sort()

            self.assertEqual(self.seq, range(10))

     

            # should raise an exception for an immutable sequence

            self.assertRaises(TypeError, random.shuffle, (1,2,3))

     

        def test_choice(self):

            element = random.choice(self.seq)

            self.assertTrue(element in self.seq)

     

        def test_sample(self):

            with self.assertRaises(ValueError):

                random.sample(self.seq, 20)

            for element in random.sample(self.seq, 5):

                self.assertTrue(element not in self.seq)

     

    if __name__ == '__main__':

        unittest.main(verbosity=2)

     

    运行此测试: python test_random.py 可以查看测试的结果

     

     

    上面结果显示,有2个用例测试通过,1个用例不通过。

    可以在一个目录下写多个以test开头的测试文件,然后通过以下命令运行所有测试类:

    python -m unittest discover . -v

     

    六、完整例子

    1、测试登陆登出功能

    test_myapp_login_logout.py

    #coding=utf-8
    #
    测试登陆登出功能
    #
    用例1:快速登陆,验证登陆后的Activity为MainActivity
    # 用例2:普通登陆,输入用户名密码,验证登陆后的Activity为MainActivity
    # 用例3:快速登陆后注销,验证注销后的Activity为LoginActivity


    import unittest
    import appium_myapp
    import appium_util
    from appium import webdriver
    import os

    class LoginLogoutTest(unittest.TestCase):
        ##
       
    def setUp(self):
            #print('Installing ...')
           
    desired_caps = {}
            desired_caps['platformName'] = 'Android'
           
    desired_caps['platformVersion'] = '5.0'
           
    desired_caps['deviceName'] = 'Android Emulator'
           
    desired_caps['app'] = os.path.abspath(appium_myapp.APK_PATH)
            self.driver = webdriver.Remote(appium_util.COMMAND_EXECUTOR_URL, desired_caps)
           
        def tearDown(self):
            self.driver.quit()
           
        def test_FastLogin(self):
            appium_myapp.agree_document(self.driver)
            appium_myapp.quick_login(self.driver)
            self.assertTrue(self.driver.current_activity.endswith('MainActivity'))
           
        def test_SlowLigin(self):
            appium_myapp.agree_document(self.driver)
            appium_myapp.slow_login(self.driver)
            self.assertTrue(self.driver.current_activity.endswith('MainActivity'))
           
        def test_Logout(self):
            appium_myapp.agree_document(self.driver)
            appium_myapp.quick_login(self.driver)
            if (self.driver.current_activity.endswith('MainActivity')):
                appium_myapp.test_logout(self.driver)
                self.assertTrue(self.driver.current_activity.endswith('LoginActivity'))

    if __name__ == '__main__':
        unittest.main(verbosity=2)

       
           

     

     

    2、自动乱点测试崩溃的情况

    auto_test_myapp.py

    #coding=utf-8
    import random
    import time
    import traceback

    import appium_myapp


    def auto_interact(driver):
        activity = driver.current_activity
        # 一定的机率滑动,返回键,点击
       
    rate = random.random()
        if rate < 0.1:
            print activity + ' Scroll Down'
           
    appium_myapp.test_scroll_down(driver)
        elif rate < 0.2:
            print activity + ' Scroll Up'
           
    appium_myapp.test_scroll_up(driver)
        elif rate < 0.3:
            print activity + ' Key Back'
           
    driver.press_keycode(4)
        else:
            btn_list = driver.find_elements_by_android_uiautomator('new UiSelector().clickable(true)')
            if (len(btn_list) > 0):
                index = random.randint(0, len(btn_list) - 1)
                print activity + ' Click Button index = %d' % (index,)
                btn_list[index].click()


    def main():
        driver = None
        try
    :
            driver = appium_myapp.install_app()
            time.sleep(appium_myapp.LONG_WAIT_TIME)
            appium_myapp.agree_document(driver)
            appium_myapp.quick_login(driver)
            step = 0
           
    while step < 100:
                if (driver.current_activity.endswith('LoginActivity')):
                    appium_myapp.test_login(driver)
                elif (driver.current_activity.endswith('.Launcher')):
                    driver.background_app(1)
                    driver.launch_app()
                else:
                    auto_interact(driver)
                    time.sleep(appium_myapp.CLICK_WAIT_TIME)
                step += 1
           
    # 正常退出
           
    driver.quit()

        except Exception, e:
            print Exception, ":", e
            traceback.print_exc()
            # 异常退出
           
    if (driver != None):
                driver.quit()


    if __name__ == '__main__':
        for i in range(20000):
            try:
                main()
            except Exception, e:
                print Exception, ":", e
                traceback.print_exc()

       
           

           

     

    注:为了更方便的编写python代码,推荐使用PyCharm IDE,编辑代码跟Java一样方便。

     

    七、参考资料:

    1)官网 http://appium.io/index.html

    2)appium/python-client使用文档https://github.com/appium/python-client

    3)搭建appium的android环境http://www.cnblogs.com/qiaoyeye/p/5131382.html

    4)Appium移动自动化测试(四)http://www.cnblogs.com/fnng/p/4579152.html

    5)AppiumPython API http://blog.csdn.net/crisschan/article/details/50416860

    6)appium常用方法总结 http://www.cnblogs.com/fanxiaojuan/p/4882676.html

     

     

     

     

    展开全文
  • Appium移动自动化测试

    千人学习 2020-02-10 11:32:12
    3.本课程涵盖知识点:Appium的部署、Appium的工作原理、Capability、Appium常见错误&解决方案、通过微信与QQ应用讲解Appium的知识点:元素定位方法、抓取工具、元素等待、字典整合、Appium如何模拟手机滑动、...
  • Appium+Python自动化测试

    2020-05-11 09:42:06
    学习Appium+Python自动化测试 帮助你快速搭建Appium自动化测试框架,包括PO模型框架和关键字模型框架,用最少的时间,达成最大的效果。
  • 安装Python3的Appium库 安装Android SDK 安装JDK 安装Appium 安装模拟器 编写测试脚本并生成测试报告 正文 一、安装Python3 直接登录Python官网https://www.python.org/,下载最新版本即可。 然后安装...

    2020年4月补充

    鉴于配置自动化测试这套框架确实稍微有点麻烦,许多小伙伴在配置的过程中总是踩坑,最近写了篇简化版的入门教程,不想折腾Android SDK的小伙伴可以移步到那篇文章:https://blog.csdn.net/u013314786/article/details/105768650


    概述

    本文主要分为以下几个部分

    1. 安装Python3
    2. 安装Python3的Appium库
    3. 安装Android SDK
    4. 安装JDK
    5. 安装Appium
    6. 安装模拟器
    7. 编写测试脚本并生成测试报告

    项目示例下载地址: https://github.com/lixk/apptest

    正文

    一、安装Python3

    直接登录Python官网https://www.python.org/,下载最新版本即可。
    在这里插入图片描述
    然后安装的时候注意一下安装路径,比如我的安装路径D:\Python37,接下来会用到这个安装路径。

    二、安装Python3的Appium库

    打开Python安装目录,找到Scripts文件夹,点进去,示例:
    在这里插入图片描述在地址栏上输入cmd,然后回车,打开控制台:
    在这里插入图片描述
    在控制台里输入命令pip install Appium-Python-Client,然后回车
    在这里插入图片描述
    看到下图的提示就表明安装成功了
    在这里插入图片描述

    三、安装Android SDK

    我懒得折腾,所以就直接下载了Android Studio
    下载地址
    https://developer.android.com/studio/#downloads
    在这里插入图片描述
    下载完成开始安装
    在这里插入图片描述
    如果需要安装自带的模拟器,就把这一项勾选上,然后Next,接下来选择安装路径,比如我的同样放在D
    在这里插入图片描述
    接下来一路Next,到了选择SDK的页面注意一下
    在这里插入图片描述
    选择Custom,这样可以只安装自己喜欢的部分,接下来选择主题,当然这个以后可以在Android Studio里边改
    在这里插入图片描述
    继续Next,到达定制组件页面,如下图
    在这里插入图片描述
    设置一下SDK的安装路径,比如我的是D:\Android\SDK,接下来继续Next…finish。然后就进入了缓慢的下载环节,让它在这儿慢慢的下载吧,下载完成后就好了。我们可以进入下一节了。

    四、安装JDK

    这里我使用的是JDK8,下载地址
    https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    接受协议,然后选择对应平台下载即可
    在这里插入图片描述
    接下来安装过程比较简单,也是一路Next,注意选择一下安装路径,比如我的安装路径D:\Java\jdk1.8
    在这里插入图片描述

    五、安装Appium

    官网地址 http://appium.io/
    在这里插入图片描述
    点击下载按钮会到GitHub的下载页面,选择对应平台下载
    在这里插入图片描述
    Windows就选这个(快捷下载)

    安装完成后,启动Appium,host和port默认的即可,然后编辑下配置信息
    在这里插入图片描述
    在这里插入图片描述
    然后点下边那个保存并重启的按钮,然后点第一个Start Server按钮,将会看到
    在这里插入图片描述
    如果使用真机测试,插上手机就可以开始编写脚本测试了。但是呢,由于手边没有数据线,就采用模拟器了,所以有了下一节。

    六、安装模拟器

    这里使用的是夜神模拟器下载地址 https://www.yeshen.com/,之所以不用Android自带的,是因为记得多年前启动一次要好久,然后就再也没用过。
    这个也没有什么好说的,也是注意一下安装路径,然后一路下一步就好了。
    安装完成后要进行一下简单修改:

    1. 打开安装目录,进入到bin目录(比如:D:\Nox\bin
    2. 把第三节里安装好的Android SDK里的adb.exe文件(比如我的在D:\Android\SDK\platform-tools目录下)复制到该目录覆盖掉该目录已存在的adb.exe文件
    3. 删掉该目录的nox_adb.exe文件,再复制一份adb.exe并重命名为nox_adb.exe
    4. 启动模拟器
    5. 再该目录打开控制台,执行nox_adb.exe connect 127.0.0.1:62001,然后执行adb devices,看到如下信息就表示成功了在这里插入图片描述
    6. 在模拟器里安装测试apk文件,这里以一个计算器为例,直接将apk文件拖到模拟器里即可在这里插入图片描述
    7. 继续在刚刚的控制台窗口里输入aapt dump badging D:\apk\com.youdao.calculator-2.0.0.apk,其中D:\apk\com.youdao.calculator-2.0.0.apk是测试apk的完整路径。
      在这里插入图片描述
      可以看到安装包的信息都打印出来了,记录下红框里这两个名称,待会儿写测试脚本的时候要用。
      注意,如果模拟器重启了,需要执行第5步的nox_adb.exe connect 127.0.0.1:62001

    七、编写测试脚本并生成测试报告

    1. 创建测试用例目录testcase,在该目录下创建test_app.py文件

      import time
      import unittest
      
      from appium import webdriver
      
      
      class MyTests(unittest.TestCase):
          # 测试开始前执行的方法
          def setUp(self):
              desired_caps = {'platformName': 'Android', # 平台名称
                              'platformVersion': '4.4.2',  # 系统版本号
                              'deviceName': '127.0.0.1:62001',  # 设备名称。如果是真机,在'设置->关于手机->设备名称'里查看
                              'appPackage': 'com.youdao.calculator',  # apk的包名
                              'appActivity': 'com.youdao.calculator.activities.MainActivity'  # activity 名称
                              }
              self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)  # 连接Appium
              self.driver.implicitly_wait(8)
      
          def test_calculator(self, t=500, n=4):
              """计算器测试"""
              time.sleep(3)
              window = self.driver.get_window_size()
              x0 = window['width'] * 0.8  # 起始x坐标
              x1 = window['width'] * 0.2  # 终止x坐标
              y = window['height'] * 0.5  # y坐标
              for i in range(n):
                  self.driver.swipe(x0, y, x1, y, t)
                  time.sleep(1)
              self.driver.find_element_by_id('com.youdao.calculator:id/guide_button').click()
              for i in range(6):
                  self.driver.find_element_by_accessibility_id('Mathbot Editor').click()
                  time.sleep(1)
      
              btn_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.widget.DrawerLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout[3]/android.view.View/android.widget.GridView/android.widget.FrameLayout[{0}]/android.widget.FrameLayout'
              self.driver.find_element_by_xpath(btn_xpath.format(7)).click()
              self.driver.find_element_by_xpath(btn_xpath.format(10)).click()
              self.driver.find_element_by_xpath(btn_xpath.format(8)).click()
              time.sleep(3)
      
          # 测试结束后执行的方法
          def tearDown(self):
              self.driver.quit()
      
      
    2. 创建run.py文件

      import os
      import time
      import unittest
      
      from HTMLTestRunner import HTMLTestRunner
      
      test_dir = './testcase'
      discover = unittest.defaultTestLoader.discover(start_dir='./testcase', pattern="test*.py")
      
      if __name__ == "__main__":
          report_dir = './test_report'
          os.makedirs(report_dir, exist_ok=True)
          now = time.strftime("%Y-%m-%d %H-%M-%S")
          report_name = '{0}/{1}.html'.format(report_dir, now)
      
          with open(report_name, 'wb')as f:
              runner = HTMLTestRunner(stream=f, title="测试报告", description="本测试报告内容包含超级计算器的简单测试")
              runner.run(discover)
      
      

      导出测试报告用到了HTMLTestRunner,但是Python3的好像有问题,在网上找了两个修改后支持Python3的, 需要的话可以在本文尾部的示例项目中下载。

    3. 运行run.py文件
      等程序运行完之后即会在test_report目录下生成测试报告
      在这里插入图片描述
      在这里插入图片描述
      在浏览器里打开即可看到报告内容,示例
      在这里插入图片描述
      到此,全部完成。如果有空的话可以再补充下Appium的使用,比如元素定位之类的,希望本文能帮到初学自动化测试的同学。
      项目示例下载地址 https://github.com/lixk/apptest
      艾玛,罗嗦这么多,都八点了还没吃晚饭,好饿,今天就先到这里了。


    2019/5/21 补充

    如果配置跟上边那几步都一致,确实没问题,结果不能正常运行。那么问题可能出在模拟器配置。下边补充下我这边的模拟器配置。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    代码中的'platformVersion': '4.4.2'就是上图中的Android版本。

    如果还是有许多人跑不起来,接下来可以考虑抽空录个操作视频,哈哈哈。

    展开全文
  • 一,为什么是Appium借一张图:1.1 Appium优点l 开源l 跨架构:NativeApp、Hybird App、Web Appl 跨设备:Android、iOS、Firefox OSl 不依赖源码l 使用任何WebDriver 兼容的语言来编写测试用例。比如 Java, ...

    一,为什么是Appium

    借一张图:


    1.1 Appium优点

    l  开源

    l  跨架构:NativeApp、Hybird App、Web App

    l  跨设备:Android、iOS、Firefox OS

    l  不依赖源码

    l  使用任何WebDriver 兼容的语言来编写测试用例。比如 Java, Objective-C, JavaScript with Node.js, PHP, Python, Ruby, C#, Clojure, 或者 Perl.

    l  不需要重新编译APP

     

    1.2 Appium理念

    l  你无需为了自动化,而重新编译或者修改你的应用。

    l  你不必局限于某种语言或者框架来写和运行测试脚本。

    l  一个移动自动化的框架不应该在接口上重复造轮子。(WebDriver)

    l  无论是精神上,还是名义上,都必须开源。

     

    1.3 Appium架构

    借一张图:


    iOS: 苹果的UIAutomation
    Android 4.2+: Google的UiAutomator
    Android 2.3+: Google’s Instrumentation. (由单独的项目Selendroid提供支持 )

    Appium 1.6版本以上增加了UiAutomator2

    为了满足上面跨平台,把这些三方框架封装成一套API —— WebDriver Api(客户端到服务端的协议)

    事实上 WebDriver 已经成为 web 浏览器自动化的标准,也成了 W3C 的标准 —— W3CWorking Draft,所以Appium在原有基础上扩充了移动自动化相关的API。

    投资 WebDriver 意味着你可以押宝在一个已经成为标准的独立,自由和开放的协议。你不会被任何专利限制。

    核心架构:Appium使用C/S架构,运行时候Service端会监听Client端发送的命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP 响应中返还给客户端。

     

    基于这架构可以做什么?

    可以用任何实现了该客户端的语言来写测试代码

    可以把服务端放在不同的机器上

    可以只写测试代码,然后利用类似Testin 云服务解决方案来解释命令.

     

    二,Appium环境搭建

    需要用到的软件如下:

    1. jdk-8u121-window(32位的就下载32位的,64位的就下载64位的)。

    2.Android-sdk_r24.3.4-windows(下载这个adt-bundle-windows-x86-20140624)

    3.Python:(V3.6也可以)

    4.appium:1.4.13.1

    5.Node.js:node-v4.4.7-x64

    6.Appium-python-Client

    7.pycharm

    其中1-5是可以先下载的,6则需要在完成前面的五个步骤后才进行,7为可选Ide工具。

    2.1 JDK

    下载好jdk直接点下一步就可以了,然后开始配置变量,参考如下路径:http://jingyan.baidu.com/article/d45ad148ba5ab169552b80d3.html

     注意:

    classpath值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 

    path值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;是有“.”这个符号的不能漏掉

    按快捷键win+r,在运行内输入cmd,并输入Java,回车,如果出来的是些用法中文,那说明这是正确的,在接下来输入javac,回车,如果出现些用法中文,说明是环境变量配好了。

     

    2.2 下载SDK

    http://www.androiddevtools.cn/

    直接下载adt/Android studio完美集成,下载好后并进行解压,然后开始配置三个变量:

    1.解压adt集成包到合适的路径下面,比如D:\adt\

    2.设置安卓环境变量

    配置环境变量,

    设置ANDROID_HOME系统变量为你的android SDK路径,并把tools和platform-tools两个目录加入到系统的Path路径里。

    eg:添加变量名:ANDROID_HOME 变量值: D:\adt\sdk

    并把这句添加到 %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools记得要加上";"

    配置完环境后,可以在运行cmd后输入 adb(能看到当前版本号),再输入android-h(tools目录下的,如果出来一堆文字则是可以的) 

     

    2.3 安装python

    进入官网或百度下载python下载好后安装到所需安装路径,如在D盘中新建一个python文件夹,如d:\python34

    安装完成后将D:\python和D:\python\Scripts,添加到环境变量path下

    打开cmd输入python,出现版本号,然后输入print("helloworld!")这样python就是安装好了。

     

    2.4 安装node.js

    进入官网地址并下载:https://nodejs.org/en/download/

    下载后一路傻瓜式安装,安装完成后,运行cmd,输入node –v查看版本号,然后输入npm 

     

    2.5 安装appium服务端

    方法一:进入官网地址并下载

    https://bitbucket.org/appium/appium.app/downloads/

    完整安装带UI的appium,可以从官网直接下载dmg(mac)或者zip(Windows),运行里面的app即可。

    appium安装好后:

    找到这个文件安装目录D:\appium\node_modules\.bin

    将上面的地址添加到环境变量path下;

     

    方法二node.js包管理安装

    npm install -g appium

    appium –v

    npm install -g appium-doctor

    appium-doctor

    命令安装的appium是控制台程序,没有UI界面。可到github搜索appium的appiumDesktop项目中下载最新版本

    但是由于GFW关系,此方法会在安装过程中卡住或是直接报错,解决办法:挂VPN代理FQ;为了满足国内开发人员的需要,淘宝npm镜像cnpmjs.org可替代官方版本。打开输入:

     

    npm install -g appium --registry=https://registry.npm.taobao.org

    方法三:百度pan

    直接下载appiumGUI界面安装包,下载地址:https://pan.baidu.com/s/1jGvAISu#list/path=%2FWindows最新版本是AppiumForWindows_1.4.16.1.zipMacOS最新版本是appium1.5.3.dmg。笔者以windows为例,下载的AppiumForWindows_1.4.16.1.zip 进行解压安装,启动appium,弹出错误提示框

    很容易在网上查到错误原因,因为node.js需要.NETFramework框架的支持,所以在这里需要安装net framework4.5。当.net framework 4.5安装完成,再次启动Appium

     

    打开appium

     

    appium安装好后:

    找到这个文件安装目录D:\appium\node_modules\.bin

    将上面的地址添加到环境变量path下;

     

    Tips:检查appium的所有需求环境

    npm install -g appium-doctor

    appium-doctor

    打开cmd,输入appium-doctor,检查环境是否OK,出现allchecks were successful,说明环境OK;

     

    2.6 安装Appium-Python-Client

    进入cmd 输入:pip install Appium-Python-Client。通过Python安装等待安装完成。

    如果从官方的资源库下载AppiumPythonClient失败,请自行更换下载源重新下载。在命令行输入"pip install Appium-Python-Client -ihttp://pypi.douban.com/simple"重试 

     

    Tips:检查selenium版本3.3.3

    安装 Appium-Python-Client 的同时会安装一个selenium模块.试着进入python3交互命令行,然后执行下面命令:

    import selenium

    selenium.__version__

     

    如果你显示的 selenium 版本是当前最新版本3.3.3的话,那么最好使用下面命令将版本装成3.0.2,网传某些Api的话会报错。

    pip3 install -I selenium==3.0.2

     

    2.7 安装pycharm

    安装流程参考:http://www.jianshu.com/p/042324342bf4

    需要激活可以购买正版或网上搜索激活码。

     

    三,简单自动化测试用例编写

    3.1 新建Python unit test文件

    新建Python unit test类型文件,对test类补充setup及teardown函数

    对类MyTestCase添加setUp函数(这是测试用例执行前的准备动作,负责告诉appium监听那个端口、与那个手机连接、安装那个应用等信息)

     

    对类MyTestCase添加TearDown函数(这是测试用例执行结束后的动作,可以执行保存执行结果等操作)

     

    3.2 编写测试用例

    简单实例点位两个控件,执行点击事件

    # MyTestCase.py

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    
    import unittest
    import selenium
    import time
    from appium import webdriver
    
    class MyTestCase(unittest.TestCase):
    
        @classmethod
        def setUp(self):
            # super().setUp()
            print('selenium version = ', selenium.__version__)
            desired_caps = {}
            desired_caps['platformName'] = 'Android'
            desired_caps['platformVersion'] = '4.4'
            desired_caps['deviceName'] = '192.168.1.54:5555'
            desired_caps['appPackage'] = 'com. xx'
            #desired_caps['app'] = 'F:// debug.apk'
            desired_caps['appActivity'] = 'com.xx.MainActivity'
            self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    
    
        def test_something(self):
            print('test_something click ------ ')
    
            # xpath:
            time.sleep(2)
            self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.TextView[contains(@text,'测试')]").click()
    
            # uiautomator -UiSelector:
            # name方式在1.5版本后已废除,能找到接口,不可使用,使用new UiSelector().text替代
            # self.driver.find_element_by_android_uiautomator("newUiSelector().text(\"测试\")").click()
    
            # class_name - child:
            # items =self.driver.find_elements_by_class_name('android.widget.TextView')
            # items[1].click()
    
            # id:
            time.sleep(2)
            self.driver.find_element_by_id('com.hisense.vod:id/test_video_resize').click()
    
        @classmethod
        def tearDown(self):
            time.sleep(5)
            print('tearDown ------ ')
            self.driver.quit()
    
    
    if __name__ == '__main__':
        unittest.main()

    四,踩坑

    1 selenium版本3.3.3兼容性

    安装 Appium-Python-Client 的同时会安装一个selenium模块.试着进入python3交互命令行,然后执行下面命令:

    import selenium

    selenium.__version__

    结果


    如果你显示的 selenium 版本是当前最新版本3.3.3的话,那么最好使用下面命令将版本装成3.0.2

    pip3 install -I selenium==3.0.2

    否则的话,在使用Appium-Python-Client的某些Api的话会报错.应该是版本兼容性的问题,3.11已修复的。

    2 findElementByName无效.

    Searching by name was deprecated over ayear ago and removed from 1.5. In general, searching by accessibility id isbetter for a variety of reasons.

    如上findElementByName这个方法从Appium 1.5之后删除了,但是API不经能找到并且也没提示过时,这不坑爹嘛。后来使用下面的代码才解决用name,即text查找元素的方法。

    java:

    1

    2

    String query = "new UiSelector().textContains" + "(\"" + locator.value + "\")";

    webElements = mDriver.findElementsByAndroidUIAutomator (query);

    Python:

    self.driver.find_element_by_android_uiautomator("newUiSelector().text(\"测试\")").click()

    3 据说Appium 1.6.3可以查找 Toast 的信息了.

    试了下网上的例子发现不好使,一度以为是Client版本的问题。搞了半天才发现需要加下面的代码:

    java:

    1

    capabilities.setCapability (MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);

    4 安装的时候重新签名

    无意中发现测试的时候弹Toast报错,然后直接编译安装却不保存,猜测是不是在安装过程中Appium改了啥,看了下Service日志,竟然在安装的时候重新签名…

    App not signed with debug cert.

    2017-02-13 18:17:19:848 - info: [debug] [ADB] Resigning apk.

    2017-02-13 18:17:23:938 - info: [debug] [ADB] Zip-aligning 'app-debug.apk'

    2017-02-13 18:17:24:104 - info: [AndroidDriver] Remote apk path is /data/local/tmp/463eb03788048b4a1dacfe28545ee76e.apk

    解决方法:

    java:

    capabilities.setCapability(AndroidMobileCapabilityType.NO_SIGN, true);

     

    展开全文
  • Appium简介

    万次阅读 2018-03-25 14:25:00
    为什么选择Appium Appium是一个自动化测试开源工具,支持iOS和android平台上的移动原生应用、移动Web应用和混合应用。Appium是一个跨平台工具,它允许测试人员使用同样的接口、基于不同的平台写自动化测试代码,...

    为什么选择Appium

    Appium是一个自动化测试开源工具,支持iOS和android平台上的移动原生应用、移动Web应用和混合应用。Appium是一个跨平台工具,它允许测试人员使用同样的接口、基于不同的平台写自动化测试代码,大大增加了测试套件间代码的复用性。
    - 移动原生应用:是指那些用iOS或者android sdk写的应用;
    - 移动web应用:是指那些使用移动浏览器访问的应用,appium支持iOS的safari和android上的chrome;
    - 混合应用:是指原生代码封装在网页视图(原生代码和web内容交互)。

    Appium的理念

    1. 无需为了自动化,而重新编译或者修改我们的应用;
    2. 不必局限于某种语言或者框架来写和运行测试脚本;
    3. 一个移动自动化的框架不应该在接口上重复造轮子;
    4. 无论精神上,还是名义上,都必须要开源。

    Appium的设计

    • Appium的真正的工作引擎是第三方自动化框架,不需要在本身应用里植入appium特定或者第三方代码。
      iOS:苹果的UI Automator框架
      Android 4.2+:Google的UI Automator框架
      Android 2.3+:Google的UI Instrumentation框架
    • Appium把这些第三方框架封装成一套API,即WebDriver API。
    • Appium扩充了WebDriver的协议,在原有的基础上添加自动化相关的API方法。

    Appium的相关概念

    1. C/S架构
      Appium的核心是一个Web服务器,它提供了一套REST的接口。它接收到客户端的连接、监听的命令,接着在移动设备上执行这些命令,然后将执行的结果放在HTTP响应中返还给客户端。
    2. Session
      自动化总是在一个session的上下文中运行,客户端初始化一个和服务端交互的session。客户端发送一个附有desired capabilities的JSON对象参数的POST请求“/session”给服务器,服务端就会开始一个自动话的session,然后返回一个session ID,客户端拿到这个ID后就用这个ID发送后续的命令。
    3. Desired Capabilities
      Desired Capabilities是一些键值对。客户端将这些键值对发给服务端,告诉服务端我们想要启动怎样的自动化session。
    4. Appium server
      Appium server是用nodejs写的,我们可以源码编译或者从NPM直接安装。
    5. Appium服务端
      Appium服务端有很多语言库Java,Ruby,Python,PHP,JavaScript,C#等,这些库实现了对WebDriver协议的扩展。使用Appium的时候,只需使用这些库代替常规的WebDriver库就可以了。
    6. Appium.app,Appium.exe
      Appium提供了GUI封装的Appium server下载,它封装了运行Appium server的所有依赖元素。而且这个封装包含了一个Inspector工具,可以让使用者检查应用的界面元素层级。

    Appium的环境部署

    详细查看Appium-安装篇,Appium-Android开发环境。
    提示:Appium Android系统运行要求:Java 7及以后版本,Android SDK API17以上版本,Android虚拟设备或者真实手机设备。

    展开全文
  • appium是什么

    2019-03-22 18:14:14
    什么是Appium 这是一个开源的自动测试框架,可以用它来操控app,测试app功能的完美性。当然,它的作用远不止这些。如果你高兴,可以用它来收能量,签到,甚至是游戏自动化。正式学习之前 ,我希望你能明白下面Appium...
  • Appium

    千次阅读 2018-10-11 15:53:25
    使用Appium进行自动化测试 Appium简介 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。 它使用WebDriver协议驱动iOS,Android和Windows应用程序。 appium通过对布局的检测实现控件...
  • Appium 介绍

    2018-11-15 13:36:53
    Appium 是一个开源工具,用于自动化 iOS 手机 、 Android 手机和 Windows 桌面平台上的原生、移动 Web 和混合应用。“原生应用”指那些用 iOS 、 Android 或者 Windows SDK 编写的应用。“移动 web 应用”是用移动端...
  • appium原理

    千次阅读 2018-07-22 20:11:20
    一、什么是Appium Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、...
  • 在上篇文章Appium执行示例中把Appium的日志保存在了本地,接下来分析一下,Appium到底是如何工作的,打开保存在本地D盘的log日志文件开始分析 1.Appium服务启动默认端口为4723,这个端口是可以在启动Appium服务时...
  • Appium的工作原理,我们为什么要选择appium呢? 我们为什么要选择appiumAppium他是开源的,跨平台的,appium能做什么呢,它可以做自动化,不像有的工具一样,它只能做原生的,appium可以做原生的,也可以做混合的...
  • 这篇,我们开始来一个实战练习,如何通过appium自动把电脑上一个安卓程序包给安装到一台安卓手机中。在写脚本之前,我们需要统一下方法和工具。我们知道Appium和selenium一样都支持Java和Python,当然还有其他几个...
  • 很高兴最近论坛用appium的人多了不少,但也有不少由于不了解appium导致出现错误后不知道从何下手。这里根据我的个人经验给出一个简单的查错指南,不保证能解决所有错误,但至少让你知道你应该朝哪个方向去解决。 ...
  • 大家好,appium环境搭建的时候,我选的是使用npm安装appium,但我在使用过程中,发现这样安装的appium没有界面,都是需要通过命令行操作,对于我来说,有点吃力。最后,还是觉得初学就先用桌面版的会比较好。所以我...
  • appium(一)入门appium过程总结 通过2天的学习,终于跑起了一个公司的Android的app,下面做一些总结。 ##########配置环境########## 第一步:安装java环境(需要配置环境变量) 第二步:安装node.js(需要配置环境...
  • 其实Selenium也支持手机端的自动化测试,最近越来越多公司手机端自动化测试采用Appium,所以作为一个懂点代码和会一点自动化测试的人来说,很有比较学习一下Appium的基本操作。如果你有Selenium编写自动化测试脚本...
  • 1appium-desktop启动模拟器adb命令超时失败 2.使用appium-server启动没有问题 报错如下: ``` [Appium] Welcome to Appium v1.15.0 [Appium] Non-default server args: [Appium] allowInsecure: { ...
  • Appium的不同版本有不同的叫法: 以2015 年底为界限,之前叫Appium-Server,之后叫 Appium-desktop 当然, Appium-Server当前仍然是可用的。 Appium-Server <----------------- 2015 年底 -----------------> ...
  • Appium Desktop 连接APP 使用总结 Appium安装方法此处不写了,只是总结最近学习使用到的Appium Desktop方法,第一次再CSDN总结记录学习内容~~~~~ 一:手机连接(我这里使用安卓手机) 手机通过数据线连接电脑USB口,...
1 2 3 4 5 ... 20
收藏数 22,671
精华内容 9,068
关键字:

appium