linux下Appium+Python移动应用自动化测试实战—3.手把手教你定位元素编写测试用例

前言

有很多童鞋环境搭建好了却没有进行下一步,是因为缺少step by step的资料。 互联网上appium环境准备的资料多如牛毛,但是step by step操作的资料却少了很多。春节前的最后一个工作日事情不是很多,顺便把这一块总结整理一下,分享给需要的人。

下面所有的操作都是基于你已经准备好前面描述的所有安装部件的情况。

1. 操作前的准备

1.1 启动appium server

命令行中直接运行appium,启动appium服务。

appium1

出现如下图所示的相关信息的时候,表示appium server已经成功启动。

1.2 启动DDMS(Android Monitor)

在A N D R O I D S D K H O M E / t o o l s 目 录 下 , 运 行 m o n i t o r 。 或 者 在 你 正 确 设 置 了 A n d r o i d S D K 环 境 变 量 并 生 效 的 情 况 下 , 在 任 意 个 命 令 行 或 者 目 录 下 , 直 接 执 行 {ANDROID_SDK_HOME}/tools目录下,运行monitor。 或者在你正确设置了Android SDK环境变量并生效的情况下,在任意个命令行或者目录下,直接执行ANDROIDS​DKH​OME/tools目录下,运行monitor。或者在你正确设置了AndroidSDK环境变量并生效的情况下,在任意个命令行或者目录下,直接执行{ANDROID_SDK_HOME}/tools/monitor命令即可。

${ANDROID_SDK_HOME}/tools/monitor1

如果没有异常的话,会出现如下图所示的界面。

这个时候的界面空空,什么内容都没有。

1.3 启动Android模拟器

运行android studio,依次进入“Configure/AVD Manager”,运行已经配置好的Android模拟器。

这里执行速度视机器性能而定,Android模拟器启动完成以后,回到Android Monitor, 这时候发现左边的devices列表中多了一个Android 模拟器,状态是Online,如下图。

这里要多啰嗦几句。一定要先启动Android Monitor,再启动Android模拟器,否则会出现Android模拟器状态一直是offline的情况。这里我没有深究具体原因,但是在我的linux系统下,如果先启动模拟器再启动monitor的话,这个问题必然出现。

1.4 运行被测试APP

这里以Android模拟器自带的计算机为例子进行讲解。

在Android模拟器上运行Calculator程序,只要进入主界面就可以了,如下图所示。

在Android Monitor界面,选中devices列表中的模拟器,然后点击中间那个小手机图标(Dump View Jierarchy for UI Automator),如下图。

信息加载完成以后,模拟器上运行的计算器程序界面展示在了Monitor中,如下图。

从上图中可以看出计算器APP的包名是com.android.calculator2。

1.4 获取App的包信息

命令行中运行adb shell dumpsys package YOUR_PACKAGE_NAME即可获取对应的包信息。

adb shell dumpsys package com.android.calculator21

如下图

等会儿编写测试代码的时候,要用到这些信息。

2. 获取界面元素并编写测试用例

2.1 获取界面元素

在Android Monitor上面,每点选一个界面元素,右边就会显示对应的控件的ID,可以直接拷贝控件ID用于在测试用例中识别界面元素,如下图。

2.2 编写测试用例脚本

创建一个名称为Calculator.py的python脚本,内容如下。

#!/usr/bin/python3

import selenium

import time

import pytest

from appium import webdriver

my_dc = dict()

my_dc['platformName'] = 'Android' #平台为Android

my_dc['platformVersion'] = '7.1.1' #平台版本为7.1.1

my_dc['deviceName'] = 'Android_SDK_built_for_x86 device' # 取一个机器名字

my_dc['appPackage'] = 'com.android.calculator2' # 被测试App的包名

my_dc['appActivity'] = '.Calculator' # 被测试App的主Activity

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", my_dc) # 链接Appium服务器创建webdriver实例

###下面的测试用例定义的时候,一定要以test开头,否则pytest不认为是测试用例。

# 计算器 加法测试用例

def test_addition(): driver.find_element_by_id("com.android.calculator2:id/digit_3").click() #点击3 driver.find_element_by_id("com.android.calculator2:id/op_add").click() #点击+ driver.find_element_by_id("com.android.calculator2:id/digit_7").click() #点击7 driver.find_element_by_id("com.android.calculator2:id/eq").click() #点击= result = driver.find_element_by_id("com.android.calculator2:id/result").text #获取计算结果并赋值给变量result assert result == "10" #计算结果跟预期结果相符

# 计算器 减法测试用例

def test_subtraction(): driver.find_element_by_id("com.android.calculator2:id/digit_9").click() driver.find_element_by_id("com.android.calculator2:id/op_sub").click() driver.find_element_by_id("com.android.calculator2:id/digit_7").click() driver.find_element_by_id("com.android.calculator2:id/eq").click() result = driver.find_element_by_id("com.android.calculator2:id/result").text assert result == "2"

# 计算器 乘法测试用例

def test_multiplication(): driver.find_element_by_id("com.android.calculator2:id/digit_9").click() driver.find_element_by_id("com.android.calculator2:id/op_mul").click() driver.find_element_by_id("com.android.calculator2:id/digit_7").click() driver.find_element_by_id("com.android.calculator2:id/eq").click() result = driver.find_element_by_id("com.android.calculator2:id/result").text assert result == "63"

# 计算器 除法测试用例

def test_divition(): driver.find_element_by_id("com.android.calculator2:id/digit_9").click() driver.find_element_by_id("com.android.calculator2:id/op_div").click() driver.find_element_by_id("com.android.calculator2:id/digit_3").click() driver.find_element_by_id("com.android.calculator2:id/eq").click() result = driver.find_element_by_id("com.android.calculator2:id/result").text assert result == "3"1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

