Appium环境搭建和使用

1.1.傻瓜式安装node.js
Appium环境搭建和使用
1.2.查看是否安装成功
Appium环境搭建和使用
1.3.傻瓜式安装Appium

Appium环境搭建和使用

1.4.成功界面
Appium环境搭建和使用
1.5.配置Android环境变量
Appium环境搭建和使用
1.6.配置appium环境变量
在path中配置
Appium环境搭建和使用
1.7.打开控制台,查看appium环境
Appium环境搭建和使用

1.8.Python中配置appium环境
Appium环境搭建和使用

2.第一个脚本示例
2.1.首先启动android模拟器
Appium环境搭建和使用
2.2.启动Appium
Appium环境搭建和使用

2.3.点击左上角有“机器人”的按钮:
选择你的android版本
Appium环境搭建和使用
2.4.点击右上角的“三角”按钮启动Appium。

Appium环境搭建和使用

2.5.通过Python编写自动化测试脚本。
Appium环境搭建和使用

2.6.画出来的这三个,是需要在脚本中正确填写的

Appium环境搭建和使用

2.7.执行效果
Appium环境搭建和使用

3.Appium界面内容解析
3.1.整体介绍
Appium环境搭建和使用

  1. Android Settings,
  2. General Setting:
  3. 开发者设置
    4.关于
  4. 启动服务:
  5. 清除日志(右下角)

3.2.Android Settings
Appium环境搭建和使用

1.Application Path:选择路径,选择需要测试的app在本电脑存放的一个路径。在启动appium时他会默认去该路径下去寻找这个app,然后将他安装到指定的手机上。
2.Package:之前提到过的,我们这个包的身份证,我们需要通过这个去找到包,不然我们安装后我们通过什么去辨别这些包呢?
3.Launch Activity:故名思义,启动的activity,activity的时候提到过,我们启动app时需要去运行的activity,这里我们填写首次启动页面的activity。
备注:这里需要注意一个问题在我们每次通过Choose选择apk后,appium会自动把这个包进行重新签名,那么在package以及activity里面会自动把包名和activity的名称列进去,但是这里会出现一个问题,每次选择apk后列表中会有一个缓存的原因,即使你更改了apk,但是package还是没有变,这样启动的时候就一直报错,遇见这样的情况不要着急,重新启动两次就好。
4.Wait for Activity: 和上面的差不多,意思是等待某个Activity打开,用的时间不是很多,做了解。
5.Launch Device:标签下面的东西用得相对比较少,后面大家可以去了解一下。
6.Capabilities:该标签下和我们做自动化关系很大,后面我们做自动化时如何配置启动app等信息就用的该标签下的数据。
7.Platform Name:我们测试的app的类型,ios选择ios,android选择Android就好。
8.Automation Name:测试引擎的名称,我们使用的是appium,所以你第一眼就能看见Appium,但是他还有一个Selendroid。可能看到这里会有一些疑惑,为什么appium要选择两套系统呢?其实这个应该追溯到android的版本问题,android自己的工具在4.2版本以前是一个,但是后面进行了更新,可能也正是因为这个原因appium也才采用了两套,所以当你测试的app安装的机器时在4.0或之前的版本时那么这里的引擎你就必须选择Selendroid,是否这样大家可以动手去试一试。检验真理的唯一标准就是自己动手尝试。
9.Platform Version:安装应用手机的版本号,android的是几点几的版本。
10.Device Name:设备名称。
备注:这里会有一个问题,如果你测试android时,只把一台手机插入到电脑,即使你输入的Device Name是错误的,但是你依然能够正常安装,使用。但是ios是不行的。不知道在设计的时候是否就是如此考虑的,如果在以后使用中遇见类似问题大家不要惊慌。
11.Advanced标签下的东西在初级阶段不用担心,这个标签只是在你想同一台电脑同时控制多台手机的时候才能使用,需要更改Bootstrap Port的端口号,记住这一点就好。
3.3.General Setting
在General Setting里面在通常情况下我们使用默认设置就好,但还是有一些基础设置可以进行调整,方便后期的学习。整个页面分成了Server和log两部分,默认的情况如下面图片。

Appium环境搭建和使用

