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

appium学习笔记相关推荐

  1. appium学习笔记过程中遇到的一些问题汇总

    持续更新系列.. 刚开始学时,一个小小的问题都可能要耗费很多时间,甚至是导致从入门到放弃的直接原因hhhhh .所以写下此篇总结或许会帮到刚开始学习的你!~ 1.运行adb device报错,解决办法 ...

  2. Appium学习笔记2_Android获取元素篇

    在利用Appium做自动化测试时,最重要的一步就是获取对应的元素值,根据元素来对对象进行对应的操作,如果获得对象元素呢? Appium Server Console其实提供了一个界面对话框" ...

  3. Appium学习笔记17-手机操作API之分辨率

    #获取手机分辨率,返回字典类型 driver.get_window_size() 运行结果 代码: #导入库 from appium import webdriver import time from ...

  4. Appium 学习笔记 -- 1. 安装和验证

    文章目录 背景 安装步骤 1. 安装 appium 2. 安装 appium-doctor 3. 使用 appium-doctor 检测 appium 工作环境 4. 运行一个 android 测试 ...

  5. 史上最全 Appium 自动化测试从基础到框架实战精华学习笔记(一)

    本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. 对测试人来说,Appium 是非常重要的一个开源跨平台自动化测试工具,它允许测试人员在不同的平台(iOS.Android 等)使用同一套 API ...

  6. linux运维需要哪些网络知识,Linux运维学习笔记-网络技术知识体系总结

    jTemplates部分语法介绍 1.{#if} {#if |COND|}..{#elseif |COND|}..{#else}..{#/if} Examples: {#if 2*8==16} goo ...

  7. 学习笔记之 软件测试基础理论知识

    目录 一.什么是软件测试 二.测试对象 三.测试原则 四.测试流程(功能) 1. 了解产品功能需求 2. 制定测试计划 3. 编写测试用例 3.1 需求文档分析 3.2 功能模块划分 3.3 编写测试 ...

  8. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  9. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

最新文章

  1. UDP实现全双工聊天(聊天工具进阶)pyhton
  2. 拥抱 Java 8 并行流吧,速度飞起!
  3. python打印99乘法表_Python 实例:九九乘法表
  4. hbuilder热更新
  5. D3D 扎带 小样本
  6. STM32F1(Cortex M3内核)存储器映射
  7. 地信遥感行业可以考的证
  8. tesorflow2.1.0环境下,tf.keras使用Range优化器(RAdam+Lookahead)
  9. 上海理工大计算机学研究生怎么样,上海理工大学(专业学位)计算机技术考研难吗...
  10. 为什么提问能力很重要?
  11. 腾讯云服务器如何选择配置?
  12. fedora15 一些简单应用
  13. linux pdf 加水印,将动态水印添加到PDF
  14. QPushButton去掉虚线框(焦点框)
  15. 基于51单片机的信号发生器设计
  16. 婚姻对女人很重要,但远远不是我们的全部
  17. 我奋斗18年,和你或者咖啡没有任何关系
  18. 第144章 SQL函数 TO_DATE(二)
  19. Algorithm 4th environment setup
  20. 安卓开发实战(1)之程序员入门代码,Hello,world!

热门文章

  1. 【无标题】ES2022 个人笔记
  2. python 模拟微信浏览器请求_2020-03-06 python selenium 模拟访问网页检查更新并微信通知...
  3. 函数声明与函数表达式的提升问题
  4. mac定时执行python_mac下定时执行python程序(附不执行解决方案).md
  5. M1 Mac安装 arm 软件
  6. 把一个人的特点写具体作文_把一个人的特点写具体作文600字
  7. 从live555 实战中了解MakeFile
  8. oracle数据库系统学习,Oracle数据库学习第二天
  9. Python-期末练习
  10. [ISCC 2023] pwn部分