精华内容
参与话题
问答
  • Appium

    千次阅读 2018-08-11 13:25:46
    appium国内的应用现状: -国内的推广站点testerhome -appium社区的一些线下活动 Android环境搭建: Eclipse和Java ADT和SDK 模拟器(可选) Appium图形化界面 --------------------------------------------...

    appium官网:http://appium.io/

    appium国内的应用现状:

    -国内的推广站点testerhome

    -appium社区的一些线下活动

    Android环境搭建:

    Eclipse和Java

    ADT和SDK

    模拟器(可选)

    Appium图形化界面

    -----------------------------------------------------------------------

    java -version 查看Java的版本

    1、首先安装Java和Eclipse

    2、打开http://www.androiddevtools.cn/,找到SDK Tools,点击下载。

    Windows下载:installer_r24.4.1-windows.exe

    安装Android SDK,我安装到 D:\Android\android-sdk 目录下。

    3、安装platform-tools

    打开http://www.androiddevtools.cn/,找到SDK Platform-Tools,下载安装包。

    下载 platform-tools_r22-windows.zip,下载完成后解压,放到 D:\Android\android-sdk 里面。

    4、配置环境变量

    添加Android环境变量:变量名 ANDROID_HOME,变量值 D:\Android\android-sdk,点击确定。

    在PATH环境变量中加入:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;  然后保存。

    5、结果检查

    打开命令行,输入:adb

    查看连接设备,输入:adb devices

    -----------------------------------------------------------------------------------

    进入D:\Android\android-sdk目录,打开SDK Manager.exe,安装Tools。

    打开Eclipse,点击Help>Install New Software。

    Work with,输入地址https://dl-ssl.google.com/android/eclipse/,选择Developer Tools,点击Next>Next>Finish。

    安装完成,点击Window,会出现Android SDK Manager、Android Virtual Device Manager。

    -------------------------------------------------------------------------------------

    打开Node.js官网:https://nodejs.org/en/,下载安装node.js。

    打开appium官网:http://appium.io/,点击Download Appium。

    把Node.js和Appium的安装目录都加入到环境变量里面。

    验证:输入命令appium-doctor

    -------------------------------------------------------------------------------------

    下载jar包:

    http://mvnrepository.com/artifact/io.appium/java-client

    展开全文
  • appium

    2018-11-07 14:24:41
    appium 设置变量 home path

    appium
    设置变量
    home path

    展开全文
  • Appium Desktop Appium Desktop is an app for Mac, Windows, and Linux which gives you the power of the Appium automation server in a beautiful and flexible UI. It is a combination of a few Appium-...
  • Appium移动自动化测试

    千人学习 2020-02-09 00:17:59
    3.本课程涵盖知识点:Appium的部署、Appium的工作原理、Capability、Appium常见错误&解决方案、通过微信与QQ应用讲解Appium的知识点:元素定位方法、抓取工具、元素等待、字典整合、Appium如何模拟手机滑动、...
  • Appium使用教程_Android篇

    万次阅读 多人点赞 2016-05-16 16:40:39
    一、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

     

     

     

     

    展开全文
  • 1appium-desktop启动模拟器adb命令超时失败 2.使用appium-server启动没有问题 报错如下: ``` [Appium] Welcome to Appium v1.15.0 [Appium] Non-default server args: [Appium] allowInsecure: { ...
  • 非计算机专业,初学python和appium,需要抓取小红书APP的数据,连接夜神模拟器,但是无法启动APP,一直报错找不到原因,下面放上appium工作日志希望各路大神可以帮帮忙。谢谢大家! ``` [W3C] Calling AppiumDriver...
  • from appium import webdriver import time desired_caps ={ 'platformName':'Android', 'deviceName':'emulator-5554', 'platformVersion':'5.1', 'appPackage':'com.android.contacts', 'appActivity':'....
  • 环境: * 电脑:win 7 64位 * python 3.5 * PyCharm Community Edition ...* 奇怪的是使用appium-desktop-Setup-1.5.0-ia32.exe启动appium,运行pycharm,启动模拟器上APP,却不报错,找不到原因,求大神分析一下!
  • cmd 输入appium报错 (https://img-ask.csdn.net/upload/201612/25/1482681491_16283.png) _cmd输入appium-doctor,运行成功。_ ![图片说明](https://img-ask.csdn.net/upload/201612/26/1482681626_40792.png) 打开...
  • appium客户端1.3.1

    2018-03-27 18:20:44
    appium客户端 客户端类库列表及Appium服务端支持 这些类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON 格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。 Appium客户端...
  • Appium-mac-1.17.1.dmg

    2020-07-03 20:53:06
    Appium-mac-1.17.1.dmg appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用。 语言/框架 Github地址 Ruby https://github.com/appium/ruby_lib Python ...
  • appium demo

    2019-01-11 15:04:58
    appium 代码示例,这里展示了怎么写一个appium的自动化实例
  • 初学appium,使用python写测试脚本,现在可以安装上app,之后无法自动启动app。 这是我的脚本: #coding=utf-8 from appium import webdriver from lib2to3.pgen2.driver import Driver from lib2to3.tests.support ...
  • Appium简介

    2019-02-28 13:09:37
    什么是Appium Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。 它使用WebDriver协议驱动iOS,Android和Windows应用程序。 官方中文文档 Testerhome中文社区 Appium官网 Appium的优势 ...

    什么是Appium

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

    Appium的优势

    • 可以跨平台同时支持Android、iOS
    • 支持多种语言,java、python、php、Ruby等等

    Appium组件

    • Appium Server
      Appium Server就是Appium的服务端——一个web接口服务,使用Node.js实现。
      安装方式
      npm install -g appium
    • Appium-Desktop
      Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,它以美观而灵活的用户界面为您提供Appium自动化服务器的强大功能。Appium-Desktop是Appium Server的一款图形界面

    • 注意

      Appium Desktop与Appium不同。 Appium Desktop是Appium的图形前端,带有其他工具。 Appium Desktop以其自己的节奏发布,并拥有自己的版本控制系统。 就像国内很多定制的Android系统有自己版本号,但是都是基于一个Android系统版本封装的。版本号不一定与Andriod原生系统版本号一致。如:魅族的flyme6.0系统的内核是Android 5.1

       

      图片.png

       

      图片.png

    • Appium GUI
      Appium GUI是Appium desktop的前身。 也就是把Appium server封装成了一个图形界面,降低了使用门槛。
      该产品的Windows版本在2015年的AppiumForWindows_1_4_16_1.zip之后就停止更新了。目前版本可以使用,但是封装的不是最新的Appium版本,而是1.4.16版本。如果要使用最新的桌面版需要使用Appium Desktop。
    • Appium Clients
      因为Appium是一个C/S结构,有了服务端的肯定还有客户端,Appium Clients就是客户端,它会给服务端Appium Server发送请求会话来执行自动化任务。就像我们浏览器访问网页,浏览器是客户端,通过操作发送请求服务器来获取数据。我们可以使用不同的客户端浏览器(IE,Firefox,Chrome)访问一个网站。 Appium客户端可以使用不同的语言来实现,如Python,java等。具体详见下表:

                           Language/Framework               Github Repo and Installation Instructions
                                   Ruby                  https://github.com/ appium/ruby_lib
                                  Python                  https://github.com/appium/python-client
                                  Java                    https://github.com/appium/java-client
                                 JavaScript (Node.js)                  https://github.com/admc/wd
                                 Objective C                  https://github.com/appium/selenium-objective-c
                                 PHP                  https://github.com/appium/php-client
                                 C# (.NET)                  https://github.com/appium/appium-dotnet-driver
                                 RobotFramework                  https://github.com/jollychang/robotframework-appiumlibrary


       

    Appium-desktop

    Appium-desktop主界面包含三个菜单Simple,Advanced、Presets

    Simple

    • host
      设置Appium server的ip地址,本地调试可以将ip地址修改为127.0.0.1 ,0.0.0.0表示可以接入所有网段
    • port
      设置端口号,默认是4723不用修改
    • start server
      启动 Appium server

       

      图片.png

    Advanced

    高级参数配置修改,主要是一些Android和iOS设备,log路径等相关信息的配置。

    图片.png

    Presets

    将Advanced中的一些配置信息作为预设配置。

    启动Appium

    点击Start Server,启动后控制台提示如下信息,表示Appium启动成功。

    [Appium] Welcome to Appium v1.8.1
    [Appium] Appium REST http interface listener started on 0.0.0.0:4723

    参考资料

    Appium入门简介

    https://github.com/appium/appium-desktop

     

    展开全文
  • from appium import webdriver import time desired_caps ={ 'platformName':'Android', 'udid':'emulator-5554', 'deviceName':'deviceName', 'platformVersion':'5.1.1', 'appPackage':'...
  • appium案例

    2018-06-29 09:22:37
    appium案例,很详细!appium案例,很详细!appium案例,很详细!
  • Appium Essentials

    热门讨论 2015-06-28 19:16:04
    Appium Essentials,appium的具体操作

空空如也

1 2 3 4 5 ... 20
收藏数 17,537
精华内容 7,014
关键字:

appium