1.Server Address:配置appium服务的地址,正常情况我们不需要更改,但是如果我们需要配置多台手机的时候启动了多个appium服务,那么这里的端口号我们需要进行调整,如果你多个都弄的同一个端口会报错。
2.Override Existing Session: session覆盖,可能对于初学者不理解什么叫session,你这里暂时理解为会话,我和你会话的唯一标示。
3.Log To File:默认状态是没有任何数据,但是在做自动化时建议选择,因为选择之后appium在运行时产生的日志都会保留到你设置的问题件,这个对后期的bug定位有相当大的帮助。切记!
3.4.元素侦测:
这个按钮的功能和firebug的定位工具功能类似,但是他还有一个功能,他会检测你的各个系统配置是否正确,如果前面各项参数不正确时,使用该功能会报错。如果你不正常连接手机也不行。还是建议用sdk工具里面自带的uiautomatorviewer。

3.5.启动服务
所有参数配置好后你需要做的就是启动appium服务,只有启动之后你才能够做自动化。

3.6.清除日志(右下角):
在写脚本、调试过程中会产生很多的日志,但是你可能想看的只是中间某个时间段的,那么你在这个时候可以将页面的日志清除。

4.Appium元素定位
4.1. ID定位
有时候你看不到元素的ID,两种情况 :
1、开发没有添加。2、android版本是4.4以下的。
windows环境下,先打开你的模拟器,然后双击打开android-sdk目录下的tools下的uiautomatorviewer.bat文件

Appium环境搭建和使用

uiautomatorviewer.bat是一个用来来扫描和分析Android应用程序的UI组件的GUI工具。具体使用方法可参考。
打开uiautomatorviewer以后,可以看到uiautomatorviewer已经将模拟器的图形展示在上面了。我们打开计算器app:

Appium环境搭建和使用
如果我们需要对“7”这个数字进行点击操作,
driver.find_element_by_id(“com.android.calculator2:id/digit7”).click()
4.2.className定位
driver.find_element_by_class_name(“android.widget.Button”).click()
4.3.text定位
(需要使用uiautomator的定位方式,使用text的
driver.find_elements_by_android_uiautomator(“new UiSelector().text(‘7’)”)
使用这里需要注意一下,如果通过text定位的结果是个list,不能直接click。所以如果要点击需要取数组的值,比如下面是点击找到的第一个元素
driver.find_elements_by_android_uiautomator(“new UiSelector().text(‘7’)”)[0].click()
4.4.xpath定位
xpath定位在web自动化中是最常见的,而且也是最有效的
Appium环境搭建和使用
Appium环境搭建和使用

app中xpath的使用(Android 不太好使)
driver.find_element_by_xpath("//android.widget.TextView[@text=‘7’]").click()

4.5.css_selector定位(webview)–加载网页–css
只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_css_selector()

4.6.link_text定位(webview)
只适用于webview容器中的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_link_text()
4.7.name定位
web view容器中的html页面可以用name定位,native并没有name属性
driver.find_element_by_name()

5.获取appPackage和appActivity
appPackage和appActivity 进行appium自动化测试非常重要的两个参数,我们所测试的APP不同,这两个参数肯定也是不一样的。那如何快速的获取这APP的这两个参数呢

5.1.方法一:通过cmd指令来获取

  1. adb shell
  2. dumpsys activity | grep mFocusedActivity

Appium环境搭建和使用

5.2.方法二:使用Appium来获取
进入设置页,选择APK 路径,下面就会显示包名和Activity名称

Appium环境搭建和使用

6.Appium元素基本操作
6.1.安装上两个apk,供测试使用

Appium环境搭建和使用
Appium环境搭建和使用

6.2.click
点击事件操作
driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ae8”).click()

6.3.clear
#清空输入框内容
driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ij”).clear()

6.4.send_keys(xx)
输入框内输入内容
driver.find_element_by_id(“com.wuba.zhuanzhuan:id/ij”).send_keys(“test content”)

6.5.Text
获得元素的text内容
driver.find_elements_by_class_name(“android.widget.EditText”)[0].text;

7.触摸操作
7.1.1.driver.tap([坐标],持续点击时间)
除了定位到元素的点击外,也可以通过tab实现坐标的点击
driver.tap(driver.tap([(216,1776)],2))

7.2.2.TouchAction(driver)
TouchAction对象包含(tab)、press(短按)、move_to(滑动到某个坐标)等方法
通过TouchAction对象,添加tap、move_to等操作,然后perform()执行,可以实现解锁屏幕等功能
7.3.规范中的可用事件有:

  • 短按 (press)
  • 释放 (release)
  • 移动到 (moveTo)
  • 点击 (tap)
  • 等待 (wait)
  • 长按 (longPress)
  • 取消 (cancel)
  • 执行 (perform)
    7.4.长按示例
    获取某个按钮的位置,执行长按操作
    touch=TouchAction(driver)
    touch.long_press(x=100,y=250).perform();

