Python+appium自动化+夜神模拟器inspector部署验证
1、自动化测试环境部署_总览图+检查表+流程图
Python需要安装Appium-Python-Clicent去定位元素;Appium是一个中间的服务器,它需要依赖node.js,python的脚本通过appium和手机进行交互;手机app的环境都是java环境,先安装jdk,再安装SDK。我们用夜神模拟器来代替手机。
确定当前环境现状,有模拟器先把Genymotion模拟器卸载掉。还有虚拟Box。我们要安装Nox夜神模拟器。
输入java -version,建议1.8以上。
输入adb devices ,有返回下面的则通过。SDK已安装。
查看Node.js,说明已经装过环境了。还有Appium等。
查看python和pycharm
查看Appium-Python-Client,在setting中检查。
2、手机自动化测试环境部署_JDK+SDK安装及验证
2.1、安装java的jdk
下载java安装包,至少要1.8.0以上版本,也就是jdk-8u321-windows-x64.exe
Java Downloads | Oracle
首先需要安装Java的JDK, 以jdk-8u321-windows-x64.exe为例。
双击安装包安装,点击下一步
点击下一步
点击下一步,安装jre
展示已经安装成功了。点击关闭。现在我们的jdk装好了。
下面开始配置环境变量
win10 系统 点击计算机--右键--属性--高级系统设置--环境变量--系统变量,
win 11 系统,打开控制面板,搜索查看高级系统设置
点击高级-->环境变量
选择系统变量下的新建,新建一个JAVA_HOME的系统变量,变量值为Java的JDK所在路径。
C:\Program Files\Java\jdk1.8.0_321
选择“系统变量”下面的”新建“选项,变量名为“CLASSPATH,变量值.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar
在环境变量中找到变量path,双击打开
在变量值最前面添加%Java_Home%\bin;%Java_Home%\jre\bin;
把后面有一个变量值C:\Windows\system32放到开头,因为%不能放在开头,否则会导致展开不了的问题。
环境变量Path点击编辑不展开解决办法_环境变量编辑页面展开不了-CSDN博客
环境变量配置完成后,点击确定选项
检查Java环境是否配置成功
按快捷键Win+R,输入cmd
输入java
输入javac
输入java -version,每次检查,都必须重新打开dos窗口
这样java的环境已经配置好了。
2.2安装SDK
将android-sdk-windows这个SDK的包放到一个没有中文路径和空格的路径下。
添加环境变量:右键计算机--属性--高级系统设置
新建环境变量 ANDROID_HOME ,里面的值为刚才SDK的路径。D:\android-sdk-windows
添加 环境变量PATH,注意分号隔开。
D:\android-sdk-windows\platform-tools
D:\android-sdk-windows\tools
此时重新打开cmd命令行,敲一个adb,显示相应的内容,说明配对了。
输入adb devices,出现下面内容,说明安装成功了。
3、手机自动化测试环境部署_NodeJS+Appium+Python类库安装及验证
Appium手机自动化环境需要电脑4G以上内存,最好8G,如果过小,就可能用不了
3.1安装node-v11.0.0-x64.msi
双击点击运行
选择next
勾选接受,并点击next
安装到默认路径底下
选择next
next
选择install
正在安装
安装完成,点击finish
S2:配置node环境变量
将路径拷出来
C:\Program Files\nodejs
放入环境变量后面的path路径下右键--属性--高级系统设置
将变量放入到PATH里面去,注意前面加英文分号,再点3次确定。
检验一下node能不能用,cmd打开命令行窗口,输入“node --version”,注意中间有空格,两个--。
或者node -v
这个时候可以看到版本是v11.0.0,那我们环境的配置,是没有问题的。一个机器上只安最新的一个版本就可以了。
3.2安装appium
双击“appium-desktop-setup-1.7.1.exe”进行安装。这个版本太低,会和夜神模拟器不匹配,有问题,只做演示,建议换成下面的版本。
Appium-windows-1.21.0-1.exe
点击运行
选第一项,并安装
需要一定的时间(1:05s)
完成后,先把运行Appium前面的对勾去掉,点击完成。
S2:配置appium
先配置环境变量,找到安装路径
C:\Program Files (x86)\Appium
在用户PATH里面添加环境变量。同样确定3下。
S3:验证appium cmd命令行输入 appium -doctor
弹出appium的界面
桌面有appium的图标
这样appium的安装已经好了,可以看下一步内容。
3.3 安装Python类库
安装Appium-Python-Client和模拟器
首先准备安装包genymotion-2.12.1-vbox.exe---在线安装Appium-Python-Client-安装模拟器。
S1:pip install Appium-python-client
先安装Appium-Python-Client
试用pip命令在线安装。一定要注意要有网络。
S2:验证
退出重新进入pycharm,File--Setting--Project--Python Interpreter,看里面有没有Appium-Python-Client
如果没有,需要在解释器-Python Interpreter里面的加号+里面输入Appium-Python-Client重新添加一下,因为pip只是安装到本地,没有放到项目中来。
如果和selenium类库冲突,先把selenium类库删除掉再安装,就不会有问题了。
from appium.webdriver.webdriver import WebDriver
没有报错。就安装成了
4、手机自动化测试环境部署_夜神模拟器安装及验证
安装夜神模拟器,国内最流行的模拟器。
nox_setup_v7.0.1.6_full.exe
双击安装。
点击立即安装
点击安装完成,它还要一个重新启动的过程。一定要保证在联网环境下,因为它还要下载一些他自己的组件库之类的。
出现了很多菜单之后,说明已经完成了
5、手机自动化测试环境验证
将乐飞知识库拖到夜神模拟器里面去。进行自动的安装。
j
安装后双击,允许。允许。不允许我们什么都做不了。
里面有个开发配置
将配置放进去。
网址https://lefeiwisdom-3pt-2t6a7-www.vip.51env.net地址
点击确定
手机号码输入后,13800138001 密码随便输入。勾选同意,点击登录。
打开使用协议,往下拉一下,再回去。
这个时候,我们怎么知道apk安装好了呢。要看一下设备号。
cmd 进入命令行,输入adb devices,回车。
遇见问题,版本不匹配。
在我们的夜神下面和SDK的路径下面,都有adb.exe,这两个不一致。可能都会导致有问题。
可以把夜神模拟器的adb.exe,复制到SDK路径下,覆盖掉原来的adb.exe。可以把SDK下的adb.exe先改一个名字。
此时没有冲突了
把cmd命令行关了,将APP退出,重新读一下。
再双击运行app
再查看还是没有设备号,应该怎么办呢。
点击工具--设置
最下面的版本说明,双击进去
版本号这里再去单击。
直到进入到开发者模式。
可能我们不是开发者模式打开的状态,所以软件访问模拟器时,它有可能不让我们连。
要重启一下模拟器
重启模拟器之后,开发者模式才能生效。
此时再用命令行查看,可以看到设备号。
可以用adb 命令连接模拟器
adb connect 127.0.0.1:62001
其他模拟器:雷神5555 夜神62001 mumu7555 逍遥
查看连接的设备
查看设备名称 adb devices
查看包名,必须保证app已经启动在登录界面或已进入。注意最后的Activity有的有有的没有,要找开发人员问一下。
adb shell dumpsys activity activities |findstr mFocusedActivity
写一个脚本
#*****************************************
#v1.0:app独立自动化测试 脚本--初始化登录
#*****************************************
#导入类库
from appium.webdriver.webdriver import WebDriver
#手机参数初始化
#查询程序包名的命令:adb shell dumpsys activity activities| findstr mFocusedActivity#设置appPackage:被测程序包名
caps={
'platformName':'Android', #设置platformName:手机系统名称Android
'platformVersion':'7.1.2', # #设置platformVersion:手机系统版本
'deviceName':'127.0.0.1:52001' , #设置deviceName:设备名称
'appPackage':'uni.UNI765428A', #设置appPackage:被测程序包名
'appActivity':'io.dcloud.PandoraEntry' #设置appActivity:被测程序活动名
}
#启动appium
WebDriver('http://127.0.0.1:4723/wd/hub',caps)
若遇见问题:appium:AttributeError: ‘NoneType‘ object has no attribute ‘to_capabilities‘错误
上述问题是因为各位在用pip install Appium-Python-Client命令行安装时系统会默认直接下载最新版本的Appium-Python-Client和appium框架包版本,因而系统默认也匹配下载最新版的selenium安装包版本,解决以上问题只需降低Appium-Python-Client版本即可,建议降到2.0。
pip uninstall Appium-Python-Client
pip install Appium-Python-Client==2.0
安装好低版本的Appium-Python-Client重启一下pycharm即可。
可以看到程序打开过程是正确的。
这时需要用inspector定位。
6、安装inspector
下面是安装教程
Appium-Inspector-windows-2022.8.1.exe
选择安装
选择完成
打开后,有4个地方要修改
JSON里面单引号改为双引号,并点击保存
没有语法错误就会在左侧展示
可以保存起来
里面就会展示出来了
检查 正确的话,先把aapium要打开,模拟器也要打开,再点击start session
此时可以看到,已经读出来了
原始框架和混合框架,这里我们选择混合的。
选择元素定位,定位到该元素
出现这个问题的原因是appium版本太低,定位不到元素,建议换成更高版本。Appium-windows-1.21.0-1.exe
可以把id拷出来
com.android.packageinstaller:id/permission_allow_button
看在脚本中能否实现。
#启动appium
driver=WebDriver('http://127.0.0.1:4723/wd/hub',caps)
#进行元素定位
#点击允许按钮
time.sleep(2)
driver.find_element(By.ID,'com.android.packageinstaller:id/permission_allow_button').click()
先把inspector关掉,因为它会占用模拟器,模拟器退回初始化界面。
然后脚本运行。可以看到这个按钮是点掉的,它又出来了另外的一个框。
#*****************************************
#v1.0:app独立自动化测试 脚本--初始化登录
#*****************************************
#导入类库
import time
from appium.webdriver.webdriver import WebDriver
from appium.webdriver.webdriver import By
#手机参数初始化
#查询程序包名的命令:adb shell dumpsys activity activities| findstr mFocusedActivity#设置appPackage:被测程序包名
caps={
'platformName':'Android', #设置platformName:手机系统名称Android
'platformVersion':'7.1.2', # #设置platformVersion:手机系统版本
'deviceName':'127.0.0.1:52001' , #设置deviceName:设备名称
'appPackage':'uni.UNI765428A', #设置appPackage:被测程序包名
'appActivity':'io.dcloud.PandoraEntry' #设置appActivity:被测程序活动名
}
#启动appium
driver=WebDriver('http://127.0.0.1:4723/wd/hub',caps)
#进行元素定位
#点击允许按钮
time.sleep(2)
driver.find_element(By.ID,'com.android.packageinstaller:id/permission_allow_button').click()
#允许电话管理
time.sleep(2)
driver.find_element(By.ID,'com.android.packageinstaller:id/permission_allow_button').click()
#输入后台服务器地址
time.sleep(5)
xpath_service='/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View[1]/android.view.View/android.widget.EditText'
servicepath='https://lefeiwisdom-3pt-2t6a7-www.vip.51env.net'
driver.find_element(By.XPATH,xpath_service).clear()
time.sleep(1)
driver.find_element(By.XPATH,xpath_service).send_keys(servicepath)
#点击确定按钮
time.sleep(3)
xpath_ok="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View[2]"
driver.find_element(By.XPATH,xpath_ok).click()
#点击验证码登录按钮
time.sleep(4)
xpath_check='/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View[4]'
driver.find_element(By.XPATH,xpath_check).click()
time.sleep(2)
#输入手机号码
xpath_phone='/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View[5]/android.view.View/android.widget.EditText'
# id_phone='c52abd0b-3c7b-4b6f-a2a0-f386d56bebd8'
driver.find_element(By.XPATH,xpath_phone).send_keys('13800138001')
time.sleep(2)
#输入验证码
xpath_checkcode='/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View[6]/android.view.View/android.widget.EditText'
driver.find_element(By.XPATH,xpath_checkcode).send_keys('111111')
#接受协议
xpath_allow='/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View[9]'
time.sleep(2)
driver.find_element(By.XPATH,xpath_allow).click()
#登录按钮
time.sleep(2)
xpath_login='/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View[8]'
driver.find_element(By.XPATH,xpath_login).click()
有时id定位是可以用的,有时只能用xpath,推荐使用xpath.
Appium Inspector定位工具界面介绍:
1、Selecte Elements:根据元素定位;用来识别元素
2、Swipe By Coordinates:根据坐标滑动页面;如果inspector界面没有展示全部,可以通过上滑展示到底部
3、Tap By Coordinates:根据坐标点击操作;inspector界面点击某个元素,可以跳转到该元素的界面,且app同步跳转
4、原生模式
5、混合模式,支持混合框架的元素定位
6、Back:返回
7、Refresh Source & Screenshot:刷新界面与截图
8、Start Recording:录制按钮,能自动生成自动化脚本
9、Search for element:在App Source中搜索元素
10、Quit Session & Close Inspector:退出会话或结束
11、ource:源代码显示区域
12、Actions:
13、Selected Element:被选中元素信息显示
Selected Element: 选中的元素对应的属性信息,这个就是我们查找定位元素的关键信息
index:索引
text:文本
class:类
package:包
content-desc:内容描述
checkable:可选
checked:选中
enabled:可用
focusable:可获得焦点
focused:获得焦点
scrollable:可滚动
long-clickable:可长点击
password:隐藏明文(密文显示)
selected:选中
bounds:界面(起始点坐标/终止点坐标)
resource-id:元素ID
Appium Inspector录制功能:
1、 点击 Start Recording 开启录制
2、点击 Selecte Elements 元素定位
3、选中 操作元素
4、 在Selected Element界面,点击tap(Tap-点击、Send Keys-写入值、Clear-清空)
5、在 Recorder 下可选择生成代码的语言,并展示在下方空白处