Appium常用API解析

1、current_activity:获取当前页面的activity名,比如com.taobao.tao.TBMainActivity 或 com.taobao.browser.BrowserActivity

如判断当前页面是否为收藏夹:

if driver.current_activity == "com.taobao.weex.WXActivity":
pass

2、page_source:返回页面的树形结构源码

如通过断言判断是否进入某个页面(该页面包含特定内容信息)

content = driver.page_source
try:
assert "我的淘宝" in content
except Exception as e:
raise e

3、contexts:返回当前会话的上下文(可以用来识别native和H5混合页面)

如在native和html5混合页面测试时,需要在native层和html5层切换,则首先需要得到context层的名称:

print(driver.contexts)

结果输出:
['NATIVE_APP', 'WEBVIEW_com.codoon.gps'] 然后使用driver.switch_to.context("NATIVE_APP"),就可以切换到native层了

4、find_element_by_xxx:查找当前页面的一个元素

ele = driver.find_element_by_name("foo")

还可以使用如下:
ele = driver.find_element(by="name", value="foo")

5、find_elements_by_xxx:查找当前页面的多个元素

eles = driver.find_elements_by_name("foo")

还可以使用如下:
eles = driver.find_elements(by="name", value="foo")

6、click():点击(在移动端的时候,会有200~300ms的延迟)

driver.find_element(by="xpath", value="//slhsjh").click()

7、tap():在特定位置上轻击,并保持一定的时间(可以减少click在移动端的延迟,提高了性能)

函数原型:tap(positions: List[Tuple[int, int]], duration: Optional[int] = None)

driver.tap([(100, 20), (100, 60), (100, 100)], 500)

click和tap都能实现单击的效果。其区别在于click是作用于driverelement的实例化对象,而tap是对屏幕上的坐标位置进行点击。前者对元素的位置变化并不敏感,而后者是针对具体的像素坐标点击,受分辨率和元素位置影响较大。

8、send_keys():调用设备的系统输入法键盘,输入文本内容

driver.find_element(by="xpath", value="//slhsjh").send_keys("Test")

9、swipe()、flick():滑动,从[start_x, start_y]划到[end_x, end_y]的过程。

区别:swipe比flick多了一个duration参数,有了这个参数就可以自定义从start到end动作的作用时间duration(单位为ms),以达到快速滑动或者慢速滑动的效果。

函数原型:

swipe(start_x: int, start_y: int, end_x: int, end_y: int, duration: int = 0)
flick(start_x: int, start_y: int, end_x: int, end_y: int) driver.swipe(100, 100, 100, 400, 500)
driver.flick(100, 100, 100, 400)

TouchAction类

TouchAction是APPium中封装的一个方法,主要是都手势控制的一些操作:点击、短按、长按、移动操作。

导入模块:from appium.webdriver.common.touch_action import TouchAction

TouchAction(driver):获取的是TouchAction对象

TouchAction对象的操作方法

release()和perform()方法一般跟添加的动作后面。

(1)release():通过将指针离开屏幕(释放指针)来结束动作

(2)perform():通过向服务器发送命令来执行动作

from appium.webdriver.common.touch_action import TouchAction

方法1:tap(element=None, x=None, y=None, count=1)
'''
模拟手势触摸元素或坐标点。
(1)element:要点击的元素
(2)x/y:移动到的屏幕坐标点,默认为空
''' 方法2:press(el=None, x=None, y=None, pressure=None)
'''
模拟手势短按元素或坐标。
(1)el:要点击的元素
(2)x/y:移动到的屏幕坐标点,默认为空
(3)pressure:压力; [iOS只]按作为强制触摸
''' 方法3:long_press(el=None, x=None, y=None, duration=1000)
'''
模拟手势长按元素或坐标点,持续duration时间。
(1)el:要点击的元素
(2)x/y:移动到的屏幕坐标点,默认为空
(3)duration:持续按压时间,单位为ms
''' 方法4:wait(ms=0)
"""
模拟动作后的等待的时间。
""" 方法5:move_to(el=None, x=None, y=None)
'''
模拟从一个点移动到指定元素或指定点。
(1)el: 移动到的元素,默认为空
(2)x/y:移动到的屏幕坐标点,默认为空
''' 方法6:release()
'''
通过将指针离开屏幕(释放指针)来结束动作。
''' 方法7:perform()
'''
通过向服务器发送命令来执行动作。
''' 例如:
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction ele = driver.find_element_by_xpath("//test")
TouchAction(driver).tap(element=ele).release().perform()
TouchAction(driver).tap(x=920, y=950).release().perform()
TouchAction(driver).press(el=ele).release().perform()
TouchAction(driver).long_press(el=ele).perform()
TouchAction(driver).wait(100)
TouchAction(driver).move_to(el=ele).release().perform()