7.5.滑屏示例
7.5.1.安装涂鸦app
#获取屏幕尺寸
def get_size():
x=driver.get_window_size()[‘width’]
y=driver.get_window_size()[‘height’]
return x,y

#显示屏幕尺寸(width,height)
l=get_size()
print(l)

#向左滑动
def swipeLeft():
l=get_size()
x1=int(l[0]*0.9)
y1=int(l[1]*0.5)
x2=int(l[0]*0.1)
driver.swipe(x1,y1,x2,y1,1000)

#向左滑动2次
for i in range(2):
swipeLeft()
sleep(0.5)

#点击立即体验
driver.find_element_by_id(‘com.jinding.shuqian:id/imageView_guide_join’).click()
Appium环境搭建和使用
7.5.2.打开界面,使用如下指令,查看activity和package
Appium环境搭建和使用
7.5.3.编写python脚本代码
Appium环境搭建和使用
8.系统按键事件
press_keycode(AndroidKeyCode)#发送按键事件
例如:点击home键,home键的KeyCode是3
Appium环境搭建和使用
9.driver的一些比较重要操作
9.1.reset()
#重置app#这时候driver会重置,相当于卸载重装应用。所以本地缓存会失效
driver.reset()
9.2.start_activity(包名,activity名)
例如:
#启动app的某一个activity
driver.start_activity(“com.wuba.zhuanzhuan”,"./presentation.view.activity.LaunchActivity")
启动一个activity,这个activity必须是AndroidManifest.xml中有intent-filter的activity,对于其他的activity需要程序跳转过去
9.3.scroll(起始元素,结束元素)
driver.scroll(origin_el,destination_el)
9.4.获得当前页面的所有元素
driver.page_source
这可以用来判断元素是否存在,例如(assert “发布成功” in driver.page_source)
9.5.补充一些driver启动时可能用到的项
其实这些在上一篇启动里都有介绍,但是有些可能大家没注意到的点再列一下。这些点也是我在测试中实际遇到的点
autoLaunch :Appium是否要自动启动或安装app,默认true
desired_caps[‘autoLaunch’] = ‘false’
有的时候我不想让appium每次都启动app,想自己去启动activity,那这个项这时就可以起作用了
noReset:在会话前是否重置app状态。默认是false
desired_caps[‘noReset’] = ‘true’
newCommandTimeout:设置未接收到新命令的超时时间,默认60s
如果60s内没有接收到新命令,appium会自动断开连接,如果我需要很长时间做driver之外的操作,可能延长接收新命令的超时时间
desired_caps[“newCommandTimeout”]=1800

10.自动化测试简单案例-登录

Appium环境搭建和使用

10.1.打开UI Automator Viewer

Appium环境搭建和使用

Appium环境搭建和使用
10.2.代码实现
Appium环境搭建和使用
11.自动化测试案例2-转转
11.1.下载转转,并打开,在初始界面查看包和activity

Appium环境搭建和使用

11.2.使用UI Automator Viewer查看转转按钮
11.3.点击跳过
Appium环境搭建和使用

11.4.点击分类
Appium环境搭建和使用
Appium环境搭建和使用
Appium环境搭建和使用
Appium环境搭建和使用
Appium环境搭建和使用
Appium环境搭建和使用
12.MonkeyRunner
12.1.什么是monkeyrunner
monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件。

12.2.monkeyrunner同monkey的区别
Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器,它支持,自己编写插件,控制事件,随时截图,简而言之,任何你在模拟器/设备中能干的事情,MonkeyRunner都能干,而且还可以记录和回放。

12.3.monkeyrunner的测试类型

1、多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
2、 功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
3、 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
4、 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用Android Debug Bridge这样的Android工具。
12.4.运行monkeyrunner
可以直接使用一个代码文件运行monkeyrunner,抑或在交互式对话中输入monkeyrunner语句。不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。如果您提供一个文件名作为运行参数,则monkeyrunner将视文件内容为Python程序,并加以运行;否则,它将提供一个交互对话环境。

相关文章:

  • 2021-10-09
  • 2021-11-16
猜你喜欢
  • 2021-11-28
  • 2021-12-18
  • 2021-12-11
  • 2021-07-15
相关资源
相似解决方案