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如何模拟手机滑动、...
  • 安装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+Python自动化测试

    2020-05-11 09:42:06
    学习Appium+Python自动化测试 帮助你快速搭建Appium自动化测试框架,包括PO模型框架和关键字模型框架,用最少的时间,达成最大的效果。
  • Appium

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

    使用Appium进行自动化测试

    Appium简介

    • Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。
      它使用WebDriver协议驱动iOS,Android和Windows应用程序。

    • appium通过对布局的检测实现控件点击/滑动/输入等事件,因此需要定位控件位置非常精确,否则就会停止工作。

    • 支持多种语言,java、python、php、Ruby等等

    • 如果你有selenium经验,直接上手

    • 我们的电脑(client)上运行自动化测试脚本,调用的是webdriver的接口,appium server接收到我们client上发送过来的命令后他会将这些命令转换为UIautomator认识的命令,然后由UIautomator来在设备上执行自动化,由客户端(Appium Client)和服务器(Appium Server)两部分组成,客户端与服务器端通过JSON Wire Protocol进行通信。

    平台支持

    为什么使用appium

    在进行UI功能测试时,经常需要对某个test case重复进行以复现某个bug或检测功能是否稳定,一个test case通常包含某几个固定的点击/滑动/输入事件,如果使用自动化测试控制手机模拟test case中的操作,那么应该可以减少工作量。

    缺陷

    1. 自动化测试的最大弊端是沒有应对措施,appium可以重复进行操作,但是缺少灵活性,人为操作时可以进行精细化的控制,比如输入不同的文字/在等待的同时进行其他操作等等,因此appium只适合固定重复操作的场景。

    2. appium对手机的控制使用的是python脚本,因此需要再次开发。

    安装及配置环境

    参考

    环境依赖

    • Node.js
    • Appium
    • Appium-desktop
    • Appium-doctor
    • Appium-Python-Client
    • Python
    • JDK
    • Andriod SDK

    安装Node.js

    下载地址:https://nodejs.org/en/download/releases/

    Appium 安装

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

    安装Appium-desktop

    下载地址:https://github.com/appium/appium-desktop/releases

    上面提到的问题可以使用前面我们已经介绍了Appium Server来解决,Appium-desktop工具其实也封装了Appium server和Node.js依赖环境。可以直接安装Appium-desktop就不需要重复安装上面的环境。

    python环境安装配置

    参考python官网或者使用Anaconda/MiniConda

    安装Appium-Python-Client

    通过命令: pip install Appium-Python-Client 进行安装。

    输入命令“from appium import webdriver” 回车,如果控制台没有报错,则说明安装成功。

    JDK安装配置

    jdk下载地址:

    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    jdk环境变量配置

    http://jingyan.baidu.com/article/624e74599e8ad834e8ba5a94.html

    Andriod sdk 安装

    下载地址:
    http://tools.android-studio.org/index.php/sdk

    安装 appium-doctor

    appium-doctor可以检测Appium整体依赖环境配置情况。

    cnpm install appium-doctor -g
    

    在控制台输入命令:appium-doctor 看到如下提示说明整体环境配置成功。

    C:\Users\Tao Zhou>appium-doctor
    info AppiumDoctor Appium Doctor v.1.4.3
    info AppiumDoctor ### Diagnostic starting ###
    info AppiumDoctor  ✔ The Node.js binary was found at: D:\Program Files\nodejs\node.exe
    info AppiumDoctor  ✔ Node version is 8.11.3
    info AppiumDoctor  ✔ ANDROID_HOME is set to: C:\Android\sdk
    info AppiumDoctor  ✔ JAVA_HOME is set to: C:\Program Files\Java\jdk1.8.0_171
    info AppiumDoctor  ✔ adb exists at: C:\Android\sdk\platform-tools\adb.exe
    info AppiumDoctor  ✔ android exists at: C:\Android\sdk\tools\android.bat
    info AppiumDoctor  ✔ emulator exists at: C:\Android\sdk\tools\emulator.exe
    info AppiumDoctor  ✔ Bin directory of %JAVA_HOME% is set
    info AppiumDoctor ### Diagnostic completed, no fix needed. ###
    info AppiumDoctor
    info AppiumDoctor Everything looks good, bye!
    info AppiumDoctor
    

    如果上面某一项显示为“X”则说明相关环境没有配置好,需要重新安装配置。

    Appium capability参数配置简介

    什么是Capability

    desired capability的功能是配置Appium会话。他们告诉Appium服务器您想要自动化的平台和应用程序。

    Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的值。(如:”platformName”: “Android”)Desired Capabilities主要用于通知Appium服务器建立需要的Session。

    Session

    Appium的客户端和服务端之间进行通信都必须在一个Session的上下文中进行。客户端在发起通信的时候首先会发送一个叫作“Desired Capabilities”的JSON对象给服务器。服务器收到该数据后,会创建一个session并将session的ID返回到客户端。之后客户端可以用该session的ID发送后续的命令。

    常用Capability配置

    Capability官方完整文档

    公用Capability
    在这里插入图片描述

    Android独有Capability

    avatar

    desired capability参数json

    • platformName - 设备平台
    • platformVersion - Android版本
    • deviceName - 真机是adb devices给出的id,模拟器是ip
    • appPackage - 应用的包
    • appActivity - 启动应用的activity
    • noReset - 不重置应用状态,默认为false,会导致应用清除数据

    {
    “platformName”: “Android”,
    “platformVersion”: “8.0.0”,
    “deviceName”: “d25bb163”,
    “appPackage”: “us.zoom.videomeetings”,
    “appActivity”: “com.zipow.videobox.LauncherActivity”,
    “noReset”: true
    }

    Inspector元素获取

    启动成功之后就可以使用 Inspector来进行元素空间获取了。

    注意:默认的元素定位有一些不准,需要切换到第二个坐标点定位选项后再切换回来才能准确定位。

    代码演示

    通过使用脚本可以实现循环发送消息的功能

    #coding=utf-8
    import os, subprocess
    from time import sleep
    
    import unittest
    
    from appium import webdriver
    from appium.webdriver.common.touch_action import TouchAction
    from appium.webdriver.connectiontype import ConnectionType
    
    class SimpleAndroidTests(unittest.TestCase):
        # 首先需要在setup中定义capability参数,和之前是差不多的,这里多了unicodeKeyboard和resetKeyboard是为了禁用输入法,便于后面使用sendkeys
        def setUp(self):
            desired_caps = {}
            desired_caps['unicodeKeyboard']='True'
            desired_caps['resetKeyboard']='True'
            desired_caps['platformName'] = 'Android'
            desired_caps['platformVersion'] = '8.0.0' # 8.0.0 / 6.0.1
            desired_caps['deviceName'] = 'd25bb163' # d25bb163 / 4200024cee07b3b3 / 3d22a523
    
            desired_caps['appPackage'] = 'us.zoom.videomeetings'
            desired_caps['appActivity'] = 'com.zipow.videobox.LauncherActivity'
            # desired_caps['app'] = r'C:\Users\Tao Zhou\zoom.5.1.25288.0824.apk'
            desired_caps['noReset'] = 'True'
    
            self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    
        # 定义一个发送消息的方法,通过self.driver.find_element_by_xpath和self.driver.find_element_by_id找到布局按钮或输入框,
        # 使用self.driver.implicitly_wait(1)实现等待,因为某些布局加载需要时间,也可以使用异常捕捉来取代全局等待
        def sendMsg(self, msg = 'hahahhah'):
            
            self.driver.find_element_by_xpath('//android.widget.RelativeLayout[@content-desc="联系人选项卡。"]').click()
    
            self.driver.find_element_by_id('us.zoom.videomeetings:id/btnSearch').click()
            self.driver.implicitly_wait(1)
            
            self.driver.find_element_by_id('us.zoom.videomeetings:id/edtSearch').send_keys('tao')
            self.driver.implicitly_wait(1)
    
            self.driver.find_element_by_id('us.zoom.videomeetings:id/txtTitle').click()
            self.driver.implicitly_wait(3)
    
            self.driver.find_element_by_id('us.zoom.videomeetings:id/edtMessage').send_keys(msg)
            self.driver.implicitly_wait(1)
            
            self.driver.find_element_by_id('us.zoom.videomeetings:id/btnSend').click()
            self.driver.back()
            self.driver.back()
        
        # 所有以test开头的方法都视为一个用例,脚本会直接从这个方法进入,那么可以使用一个for循环执行发送消息20次
        def test_login(self):
    
            self.driver.implicitly_wait(5)
    
            self.driver.find_element_by_xpath('//android.widget.RelativeLayout[@content-desc="电话标签。"]').click()
    
            self.driver.find_element_by_xpath('//android.widget.RelativeLayout[@content-desc="联系人选项卡。"]').click()
    
            self.driver.implicitly_wait(2)
    
            self.driver.back()
            self.driver.implicitly_wait(2)
    
            for i in range(20):
                SimpleAndroidTests.sendMsg(self, "hahha %d" % i)
    
    if __name__ == '__main__':
        # deviceId = 'd25bb163'
        # subprocess.Popen("adb uninstall us.zoom.videomeetings")
        # appiumServer = subprocess.Popen("appium -U%s --no-reset" % deviceId, shell=True)
        # sleep(5)
        suite = unittest.TestLoader().loadTestsFromTestCase(SimpleAndroidTests)
        unittest.TextTestRunner(verbosity=2).run(suite)
    

    元素定位

    • id
    • name
    • class
    • List定位
    • 相对定位
    • Xpath定位
    • H5页面元素定位
    • Uiautomator定位

    一般常用xpath和id,定位比较准确,而且可以配合Inspector使用,直接找到对应的控件的id或xpath

    展开全文
  • appium是什么

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

    万次阅读 多人点赞 2019-05-11 11:14:54
    Appinum前置知识 app类型和区别 1556603587000 Andriod SDK 元素获取—UI Automator ...adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。...
  • Appium国内下载地址 :...最新更新的是: AppiumDesktop_1.2.7 TesterHome官方百度网盘:http://pan.baidu.com/s/1jGvAISu Appium各版本更新日志:https://github.com/appium/appium/releases/以及https://discu...
  • appium安装

    千次阅读 2019-06-09 14:30:06
    Appium是开源的自动化测试框架,主要用于iOS,Android以及Windows apps等移动平台的自动化测试。官网的介绍说是它实现一套适用于移动端的WebDriver协议,所以使用Appium时用的还是依赖于Selenium,和Web自动化测试的...
  • 其实Selenium也支持手机端的自动化测试,最近越来越多公司手机端自动化测试采用Appium,所以作为一个懂点代码和会一点自动化测试的人来说,很有比较学习一下Appium的基本操作。如果你有Selenium编写自动化测试脚本...
  • appium

    2016-12-21 19:47:21
    localhost:~ zhudongyue$ appium-doctor --ios info AppiumDoctor Appium Doctor v.1.2.5 info AppiumDoctor ### Diagnostic starting ### info AppiumDoctor ✔ Xcode is installed at: /Applications/Xcode....
  • appium框架之bootstrap

    万次阅读 2015-01-08 22:13:35
    (闲来无事,做做测试..)
  • Appium Desktop

    千次阅读 2019-06-11 20:49:29
    文章来自github:github.com/appium/appium-desktop 前言:本篇文章并非我的原创...Appium Desktop是一款用于Mac、Windows和Linux的开源应用,它提供了Appium自动化服务器在一个漂亮灵活的UI中的强大功能。它是一些...
  • appium简明教程

    千次阅读 2017-03-14 13:32:54
    appium简明教程(转) 乙醇的自动化教程写的挺好的,以下是转自他的cnblogs上面的博客 appium简明教程(1)——appium和它的哲学世界 什么是appium? 下面这段介绍来自于appium的官网。 Appium ...
  • appium 事件监听

    千次阅读 2017-05-01 12:04:12
    在网上搜了好久也没找到关于appium 事件监听的实例,然后在查看appium Java client 官方例子看到了相关的用法,于是决定研究一下,发现挺好用的,希望能分享出来给大家一点点帮助
  • From:... 本编教程从 appium 的环境配置开始,到抓取手机 app 微信朋友圈结束。 知乎:https://zhuanlan.zhihu.com/p/41311503 GitHub:https://github.com/FanShuixing/git_webspide...
  • Appium_12_并发

    千次阅读 2018-09-14 13:56:03
    启动多个Appium服务 前面课程只是启动了单个appium服务,只能控制单台设备。如果需要针对多台设备测试那么该如何处理? 首先看下面两个启动appium服务案例。 启动appium服务1 C:\Users\Shuqing&gt;appium -p...
  • appium客户端1.3.1

    2020-07-21 09:57:03
    appium客户端 客户端类库列表及Appium服务端支持 这些类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON 格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。 Appium客户端...
  • 环境的的搭建 ... 该博客有一套详细的入门教程,奈何时间有点久远有些东西不能用了,但是参考价值还是有滴。 1.安装各种SDK jre必须1.8以上 AndroidSDK需要8.0以下的测试,8.0我测试还不行,环境变量如下图所示 ...
1 2 3 4 5 ... 20
收藏数 25,728
精华内容 10,291
关键字:

appium