#Python# Appium API整理
2018-05-13 本文已影响668人
我叫GTD
从各方搜罗出来的,如有侵权请联系立即删除。
另附上参考网址(大部分Copy的,自己也遍历了一遍其内容):
https://testerhome.com/wiki/apiumpythonapichinese
至于其中的"find_element_by_"方法,个人建议用id,在我做爬虫的时候,大公司的网站每个功能点都有与之对应的id,现在从测试的角度来看,确实是一个明智的方法,利于管理,也利于进行测试。所以,从开发那拿到的文档应该是很详尽的(中大型公司)。此外,采用id会稍微提高些测试脚本的性能。
总之,尽量采用同一种方式来,便于日后管理,也便于他人查看。
# -*- coding: utf-8 -*-
from appium import webdriver
desired_caps = dict()
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '19'
desired_caps['deviceName'] = '192.168.99.100:5555'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
'''
API for appium
'''
# contexts(self) 返回当前会话中的上下文,使用后可以识别H5页面的控件
a = driver.contexts
# current_context(self) 返回当前会话的当前上下文
b = driver.current_context
# context(self) 返回当前会话的当前上下文。
c = driver.context
# find_element_by_ios_uiautomation(self, uia_string) 通过iOS uiautomation查找元素
driver.find_element_by_ios_uiautomation('.element()[1].cells()[2]')
# find_element_by_accessibility_id(self, id) 通过accessibility id查找元素
driver.find_element_by_accessibility_id('id')
# scroll(self, origin_el, destination_el) 从元素origin_el滚动至元素destination_el
driver.scroll(el1, el2)
# drag_and_drop(self, orgin_el, destination_el) 将元素origin_el拖到目标元素destination_el
driver.drag_and_drop(el1, el2)
# tap(self, positions, duration=None) 模拟手指点击(最多五个手指),可设置按住时间长度(毫秒)
driver.tap([(100, 20), (100, 60), (100, 100)], 500)
# swipe(self, start_x, start_y, end_x, end_y, duration=None) 从A点滑动至B点,滑动时间为毫秒
driver.swipe(90, 80, 120, 120, 1000)
# flick(self, start_x, end_x, end_y) 按住A点后快速滑动至B点
driver.flick(20, 30, 80, 90)
# pinch(self, element=None, percent=200, steps=50) 在元素上执行模拟双指捏(缩小操作)
driver.pinch(element)
# zoom(self, element=None, percent=200, steps=50) 在元素上执行放大操作
driver.zoom(element)
# reset(self) 重置应用(类似删除应用数据)
driver.reset()
# hide_keyboard(self, key_name=None, key=None, strategy=None) 隐藏键盘,iOS使用key_name隐藏,安卓不使用参数
driver.hide_keyboard()
# keyevent(self, keycode, metastate=None) 发送按键码(安卓仅有),按键码可以上网址中找到
driver.keyevent('4') #返回键
# press_keycode(self, keycode, metastate=None) 发送按键码(安卓仅有),按键码可以上网址中找到
driver.press_keycode('4') #返回键
# current_activity(self) 获取当前的activity
d = driver.current_activity()
# wait_activity(self, activity, timeout, interval=1) 等待指定的activity出现直到超时(秒),interval为扫描间隔1秒
driver.wait_activity('.activity.xxx', 5, 1)
# background_app(self, seconds) 后台运行app多少秒后再运行
driver.background_app(5)
# is_app_installed(self, bundle_id) 检查app是否有安装,返回True/False
driver.is_app_installed('com.xxx.xxx')
# install_app(self, app_path) 安装app,app_path为安装包路径
driver.install_app('c:/xxx/xxx.apk')
# remove_app(self, app_id)
driver.remove_app('com.xxx.')
# launch_app(self) 启动app
driver.launch_app()
# close_app(self) 关闭app
driver.close_app()
# start_activity(self, app_package, app_activity, **opts) 在测试过程中打开任意活动。如果活动属于另一个应用程序,该应用
# 程序的启动和活动被打开。这是一个安卓的方法
driver.start_activity(app_package, app_activity)
# lock(self, seconds) 锁屏一段时间 iOS专有
driver.lock(5)
# shake(self) 摇一摇手机
driver.shake()
# open_notifications(self) 打系统通知栏(仅支持API 18 以上的安卓系统)
driver.open_notifications()
# network_connection(self) 返回网络类型 数值
e = driver.network_connection
# set_network_connection(self, connectionType) 设置网络类型
from appium.webdriver.connectiontype import ConnectionType
driver.set_network_connection(ConnectionType.WIFI_ONLY)
# available_ime_engines(self) 返回安卓设备可用的输入法
f = driver.available_ime_engines
# is_ime_active(self) 检查设备是否有输入法服务活动。返回真/假。
g = driver.is_ime_active()
# activate_ime_engine(self, engine) 激活安卓设备中的指定输入法,设备可用输入法可以从“available_ime_engines”获取
driver.activate_ime_engine('com.android.inputmethod.latin/.LatinIME')
# deactivate_ime_engine(self) 关闭安卓设备当前的输入法
driver.deactivate_ime_engine()
# active_ime_engine(self) 返回当前输入法的包名
h = driver.active_ime_engine
# toggle_location_services(self) 打开安卓设备上的位置定位设置
driver.toggle_location_services()
# set_location(self, latitude, longtitude, altitude) 设置设备的经纬度
driver.set_location(60, 120, 200)
# tag_name(self) 返回元素的tagName属性, 经实践返回的是class name
i = driver.find_element_by_id('id').tag_name
# text(self) 返回元素的文本值
j = driver.find_element_by_name('name').text
# click(self) 点击元素
driver.find_element_by_class_name('class_name').click()
# submit(self) 提交表单
driver.find_element_by_accessibility_id('id').submit()
# clear(self) 清除输入的内容
driver.find_element_by_id('id').clear()
# get_attribute(self, name) 可获取:字符串类型(name, text, className, resourceId),
# 布尔类型(如果无特殊说明, get_attribute 里面使用的属性名称和 uiautomatorviewer 里面的一致)
driver.find_element_by_id('id').get_attribute('name')
# is_selected(self) 返回元素是否选择。可以用来检查一个复选框或单选按钮被选中。
driver.find_element_by_id('id').is_selected()
# is_enabled(self) 返回元素是否可用 True / False
driver.find_element_by_id('id').is_enabled()
# is_displayed(self) 此元素用户是否可见。简单地说就是隐藏元素和被控件挡住无法操作的元素
# (仅限 Selenium,appium是否实现了类似功能不是太确定)
driver.find_element_by_id('id').is_displayed()
'''
find_element_by_
find_elements_by_
......
'''
# send_keys(self, *value) 在元素中模拟输入(开启appium自带的输入法并配置了appium输入法后,可以输入中英文)
driver.find_element_by_id('id').send_keys('haha')
# size(self) 获取元素的大小(高和宽)
k = driver.find_element_by_id('id').size
# value_of_css_property(self, property_name) CSS属性
# location(self) 获取元素左上角的坐标
m = driver.find_element_by_id('id').location
# rect(self) 元素的大小和位置的字典
# screenshot_as_base64(self) 获取当前元素的截图为Base64编码的字符串
img = driver.find_element_by_id('id').screenshot_as_base64
# execute_script(self, script, *args) 在当前窗口/框架(特指 Html 的 iframe )同步执行 javascript 代码。
# 你可以理解为如果这段代码是睡眠5秒,这五秒内主线程的 javascript 不会执行
driver.execute_script('document.title')
# execute_async_script(self, script, *args) 插入 javascript 代码,只是这个是异步的,
# 也就是如果你的代码是睡眠5秒,那么你只是自己在睡,页面的其他 javascript 代码还是照常执行
driver.execute_async_script('document.title')
# current_url(self) 获取当前页面的网址。
n = driver.current_url
# page_source(self) 获取当前页面的源。
o = driver.page_source
# close(self) 关闭当前窗口
driver.close()
# quit(self) 退出脚本运行并关闭每个相关的窗口连接
driver.quit()