MultiTouch类

MultiTouch类主要用于多点触控操作,可用于对界面执行放大、缩小操作。

导入模块:from appium.webdriver.common.multi_action import MultiAction

MultiAction(driver, element=None):获取的是MultiAction对象
driver:操作的设备
element:操作的元素,默认为None

1. MultiAction对象的操作方法

1.1、添加TouchAction对象到MultiAction对象

(1)add(*touch_actions)

touch_actions:1个或多个TouchAction对象(描述一个手指要执行的一系列动作)

1.2、执行储存在对象中的所有动作

(1)perform()

当perform执行被调用时,添加到多点触摸的所有触摸动作都被发送到appium,并执行,就像它们同时发生一样。appium首先执行所有触摸动作的第一个事件,然后执行第二个......。

# 初始化MultiAction对象
MultiActionObject = MultiAction(driver)
# 向MultiAction对象中添加动作
touchAction1 = TouchAction(driver).press(x=100, y=200)
touchAction2 = TouchAction(driver).press(x=100, y=300)
MultiActionObject.add(touchAction1, touchAction2)
# 执行操作
MultiActionObject.perform()

元素事件类API

(1)reset():重置应用(类似删除应用数据)
如通过driver.reset()来模拟实现首次登录app时出现的引导页需求:
driver.reset()

(2)is_app_installed():检查设备上是否已安装app,参数为package_name(appPackage)。返回True表示已安装,False表示未安装。

如判断是否已安装淘宝app:

if driver.is_app_installed("com.taobao.taobao"):
'''参数为package_name(appPackage)'''
pass
else:
pass

(3)install_app():安装特定路径的app;参数为app的本地或远程路径。

如若检测到未安装淘宝app,则安装该app:
if driver.is_app_installed("com.taobao.taobao"):
'''参数为package_name(appPackage)'''
pass
else:
driver.install_app(r"E:\AndroidTest\base.apk")

(4)remove_app():在设备上移除特定的app,参数为package_name(appPackage)。

如测试旧版本兼容用例时,需要先卸载新版本,再安装旧版本:
driver.remove_app("com.taobao.taobao_new")
driver.install_app("com.taobao.taobao_old")

(5)launch_app():在设备上启动desired capabilities中指定的app。

driver.launch_app()
(6)close_app():在设备上停止运行desired capabilities中指定的app。
driver.close_app()

(7)start_activity():在测试任务期间启动新的app活动,参数为appPackage和appActivity。

driver.start_activity('com.tencent.mobileqq','com.tencent.mobileqq.activity.SplashActivity')
print(driver.current_activity)

(8)wait_activity():隐式等待某个activity出现,参数分别为目标activity、超时时间、检测间隔(单位均为s)。

(类似于webdriver的WebDriverWait,且是Android特有的方法)

如在后续操作需要在当前activity为主页的前提下:
driver.wait_activity("homepage.activity", 15, 1)
pass

其它API

(1)get_screenshot_as_file():截屏并保存在特定路径,参数为图片路径和图片名称。
driver.get_screenshot_as_file('/Screenshots/foo.png')

(2)get_attribute():获取已知元素控件的属性值,参数为控件。

driver.find_element_by_xpath("//test").get_property("checkable")

driver.find_element_by_xpath("//test").get_property("text")

(3)background_app():将 app 置于后台,把当前应用放到后台去,参数为后台运行的时间,单位为s。

driver.background_app(5)

(4)pull_file():从设备中提取文件。

driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')

如在手机号注册时需要获取手机验证码,此时的实现方式是用另一个apk提取到验证码存在手机内存中,再用pull_file获取到验证码内容,使得appium可以将正确的验证码填入。

(5)push_file():推送文件到设备中去

