appium学习笔记

appium学习笔记
第1节、2节课appium介绍和安装

开源、跨平台、多语言支持的移动应用自动化工具
测试对象
原生APP
混合APP
移动APP

APP运行环境
真实设备
虚拟设备

测试程序语言
python、java、ruby
测试程序运行平台

Windows、Linux、Mac、os

ios的应用、appiumserver必须要运行在苹果的机器上
MacBook、iMac

自动化原理:
测试程序发送http指令给appiumserver 然后驱动手机上appium的自动化模块,底层使用的各个平台提供的库如ios平台的xctest,安卓平台的UIAutomator,然后驱动APP并返回响应给运行程序

安装appium python-client 包
pip install appium-python-client

要确保安装3.7.0以后版本的selenium

import selenium
selenium.version #查看版本

如果版本是3.7.0之前
执行
pip isntall selenium -U

安装appium server

方法1:node.js &npm
npm install -g appium

方法2:
appium desktop #包含node.js appium server 的库 等

项目地址:https://github.com/appium/appium-desktop
下载地址:https://github.com/appium/appium-desktop/releases/tag/v1.6.1

Android SDK包

列出当前的虚拟机
emulator -list-avds

启动虚拟机
emulator @Nexus_5

环境变量配置:
ANDROID_HOME D:\tools\Android\sdk

D:\tools\python36\Scripts;D:\tools\python36;%SystemRoot%\system32;%SystemRoot%;
%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0;D:\svn\bin;
D:\tools\webDriver;D:\tools\Android\sdk\platform-tools;D:\tools\Android\sdk\platform-tools

第3、4节课元素定位与查找
查看apppackage 和appactivity
.\sdk\build-tools\xx\aapt.exe dump badging e:\toutiao.apk > e:\info.txt && e:\info.txt

安卓7.0可以使用如下方法:
adb shell “cmd package resolve-activity --brief 应用包名 | tail -n 1”
过滤指定包名的日志:
adb -d logcat com.fanxin.huangfangyi:*:v >d:\test.log
或者
adb logcat |findstr com.fanxin.huangfangyi >d:\t.log

session
appium 测试程序和APPium server之间的http请求都必须在一个sission中进行
session ID

选择元素的代码
和selenium 基本相同
find_element_by_xxx 符合条件的第一个元素,找不到抛出异常
find_elements_by_xxx 符合条件的所有元素的列表,找不到返回空列表
通过webdriver 查找范围是整个界面树形结构
通过webelement 查找范围是该节点的子节点

driver.find_element_by_xxx
driver.find_elements_by_xxx
ele.find_element_by_xxx
ele.find_elements_by_xxx

根据class name
class属性决定了界面元素的类型
如果
我们要查找的是某种类型的界面元素
而且这种类型的界面元素在当前界面中只有一个
driver.find_element_by_class_name(‘andriod.textview’)

根据ACCESSIBILITY ID
content-desc 属性时用来描述该元素的作用
如果
要查询的界面元素的content-desc 属性,在当前界面中唯一
driver.find_element_by_accessibility_id(‘unique name’)

如果有的话就使用该值进行定位

第5节、6节课选择操作元素2
选择元素的方法
在appium中,我们没法使用css,因为css是web专用的
appium支持xpath 来定位元素

对于一些复杂的元素的定位,我们可以用它

driver.find_element_by_xpath("//*[@resource-id=‘com.ibox.calculators:id/cv’]//android.widget.TextView[2]")

每个节点名对应class属性
不过xpath 相对不成熟,很多时候是正确的语法也不能找出元素来

tap 方法
click类似,都是针对点击界面
区别是,tap是针对坐标
难以用通常的方法定位元素的时候使用它进行定位

等待界面出现,只有界面元素出现才可以点击,如果没有该项,将点不到指定的坐标

driver.find_element_by_id(“io.manong.developerdaily:id/tv_from”)

点击 右下角 我的

driver.tap([(800,1170)],100) #如果要加多个坐标,就是driver.tap([(800,1170),(800,1170)],100) 100:点击的时候,手指在屏幕的停留时间,如果时间过长,就是长按操作

第7节、8节课选择操作元素
UIAutomator API 定位
前面的方法,底层都是通过UIAutomator API 去定位操作元素的
id
class name
accessibillity id
xpath

UIAutomator 测试框架提供了一组API来构建UI测试

利用UIAutomator api 控制测试设备
UIAutomator测试框架非常适合编写黑盒自动化测试
API就是库的编程接口application programming interface
uiselector 类就是用来选择web元素的

根据java代码去寻找元素
根据class name 和text 属性
code=‘new UiSelectorr().text(“我的”).className(“android.widget.text.viex”)’ #字符串必须用""

ele=driver.find_element_by_android_ulautomator(code)

根据属性resource id
‘new UiSelector().resourceid(“io.manong.developerdaily:id/theid”)’

try:
code = ‘new UiSelector().text(“我的”).className(“android.widget.TextView”)’
ele = driver.find_element_by_android_uiautomator(code)

ele.click()

