简介

在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备状态来进行截屏。从而达到一种“有图有真相”的效果。

截图方法

方法1

save_screenshot() 该方法直接保存当前屏幕截图到当前脚本所在文件位置。

driver.save_screenshot('login.png')

查看方法1源码:

方法2

get_screenshot_as_file(self, filename)

将截图保留到指定文件路径

driver.get_screenshot_as_file('./images/login.png')

查看方法2源码:

实践案例

测试场景

在考研帮App登录页面输入用户名和密码之后截图,分别保存到当前文件和指定的文件路径。

代码实现

参考代码

  1. # coding=utf-
  2. # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # .注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on --
  7. @author: 北京-宏哥 QQ交流群:
  8. Project:学习和使用appium自动化测试-屏幕截图
  9. '''
  10. # .导入模块
  11. from appium import webdriver
  12. from selenium.common.exceptions import NoSuchElementException
  13.  
  14. desired_caps={}
  15. desired_caps['platformName']='Android'
  16. desired_caps['deviceName']='127.0.0.1:62025'
  17. desired_caps['platforVersion']='5.1.1'
  18. desired_caps['automationName']='uiautomator2'
  19.  
  20. desired_caps['app']=r'C:\Users\DELL\Downloads\kaoyanbang.apk'
  21. desired_caps['appPackage']='com.tal.kaoyan'
  22. desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity'
  23.  
  24. desired_caps['noReset']='False'
  25. desired_caps['unicodeKeyboard']="True"
  26. desired_caps['resetKeyboard']="True"
  27.  
  28. driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
  29. driver.implicitly_wait()
  30.  
  31. #定义的点击“取消”按钮方法
  32. def check_cancelBtn():
  33. print('check cancelBtn')
  34.  
  35. try:
  36. cancelBtn = driver.find_element_by_id('android:id/button2')
  37. except NoSuchElementException:
  38. print('no cancelBtn')
  39. else:
  40. cancelBtn.click()
  41.  
  42. #定义的点击“跳过”按钮方法
  43. def check_skipBtn():
  44. print('check skipBtn')
  45.  
  46. try:
  47. skipBtn = driver.find_element_by_id('com.tal.kaoyan:id/tv_skip')
  48. except NoSuchElementException:
  49. print('no skipBtn')
  50. else:
  51. skipBtn.click()
  52.  
  53. #调用点击“取消”按钮方法
  54. check_cancelBtn()
  55.  
  56. #调用点击“跳过”按钮方法
  57. check_skipBtn()
  58.  
  59. driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').clear()
  60.  
  61. driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').send_keys('')
  62.  
  63. driver.find_element_by_id('com.tal.kaoyan:id/login_password_edittext').send_keys('zxw2018')
  64.  
  65. driver.save_screenshot('login.png')
  66.  
  67. driver.get_screenshot_as_file('./images/login.png')
  68.  
  69. driver.find_element_by_id('com.tal.kaoyan:id/login_login_btn').click()

注意:如果指定路径出现中文字符时,需要加上u’文件路径’进行转码

App三种类型与区别

原生应用程序:(Native App)

原生APP是什么?原生APP就是利用Android、iOS平台官方的开发语言、开发类库、工具进行开发。比如安卓的java语言,iOS的object-c 语言。在应用性能上和交互体验上应该是最好的。

优点:

1、可访问手机所有功能、可实现功能最齐全;

2、运行速度快、性能高,绝佳的用户体验;

3、支持大量图形和动画。不卡,反应快。

4、比较快捷地使用设备端提供的接口,处理速度上有优势。

缺点:

1、在过去主要是成本高、周期长,Android和iOS都需要单独开发。

2、更新版本需要重新下载安装包。

混合应用程序(Hybrid App)

即利用了原生APP的开发技术还应用了HTML5开发技术,是原生和HTML5技术的混合应用。混合比例不限。

优点:

1、开发周期短;

2、功能更新发布快;

缺点:

1、用户体验不如本地应用;

2、性能稍慢(需要连接网络);

Web版APP (Web App)

本质就是浏览器功能的叠加,用普通Web开发语言开发的,通过浏览器运行。

优势:

1、支持范围广;

2、开发成本低、周期短。

缺点:

1、对联网要求高,离线不能做任何操作;

2、功能有限;

3、运行速度慢,页面不能承载太多东西;

4、图片和动画支持性不高;

5、如果用户使用更多的新型浏览器,那么就会出现运行问题。

Web App、Hybrid App、Native App 技术特性

手游app与手机App

手游一般使用引擎开发,现在著名的有cocos2d和unity3d。两者都是使用引擎自带的语言进行开发,主流的分别是c++和c#,虽然在开发过程中也有按钮等控件的概念,但当运行时由引擎渲染后就变成了一副简单的图片:

手机App一般使用Android SDK开发,使用Java编写。通过Android提供的服务,我们可以获取App当前窗口的视图信息,进而查找和操作按钮等控件,以完成自动化测试,如Uiautomator。这个过程是标准化的,从技术上来说没有任何难度,因此各个公司各个App自动化测试的方法都大同小异。

小结

  好了,这部分的内容比较简单,小伙伴们和同学们掌握上边的两个截图的方法,了解一下Android APP的类型就可以。

您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得点波 推荐 哦!!!(点击右边的小球即可!(^__^) 嘻嘻……)

       个人公众号                                                             微信群 (微信群已满100,可以加宏哥的微信拉你进群,请备注:进群)          

                                                                 

Appium+python自动化(三十四)- 有图有真相,很美很精彩 - 屏幕截图和Android APP类型简介(超详解)的更多相关文章

  1. Appium+python自动化(十)- 元素定位秘籍助你打通任督二脉 - 上卷(超详解)

    简介 你有道灵光从天灵盖喷出来你知道吗,年纪轻轻就有一身横练的筋骨,简直百年一见的练武奇才啊,如果有一天让你打通任督二脉,那还不飞龙上天啊.正所谓我不入地狱谁入地狱,警恶惩奸维护世界和平这个任务就交个 ...

  2. Appium+python自动化(十一)- 元素定位秘籍助你打通任督二脉 - 下卷(超详解)

    简介 宏哥看你骨骼惊奇,印堂发亮,必是练武之奇才! 按照上一篇的节目预告,这一篇还是继续由宏哥给小伙伴们分享元素定位,是不是按照上一篇的秘籍修炼,是不是感觉到头顶盖好像被掀开,内气从头上冒出去,顿时觉 ...

  3. 《手把手教你》系列技巧篇(三十四)-java+ selenium自动化测试-单选和多选按钮操作-中篇(详解教程)

    1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历单选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的单选按钮进行实战. 2.d ...

  4. 第三十四章、PyQt中的输入部件:QComboBox组合框功能详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 Designer中输入工具部件中的Combo Box组合框与 ...

  5. 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习

     孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...

  6. 《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)

    1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历多选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的多选按钮进行实战. 2.d ...

  7. Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)

    简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或 ...

  8. Appium+python自动化(三十六)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 上(超详解)

    简介 前面课程只是启动了单个appium服务,只能控制单台设备.如果需要针对多台设备测试那么该如何处理?而且发现群里的小伙伴们也在时不时地在讨论这个问题,想知道怎么实现的,于是宏哥就决定写一片这样的文 ...

  9. 笨办法学Python(三十四)

    习题 34: 访问列表的元素 列表的用处很大,但只有你能访问里边的内容时它才能发挥出作用来.你已经学会了按顺序读出列表的内容,但如果你要得到第 5 个元素该怎么办呢?你需要知道如何访问列表中的元素.访 ...

随机推荐

  1. 用MATLB仿真一个单闭环控制量,同时还存在两个开环控制变量的阶跃响应曲线。(自动控制方法是PID中的P控制。通过查表法直接给开环参数稳态最佳的大小)

    实际项目背景:甘肃省,航天510所的LIPS100电推力器.一共有三个控制变量,开环控制变量是:Ia(阳极电流).mmrf(阳极主流率) 这个阳极主流率是阀门变量,不能够突变,模拟用(大学一年级课,电 ...

  2. Python-入门学习

    开始学习Python(围绕windows 平台上),记录一些点滴的知识点,也希望可以和大家交流分享. ================================================= ...

  3. SSAS Tabular关系设计--时间最小粒度维度

    这两天设计的T2模型,涉及日期维度表中粒度的选择,因为一般实际销售达成ACT表是按天为标准记录的,而销售目标表TGT一般是按月记录,特此总结一下建模技巧. 数据仓库: 时间维度表,最小粒度为DATE. ...

  4. 为git伸冤(使用git中可能会踩的一些坑)

    窦娥被冤,六月飞霜.今天我两次遇到git被冤枉的情况,要是其它人也遇到这种情况导致git使用量缩小,那也要六月飞霜了. git第一次被冤枉是同事以为git的版本管理有问题.事情是这样的,同事提交新版本 ...

  5. echarts在react项目中的使用

    数据可视化在前端开发中经常会遇到,万恶的图表,有时候总是就差一点,可是怎么也搞不定. 别慌,咱们一起来研究. 引入我就不多说了 npm install echarts 对于基础的可视化组件,我一般采用 ...

  6. zstack源码编译安装(1.7.x版本)

    图片没粘贴过来,请看本人gitbook吧https://www.gitbook.com/book/jingtyu/how-to-learn-zstack-code 运行环境 zstack的安装方式有很 ...

  7. 原创:用node.js搭建本地服务模拟接口访问实现数据模拟

    前端开发中,数据模拟是必要的,这样就能等后台接口写完,我们直接把接口请求的url地址从本地数据模拟url换成后台真实地址就完成项目了.传参之类的都不用动. 之前网上找了很多类似于mock等感觉都不太实 ...

  8. 【Android Studio】查看源码时提示“throw new RuntimeException("Stub!")”

    如题-- 详细问题及解决方法: http://blog.csdn.net/u010917495/article/details/51234179

  9. 实用小工具推荐 OpenWrite

    [实用小工具推荐]给技术同学们推荐一款比较好用的工具,可以实现一稿多发,主流的技术渠道基本涵盖了:https://www.openwrite.cn/ 因为工作的关系,认识了很多做技术公众号的小伙伴,同 ...

  10. 大数阶乘(c++实现)

    #include <iostream>using namespace std;#define N 1000int BigNumFactorial(int Num[], int n);voi ...