driver.pull_file('Library/AddressBook/AddressBook.sqlitedb')```
(6)keyevent()、press_keycode():按键事件,向设备发送按键编码,参数为按键编码。(Android特有的方法)
driver.keyevent(66)         # 回车键
driver.press_keycode(3) # Home键

(7)hide_keyboard():收起键盘

driver.hide_keyboard()

(8)open_notifications():打开通知栏(仅Android特有)

driver.open_notifications()

(9)shake():模拟设备摇晃

driver.shake()

参考:https://www.jianshu.com/p/0e852c58609f

参考:https://www.cnblogs.com/7chentest/p/6396551.html

Appium之常用API的更多相关文章

  1. appium自动化常用API

    常用函数 一.获得信息类API (1)获取当前页面的activity名,比如: (.ui.login.ViewPage)  current_activity() 比如我们需要实现这个登录的功能时,主要 ...

  2. Appium driver常用API

    click driver.find_element implicitly_wait send_keys close quit get_window_size switch_to execute bac ...

  3. 7、Appium常用API

    嗯,官网已经介绍的很全了.会选几个常用API后期整理. Appium常用API地址:http://appium.io/docs/cn/writing-running-appium/appium-bin ...

  4. Appium常用API(二)

    接前面的常用API(一),本文接着介绍如下: 1.press_keycode press_keycode(self, keycode, metastate=None): Sends a keycode ...

  5. Robotframework-Appium 之常用API(一)

    上一遍隨筆(https://www.cnblogs.com/cnkemi/p/9639809.html)用Python + Robotframework + Appium對Android app小試牛 ...

  6. 基于appium的常用元素定位方法

    一.元素定位工具 app应用的元素使用的是控件定位,不同于web网页,web网页定位元素通常使用的是F12工具,那么在app当中我们则要借助其它的工具来辅助定位. 1.uiautomatorviewe ...

  7. html5 canvas常用api总结(一)

    1.监听浏览器加载事件. window.addEventListener("load",eventWindowLoaded,false); load事件在html页面加载结束时发生 ...

  8. compass General 常用api学习[Sass和compass学习笔记]

    compass 中一些常用api 包括一些浏览器hack @import "compass/utilities/general" Clearfix Clearfix 是用来清除浮动 ...

  9. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

随机推荐

  1. windows安装msys2 mingw64

    msys2包含mingw32和mingw64 步骤1 首选安装msys64 链接:https://pan.baidu.com/s/1l9Zfm4TE1Gg3c7tkaH6KeQ 安装到指定目录 步骤2 ...

  2. 报错:无效的列类型: 1111;must be specified for all nullable parameters.

    org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers ...

  3. 浏览器自动化的一些体会2 webBrowser控件之ajax

    上个帖子简要讨论了浏览器自动化的几种方法.现在讨论webBrowser控件使用中的一些问题.基本的操作就不详细说了,随便网上找个帖子或找本书都有介绍的.这里只写点网上似乎少有人总结过的内容,以及自己的 ...

  4. Android 重写物理返回键,在h5页面中返回上一个界面

    实现:Activity中放置webview,跳转到h5界面,点击返回键,不退出h5界面,而是返回上一个h5界面 /** * 改写物理按键--返回的逻辑,希望浏览的网页后退而不是退出浏览器 * @par ...

  5. 笔记:Windows Server2008R2服务安装

    Windows Server2008R2 服务安装 服务一:IIS,internet information services,互联网信息服务,微软开发的运行在Windows系统中互联网服务,提供了w ...

  6. 手把手教你使用VUE+SpringMVC+Spring+Mybatis+Maven构建属于你自己的电商系统之vue后台前端框架搭建——猿实战01

            猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...

  7. Redis高级项目实战,都0202年了,还不会Redis?

    导读 大家都听过1万小时定律,可事实真的是这样吗?做了1万小时的CRUD,不还只会CRUD吗,这年头不适当的更新自身下技术栈,出门和别人聊天吹牛的时候,都没拿不出手,(⊙o⊙)…Redis没入门的童鞋 ...

  8. Python Jinja2 Template: YAML File Cisco Example Tutorial

    原文链接:http://networkbit.ch/python-jinja-template/ template.txt如下: hostname {{ name }} interface Loopb ...

  9. Spring Security拦截器加载流程分析--练气中期

    写在前面 上回我们讲了spring security整合spring springmvc的流程,并且知道了spring security是通过过滤器链来进行认证授权操作的.今天我们来分析一下sprin ...

  10. 团队作业4:第四篇Scrum冲刺博客(歪瑞古德小队)

    目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...