上面的脚本内容不做详细解释。 仅仅注意下面两点。

(1)界面元素的定位,使用了 driver.find_element_by_id方法,ID就是上面2.1中获取的界面元素ID。

(2)测试脚本中引用了pytest库进行测试用例编写。pytest库要求每个测试用例都是以test_开头。

2.3 执行测试用例

命令行中通过下面的命令执行测试用例。

pytest calculator.py1

运行结果如下图。

运行过程中,你会看到模拟器的手机界面上,按照测试用例预期的顺序依次点击了各个界面元素,并且得到了预期的测试结果。

最后,附上,测试用例执行过程中,模拟器界面,以及Appium服务器上的动态效果视频。

https://v.youku.com/v_show/id_XNTEwMTk5NDI1Mg==.html

文章来源: blog.csdn.net,作者:阿尔泰野狼,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lipeixinglive/article/details/113783193

python android自动化元素定位_linux下Appium+Python移动应用自动化测试实战---3.手把手教你定位元素编写测试用例...相关推荐

  1. linux python版本升级和系统更新_Linux 下升级python和安装pip

    1.  首先确认Linux操作系统中自带的python 版本时候与自己所需要的版本一致 3. 解压 tar -zxvf Python-2.7.11.tgz 进入Python-2.7.11目录  输入. ...

  2. python android自动化能做哪些页面_android - python 自动化测试 移动互联网 - SegmentFault...

    批处理ODBC配置 工作需要来回切换ODBC配置,用同一个DSN名称访问不同的数据库. 对于linux的odbc配置在odbc.ini文件里,替换不同的文件就可以切换了. 而windows的配置一直通 ...

  3. python 网关配置界面代码_Linux下使用python自动修改本机网关代码分享

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. Linux下Appium+Python+headless移动APP自动化测试实战

    Linux下Appium+Python+Headless移动APP自动化测试实战 文章目录 Linux下Appium+Python+Headless移动APP自动化测试实战 1. 环境准备 1.1 安 ...

  5. python android自动化基于java_Appium+Python自动化 1 环境搭建(适用windows系统-Android移动端自动化)...

    一.安装并配置 java jdk ①下载 java jdk后 安装,安装完成后,配置环境变量 打开计算机->系统属性->高级系统设置->环境变量->新建(系统变量),如图所示: ...

  6. Python实现自动化办公(三):Python对PPT文档的基本操作(python-pptx)

    Python对PPT文档的基本操作 文章目录 Python对PPT文档的基本操作 一.pptx模块 1.官方文档 2.安装pptx模块 二.基本函数的使用方法 三.使用案例 1.修改ppt内容 2.写 ...

  7. 尚学python课程---11、linux环境下安装python注意

    尚学python课程---11.linux环境下安装python注意 一.总结 一句话总结: 准备安装依赖包:zlib.openssl:yum install zlib* openssl*:pytho ...

  8. python流程控制-实战案例手把手教你Python流程控制技巧

    原标题:实战案例手把手教你Python流程控制技巧 作者:PianoOrRock 来源: http://blog.csdn.net/pianoorrock/article/details/711315 ...

  9. 小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 3)

    小白都能看懂的实战教程 手把手教你Python Web全栈开发 Flask(Python Web)实战系列之在线论坛系统 第三讲 这是小白都能看懂的实战教程 手把手教你Python Web全栈开发 的 ...

最新文章

  1. 谁都忍不了烂代码,如何用重构的方式让它整洁起来?
  2. python获取mysql数据为excel中的sheet_python 从excel、csv、mysql、txt获取数据源
  3. Thinkphp宅音乐html5在线音乐播放器
  4. 如何在Ubuntu系统中使用github
  5. 新出的计算机语言,新编程语言是鸡肋?听听创始人们怎么说
  6. 维智WSDA系列伺服驱动器用户手册(MECHATROLINK-Ⅱ总线通信型)-R7
  7. 安信可nbiot模块_安信可wifi模块
  8. 一台阿里云ECS下的CIDI方案 最具性价比的简化DevOps自动化部署方案
  9. 直接使用 Microsoft WinPE 工具 安装大于 4GB 的 WIM 文件
  10. argument type mismatch
  11. Dev C++环境中使用OpenGL
  12. 英特尔发布第三代全新可扩展处理器,加速5G网络转型
  13. 2019 初入IT十年(下)---- 视线所及只剩生活
  14. edge浏览器怎么设置activex_Microsoft Edge拥抱HTML5和JavaScript,不再支持IE上的ActiveX技术...
  15. 红米5 plus 位置服务器,红米5 Plus解锁system系统分区的教程_红米5Plus解系统分区...
  16. 国开计算机组成原理边学边练,国家开放大学-计算机组成原理-形考任务-2017全部答案.docx...
  17. 2018-2019-1 20189206 《Linux内核原理与分析》第五周作业
  18. 2020-8-25 吴恩达DL学习-C4 卷积神经网络-第二周 CNN实例探究(2.7Inception 网络)
  19. 三菱J4伺服驱动器错误代码AE6.0强制停止警告 解决方法
  20. php企业站运用到的工具,DouPHP轻量级企业建站工具官方版

热门文章

  1. 包r语言_R语言代码共享:制作R包
  2. python psycopg2_如何在Python上用“pip”安装psycopg2?
  3. python做运动控制_ROS探索总结-61.MoveIt!编程驾驭机械臂运动控制
  4. linux 下删除文件的 操纵
  5. Android 消息机制详解(Android P)
  6. TF.js 识别图片中的物件
  7. 【洛谷 P4934】 礼物 (位运算+DP)
  8. 高质量的缺陷分析:让自己少写 bug
  9. 好文推荐 | MySQL binlog应用场景与原理深度剖析
  10. Go包导入与Java的差别