Appium+python自动化(七)- 认识Appium- 上

简介

经过前边的各项准备工作,终于才把appium搞定。

一、appium自我介绍

appium是一款开源的自动化测试工具,可以支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用(APP)。

1、 使用appium进行自动化测试的好处

在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。

支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架.Appium实现了真正的跨平台自动化测试。主要介绍Python的用法

2、Appium架构

appium是一个用Node.js编写的HTTP server,它创建、并管理多个 WebDriver sessions 来和不同平台交互,如 iOS ,Android等等.

appium开始一个测试后,就会在被测设备--手机上启动一个 server ,监听来自 Appium server的指令. 每种平台像 iOS 和Android都有不同的运行、和交互方式。所以appium会用某个桩程序"侵入"该平台,并接受指令,来完成测试用例的运行。

二、appium实战技艺(以真机<appium>为例)

这里是给大家列举的一些appium的指法(命令)

复制代码
    aapt dump badging D:\XXX.apk  获取安装包的所有信息

       adb devices(查看手机是否连接到电脑)

       adb shell pm list packages:列出所有的包名,找到所查看包的包名。

       adb shell dumpsys package com.android.XXX:查看某个包的具体信息

       其它:

       adb devices:查看Android设备是否连接到电脑。

       adb shell dumpsys activity:查看当前运行的是哪个activity,运行的一些进程等

       adb shell dumpsys activity activities

       adb shell pm list packages:列出所有的包名。

       adb shell dumpsys package:列出所有的安装应用的信息

       adb shell dumpsys package com.android.XXX:查看某个包的具体信息

       adb shell dumpsys activity | grep mFocusedActivity:查看当前resume的是哪个activity

       adb logcat | grep ActivityManager:查看当前正在运行的Activity

       adb logcat | grep Displayed:查看当前正在运行的Activity

1、 连接真机或者模拟器 -- 这里是appium和手机如何接触连接

1)连接手机时注意选择手机的开发者模式,cmd打开命令行窗口,输入adb devices 获取到设备的deviceName

2)启动模拟器,连接模拟器AVD(Google自带),cmd打开命令行窗口,输入adb devices 获取到设备的deviceName

3)启动模拟器,连接夜神模拟器,要注意先输入 nox_adb.exe connect 127.0.0.1:62001 (相当于插入数据线),再继续,输入adb devices

2、获取Activity

1)cmd打开命令行窗口,输入aapt dump badging D:\XXX.apk(xxx指安装包名,D:\是指路径)直接查看需要测试app安装包的具体信息。

2)标记的就是包名,继续往下拖拽,可以找到activity的信息。

这里的红圈就可以看到activity的信息。这两个值,在appium脚本中都需要提前获取到,所以需要提前介绍这个获取方法。如果你觉得在cmd里面不好看,你可以把cmd信息导出到一个txt文件,例如 aapt dump badging shoujibaidu.apk > 123.txt回车后,会在桌面生成一个123.txt文件,你可以打开,通过查询找到这些信息。通过上面的方法,只要我们有android SDK环境,那么我们就可以获取到任意一个包的包名和Activity信息。

3、启动Appium

1) 双击桌面上的appium图标打开,点击Android Settings进行设置。

2)将上方获取到的真机的deviceName填入 ,选择platformName和platformVersion

3)将服务的session配置成可重写(非必要的配置)

4)配置好后,点击右上角的启动按钮进行启动即可。

5)启动成功,下一步该写代码了。

4、将上方得到的设备和安装包信息写入脚本中

复制代码
1 # coding=utf-8
10 # 1.导入模块
11 from appium import webdriver
12 import time
13 desired_caps = {}
14 desired_caps['platformName'] = 'Android'   #android的apk还是IOS的ipa
15 desired_caps['platformVersion'] = '8.0'  #android系统的版本号
16 desired_caps['deviceName'] = 'emulator-5554'    #手机设备名称,通过adb devices  查看
17 desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
18 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
19 # desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的编码方式来发送字符串
20 # desired_caps['resetKeyboard'] = True   #将键盘给隐藏起来

5、查找app定位元素

1)启动Android SDK中的一个神器可以查找app的定位元素进行脚本的编写。在Android SDK中的tools中有一个uiautomatorviewer.bat,如下图所示:

2)点击uiautomatorviewer.bat进行启动,左上角一共四个按钮,作用分别是打开本地文件(open)、Device Screenshot (uiautomator dump)dump页面、dump压缩格式的页面、保存;启动后点击左上角第三个图标进行真机界面的呈现。

3)选择设备模拟器或者真机

4)第一次连接会比较慢,耐心等候一下,连接好后以后就快了。我这里以百度界面为例。

这是连接夜神模拟器后的界面显示。这样就可以根据id、class、text等定位元素进行定位了。

复制代码
1 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
2 driver.find_element_by_id("index-kw").click()
3 driver.find_element_by_id("index-kw").clear()
4 driver.find_element_by_id("index-kw").send_keys('appium测试')
5 
6 7 driver.find_element_by_id("index-bn").click()
8 
9 driver.quit()

三、以淘宝APP为实例

1、实例代码

2、代码运行结果

3、appium运行结果

4、模拟器运行结果

5、参考代码

复制代码
1 # coding=utf-8
10 # 1.导入模块
11 from appium import webdriver
12 import time
13 desired_caps = {}
14 desired_caps['platformName'] = 'Android'   #android的apk还是IOS的ipa
15 desired_caps['platformVersion'] = '8.0'  #android系统的版本号
16 desired_caps['deviceName'] = '127.0.0.1:62001'    #手机设备名称,通过adb devices  查看
17 desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
18 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
19 #desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的编码方式来发送字符串
20 #desired_caps['resetKeyboard'] = True   #将键盘给隐藏起来
21 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
22 # 休眠五秒等待页面加载完成
23 time.sleep(5)
24 
25 driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()
26 time.sleep(4)
27 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").clear()
28 time.sleep(3)
29 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys("琵琶")
30 time.sleep(2)
31 driver.find_element_by_id("com.taobao.taobao:id/searchbtn").click()
32 
33 # driver.quit()

至此运行脚本即可进行自动化测试。

小结

1、adb.exe connect 127.0.0.1:62001nox_adb.exe connect 127.0.0.1:62001的效果是一样的,前提就是你已经配置好系统变量和解决了版本冲突。

相关推荐
databook42 分钟前
Manim实现波浪形文字特效
后端·python·动效
ggaofeng1 小时前
用 Python 实现一个简化但可运行的 单点登录(SSO)系统
开发语言·python
Python极客之家1 小时前
基于数据挖掘的在线游戏行为分析预测系统
人工智能·python·机器学习·数据挖掘·毕业设计·课程设计
技术猴小猴1 小时前
如何使用Python实现UDP广播
开发语言·python·udp
峥嵘life2 小时前
Android16 adb投屏工具Scrcpy介绍
android·开发语言·python·学习·web安全·adb
小龙在山东2 小时前
VS Code 使用 Chrome DevTools MCP 实现浏览器自动化
前端·自动化·chrome devtools
AI视觉网奇2 小时前
vscode 不能跳转 ERR_OSSL_EVP_BAD_DECRYPT
python
文心快码BaiduComate3 小时前
Comate分饰多角:全栈开发一个Python学习网站
前端·后端·python
雨声不在3 小时前
cronet从编译到修改之: 支持IP直连
python·网络协议·tcp/ip·cronet
2401_841495643 小时前
【机器学习】朴素贝叶斯法
人工智能·python·数学·算法·机器学习·概率论·朴素贝叶斯法