zoukankan      html  css  js  c++  java
  • 使用appium+python对android进行自动化测试

    测试环境搭建
    需要用到的软件如下:

    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

    一、其中1-5是可以先下载的,6则需要在完成前面的五个步骤后才进行。

    下载好jdk直接点下一步就可以了,然后开始配置变量,参考如下路径:http://jingyan.baidu.com/article/d45ad148ba5ab169552b80d3.html 注意.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;是有“.”这个符号的不能漏掉

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

    二、下载这个adt-bundle-windows-x86-20140624

    下载好后并进行解压,然后开始配置三个变量:

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

    2.设置安卓环境变量

    配置环境变量,

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

    eg:添加变量名:ANDROID_HOME 变量值: D:adtsdk

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

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

    三安装python

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

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

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

    四、安装node.js

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

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

    五、安装appium

    进入官网地址并下载

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

    下载后一路傻瓜式安装即可。

    appium安装好后,找到这个文件目录D:appiumAppium ode_modules.bin

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

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

    六、安装Appium-Python-Client

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

    Python集成开发环境PyCharm安装
    安装流程参考:http://www.jianshu.com/p/042324342bf4

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

    简单自动化测试用例编写
    一、使用pycharm创建python项目


    选择 pure python项目并选择项目存放目录


    二、在项目中新建unittest文件

    右击项目—New—Python File


    选择python unit test并输入文件名


    三、对unittest补充setup及teardown函数

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


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


    四、在test_something中编写测试用例

    循环10次执行登录操作


    运行测试用例
    一、打开android虚拟机或者连接真机

    打开虚拟机(用到虚拟机的一定是开发人员了,不会开就gg吧)或者连接真机(真机需要开启调试模式)

    二、打开并运行appium

    点击android图标配置信息(这里的信息其实在我们的用例编写时setUp就已经配置过,不过在setUp中的配置可能出现无效的情况,这里就可以根据需要自己配置)


    点击设置图标

    1、 可以对里边的server地址端口进行修改。

    2、 当session不一致时实行覆盖。

    3、 输出log文件方便查看执行的过程及结果。


    点击运行图标,当现实info:Console logLeveL :debug是代表成功运行(此时appium已经与android设备建立连接,当执行用例时就可以通过appium向android设备发送命令了)


    三、运行测试用例

    完成上述几步后,开始运行测试用例

    在python集成开发环境中点击运行按钮(当按钮无效时可能需要选择运行的文件或配置运行设置)


    四、根据报错信息修改测试用例

    1、运行时可能出现页面元素无法找到等问题,可以换一种元素的查找方式

    2、另外休眠时间也需要注意,避免页面还未加载时执行页面元素的点击等操作

    五、查看页面元素

    Appium有自带的页面元素的查看工具

    点击搜索图标—点击刷新(appium的运行按钮与android设备必须为开启状态)


    其他的界面元素查看工具:UI AutomatorViewer(在android sdk 的tools的bin文件夹下)

    Appium运行原理

    测试用例中用到的api
    打印上下文

    driver.contexts

    打印当前上下文

    driver.context

    driver.current_context

    切换上下文

    driver.switch_to.context('WEBVIEW')

    打印页面元素

    driver.page_source

    获取元素text属性

    element.get_attribute('text') Android使用(获取元素的text值)

    element.text iOS使用(获取元素的value值)

    定位

    driver.find_element_by_ios_uiautomation(uia_string)

    driver.find_elements_by_ios_uiautomation(uia_string)

    driver.find_element_by_android_uiautomator(uia_string)

    driver.find_elements_by_android_uiautomator(uia_string)

    例:driver.find_element_by_android_uiautomator('newUiSelector().text("竞彩篮球")')

    driver.find_element_by_accessibility_id(id)(此方法使用的是元素的content-des属性)

    driver.find_elements_by_accessibility_id(id)

    driver.find_element_by_id(id)

    driver.find_elements_by_id(id)(获取的为元素集合使用*[Num]获取子元素)

    driver.find_element_by_xpath(xpath)

    因为webdriver没有xpath全部的库所有只支持两种格式

    1、 self.driver.find_element_by_xpath("//android.widget.EditText[@content-desc='请输入登录密码']")

    2、 self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.EditText")

    driver.find_elements_by_xpath(xpath)

    driver.find_element_by_name(name)

    driver.find_elements_by_name(name)

    driver.find_element_by_class_name(class)

    driver.find_elements_by_class_name(class)

    driver.find_element(by,value)

    by:"id"、"xpath"、"classname"、 "name"、'-ios uiautomation'、'-android uiautomator'、'accessibility id'

    坐标点击

    driver.tap([(x,y)],time)

    滑动

    driver.swipe(x1,y1,x2,y2,time)

    driver.flick(x1,y1,x2,y2)

    输入

    driver.send_keys()

    driver.set_text() Android可用

    driver.set_value() iOS可用

    如果使用sendkeys不行,可以尝试下面两种方法,我在测试ios输入密码框是自定义的键盘时,用sendkeys输入不了,appium服务端log提示没找到keyboard,后面尝试setvalue可以输入。

    截图

    driver.get_screenshot_as_file(filename)

    获取手机屏幕分辨率

    driver.get_window_size()

    x =driver.get_window_size()['width']
    y = driver.get_window_size()['height']

    设置屏幕分辨率

    driver.set_window_size(width,height)

    获取当前坐标位置

    driver.get_window_position()

    滚动

    driver.scroll(ele1,ele2)

    按住element并拖动到另外一个element上

    driver.drag_and_drop(ele1,ele2)

    缩小

    driver.pinch(ele)

    放大

    driver.zoom(ele)

    重启app

    driver.reset()

    隐藏键盘

    driver.hide_keyboard()

    发送键盘事件

    driver.keyevent(keycode)

    按住键盘

    driver.press_keycode(keycode)

    长按住键盘

    driver.long_press_keycode(keycode)

    上传文件

    driver.push_file(path)

    下载文件

    driver.pull_file(path)

    下载文件夹

    driver.pull_folder(path)

    app隐藏后台

    driver.background_app(time)

    安装app

    driver.install_app(path)

    卸载app

    driver.remove_app(app_id)

    启动app

    driver.launch_app()

    关闭app

    driver.close_app()

    启动activity

    driver.start_activity(app_package,app_activity)

    打印当前activity

    driver.current_activity

    锁屏

    driver.lock(time)

    振动

    driver.shake()

    打开通知栏(api 18以上)

    driver.open_notifications()

    获取网络

    driver.network_connection

    设置网络连接( android only.)

    driver.set_network_connection(type)

    Value (Alias) |Data | Wifi | Airplane Mode
    -------------------------------------------------
    0 (None) | 0 | 0 | 0
    1 (Airplane Mode) | 0 | 0 | 1
    2 (Wifi only) | 0 | 1 | 0
    4 (Data only) | 1 | 0 | 0
    6 (All network on) | 1 | 1 | 0

    type参数:

    NO_CONNECTION =0
    AIRPLANE_MODE = 1
    WIFI_ONLY = 2
    DATA_ONLY = 4
    ALL_NETWORK_ON = 6

    fromappium.webdriver.connectiontype import ConnectionType
    driver.set_network_connection(ConnectionType.AIRPLANE_MODE)

    获取手机输入法(返回list)

    driver.available_ime_engines

    激活某种输入法

    driver.activate_ime_engine(engine)

    判断输入法是否激活(返回bool)

    driver.is_ime_active()

    撤销当前输入法(Android only)

    driver.deactivate_ime_engine()

    得到当前设置

    driver.get_settings()

    返回{u'ignoreUnimportantViews': False}

    更新当前设置

    driver.update_settings(settings)

    settings参数为dict,如{ignoreUnimportantViews: True}

    ignoreUnimportantViews参数:调用 uiautomator的函数setCompressedLayoutHierarchy()。由于 Accessibility命令在忽略部分元素的情况下执行速度会加快,这个关键字能加快测试执行的速度。被忽略的元素将不能够被找到,因此这个关键字同时也被实现成可以随时改变的 *设置 (settings ) *。默认值 false


    开关定位服务

    driver.toggle_location_services()
    ————————————————
    原文链接:https://blog.csdn.net/duoluo9/article/details/77053815

  • 相关阅读:
    MyBatis Plus 导入IdType失败
    SpringBoot+Vue项目上手
    高并发
    多线程
    Java 接口
    Java后端总结
    Aliyun Linux2安装Docker
    Zookeeper集群部署及报错分析
    CentOs7配置java环境
    kafka笔记——kafka启动
  • 原文地址:https://www.cnblogs.com/xxiaoye/p/15390496.html
Copyright © 2011-2022 走看看