index :表示是父元素的第几个节点
text :界面文本的值,属性是字符串 #作为检查点或者定位
resource-id :界面元素的id 唯一标识该元素的值 ,作为定位使用
class :相当于web元素中 tag属性,属于什么类型的节点
package :包名
content-desc:开发人员填写的描述信息
checkable :该元素是否可勾选
checked :是否目前已经勾选 通常用于设置项中
selected :是否已经选中了
bounds :左上角和右下角的坐标(像素的个数)

XPATH // 和[]

code = ‘new UiSelector().resourceId(“io.manong.developerdaily:id/tab_bar”).childSelector(new UiSelector().className(“android.widget.TextView”).instance(3))’
ele = driver.find_element_by_android_uiautomator(code)

childSelector #里面包含另外一个java定位元素,相当于嵌套在里面
instance #相当于选中符合元素中的第几个,()里面填入数字
index #该元素是父元素的第几个节点

//android.widget.LinearLayout[2] #该节点是其父节点的第二个节点

textContains(String text) #文本信息包含的都找出来
例:
code = ‘new UiSelector().textContains(“我的”)’
eles = driver.find_elements_by_android_uiautomator(code)

textMatches(String regex) #文本信息采用正则表达式的方式进行查找
例:
code = ‘new UiSelector().textMatches("^我的$")’
eles = driver.find_elements_by_android_uiautomator(code)

更多java代码的使用到的方法
详见:https://developer.android.google.cn/reference/android/support/test/uiautomator/UiSelector

动态获取元素的坐标
appium webdriver 的 swipe 方法
直接查看,估算操作坐标
先获取元素坐标,再分析操作坐标
location = ele.location 左上角坐标(dict:x,y) #location返回的是一个字典

sizel = ele.size 宽、高(dict:width,hight)
例:(横向滑动)
ele = driver.find_element_by_id(‘com.huawei.appmarket:id/banner’)
time.sleep(2)
s = driver.find_element_by_id(‘com.huawei.appmarket:id/fg_appicon’)
location = ele.location
size1 = ele.size
print(location, size1)
x1 = location[‘x’] + int(size1[‘width’] * 0.8)
x2 = location[‘x’] + int(size1[‘width’] * 0.2)
y = location[‘y’] + int(size1[‘height’] * 0.5)
for i in range(10):
driver.swipe(start_x=x1, start_y=y, end_x=x2, end_y=y, duration=500) duration :滑动的时间,4个坐标分别是起点坐标和终点坐标

    time.sleep(0.5)

操作不可见元素
先滑动到其可见
在操作该元素
获取全屏幕尺寸
screesize = driver.get_window_size()
screew = screesize[‘width’]
screenH =screensize[‘hight’]

例:(上下滑动)
screenSize = driver.get_window_size()
screenW = screenSize[‘width’]
screenH = screenSize[‘height’]

x = screenW / 2
y1 = int(screenH * 0.8)
y2 = int(screenH * 0.4)
driver.swipe(start_x=x, start_y=y1, end_x=x, end_y=y2, duration=300)

第9节、10节选择操作元素4
webview 的测试
混合应用
一部分是原生界面和代码、而另一部分是内嵌网页
比如微信、支付宝
内嵌了一个浏览器内核,由浏览器内核实现的
安卓应用中的内嵌的展示网页内容的模块、我们称之为webview

webview的自动化
APP 的修改编译
对webview对象加入 setwebcontentdebuggingenabled的调用

protected void onCreate(Budle savedInstanceState){
super.onCreate(savedInstanceState);
webview mywebview = (webview) findviewById(R.id.jcywebview);
mywebview.setwebContentDebuggingEnabled(true);
};

webview 的自动化 #前提是debug模式
webview 的内容不依赖 所在APP
只是打开一个url
直接用Chrome浏览器打开对应的网页
使用手机模式
appium自动化 webview

appium中把所有的界面环境称之为context
native 部分的context 名字一般为native_app
webview 部分的context则为WEBVIEW_XXX(应用的包名)

查看当前有哪些context
driver.contexts
而显示当前context的则是driver.current_context
例:

print(driver.contexts)
print(driver.current_context)

driver.switch_to.context('WEBVIEW_com.example.jcy.wvtest')  #切入H5页面

driver.find_element_by_id('index-kw').send_keys('松勤')

driver.find_element_by_id('index-bn').click()

driver.switch_to.context('NATIVE_APP')    #切入原生页面
driver.find_element_by_id('com.example.jcy.wvtest:id/navigation_dashboard').click()
time.sleep(2)
driver.find_element_by_id('com.example.jcy.wvtest:id/navigation_notifications').click()

如果H5页面和原生页面有交互,可以使用如下操作
远程调试
打开Chrome浏览器,输入chrome://inspect/#devices #要翻墙才可以的
然后使用手机打开webview ,刷新浏览器
然后点击inspect
通知查看
安卓的系统通知在通知栏
打开通知栏
driver.open_notifications()
查看通知内容
返回应用
driver.press_keycode(4) 关闭通知栏

数字的不同按键的定义见
https://developer.android.google.cn/reference/android/view/KeyEvent.html#KEYCODE_BRIGHTNESS_UP

https://developer.android.google.cn/reference/android/view/KeyEvent.html#KEYCODE_BACK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值