前言:android手机大家都很熟悉,操作有按键、触摸、点击、滑动等,各种操作方法可以通过api的方法来实现。

参考博文:http://blog.csdn.net/bear_w/article/details/50330565

1.click

click(self):

Clicks the element(点击元素 )

用法 element.click()

driver.find_element_by_id('com.huawei.camera:id/shutter_button').click()  

2.shake

shake(self):

Shake the device(摇一摇手机 )
用法 driver.shake()

driver.shake() 

3.close

close(self):

Closes the current window(关闭当前窗口 )
用法 driver.close()

driver.close()

4.quit

quit(self):

Quits the driver and closes every associated window(退出脚本运行并关闭每个相关的窗口连接 )
用法 driver.quit()

driver.quit()   

5.size

size(self):

The size of the element【获取元素的大小(高和宽)】
new_size["height"] = size["height"]
new_size["width"] = size["width"]
用法 driver.element.size

driver.get_window_size()['width']
driver.get_window_size()['height']
函数的写法
#创建一个size方法获取手机屏幕大小x,y的函数def getSize():
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
return (x, y)
#调取函数
w_size=getSize()

6. swipe

swipe(self, start_x, start_y, end_x, end_y, duration=None):

用法 driver.swipe(x1,y1,x2,y2,500)

Swipe from one point to another point, for an optional duration(从A点滑动至B点,滑动时间为毫秒)
:Args: - start_x - x-coordinate at which to start (滑动起点x坐标)
- start_y - y-coordinate at which to start(滑动起点y坐标)
- end_x - x-coordinate at which to stop(滑动终点x坐标)
- end_y - y-coordinate at which to stop(滑动终点y坐标)
- duration - (optional) time to take the swipe, in ms.(滑动时间设定,单位ms,默认5ms)
:Usage: driver.swipe(start_x, start_y, end_x, end_y,duration)

swipe方法需要确定滑动的起点和终点坐标,由于不同手机的分辨率有可能不同,如果指定一个固定的坐标,在其他手机上不一定适用,所以最好结合上面的size方法来获取手机屏幕大小,使用相对坐标定位滑动。
android系统的坐标系,左上角是坐标原点,水平方向是x轴,垂直方向是y轴,如 下面代码是结合size方法对四个方向滑动举例:

#size方法获取屏幕大小
def getSize():
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
return (x, y) #屏幕向上滑动,x轴不变,y轴从大变小
def swipeUp(t):
w_size = getSize()
x1 = int(w_size[0] * 0.5) #获取x坐标,根据实际调整相乘参数 <br> y1 = int(w_size[1] * 0.8) #获取起始y坐标,根据实际调整相乘参数 <br> y2 = int(w_size[1] * 0.2) #获取终点y坐标,根据实际调整相乘参数
driver.swipe(x1, y1, x1, y2,t) #屏幕向下滑动,x轴不变,y轴从小变大
def swipeDown(t):
w_size = getSize()
x1 = int(w_size[0] * 0.5) #获取x坐标,根据实际调整相乘参数
y1 = int(w_size[1] * 0.2) #获取起始y坐标,根据实际调整相乘参数
y2 = int(w_size[1] * 0.8) #获取终点y坐标,根据实际调整相乘参数
driver.swipe(x1, y1, x1, y2,t) #屏幕向左滑动,y轴不变,x轴从大变小<br>def swipeLeft(t):
w_size = getSize()
x1 = int(w_size[0] * 0.8) #获取起始x坐标,根据实际调整相乘参数
x2 = int(w_size[0] * 0.05) #获取终点x坐标,根据实际调整相乘参数<br> y1 = int(w_size[1] * 0.5) #获取y坐标,根据实际调整相乘参数<br> driver.swipe(x1,y1,x2,y1,t) #屏幕向右滑动,y轴不变,x轴从小变大
def swipeRight(t):
w_size = getSize()<br> x1 = int(w_size[0] * 0.05) #获取起始x坐标,根据实际调整相乘参数<br> x2 = int(w_size[0] * 0.8) #获取终点x坐标,根据实际调整相乘参数<br> y1 = int(w_size[1] * 0.5) #获取y坐标,根据实际调整相乘参数<br> driver.swipe(x1,y1,x2,y1,t)<br>
#调用向上滑动,滑动时间参数为500ms
swipeUp(500)
sleep(2)<br>#调用向下滑动,滑动时间参数为500ms
swipeDown(500)<br>sleep(2)
#调用向左滑动,滑动时间参数为500ms
swipeLeft(500)
sleep(2)
#调用向右滑动,滑动时间参数为500ms
swipeRight(500) 

7.flick

flick(self, start_x, start_y, end_x, end_y):

driver,flick(start_x,start_y,end_x,end_y)

Flick from one point to another point(按住A点后快速滑动至B点)
:Args: - start_x - x-coordinate at which to start(滑动起点x坐标)
- start_y - y-coordinate at which to start(滑动起点y坐标) - end_x - x-coordinate at which to stop(滑动终点x坐标)
- end_y - y-coordinate at which to stop(滑动终点y坐标)
:Usage: driver.flick(, , , )

flick方法和swipe方法一样需要确定起点和终点坐标,只是没有时间参数,相对坐标的获取可以参考swipe方法
大概坐标的快速滑动:driver.flick(100,100,100,600)

结合size方法的快速滑动:

#size方法获取屏幕大小
def getSize():
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
return (x, y) #快速向上滑动,x轴不变,y轴从大变小
def flickUp():
w_size = getSize()
x1 = int(w_size[0] * 0.5) #获取x坐标,根据实际调整相乘参数
y1 = int(w_size[1] * 0.8) #获取起始y坐标,根据实际调整相乘参数
y2 = int(w_size[1] * 0.2) #获取终点y坐标,根据实际调整相乘参数
driver.flick(x1, y1, x1, y2) #调用快速向上滑动
flickUp()  

8. keyevent

keyevent(self, keycode, metastate=None):

用法 driver.keyevent(‘4’)

Sends a keycode to the device. Android only. Possible keycodes can be found in http://developer.android.com/reference/android/view/KeyEvent.html【发送按键码(安卓仅有),按键码可以上网址中找到 】
:Args:
- keycode - the keycode to be sent to the device
- metastate - meta information about the keycode being sent 

keyevent方法直接发送按键码就可了,如返回键操作

下面是按键码列表

电话键

 KEYCODE_CALL (拨号键) :
KEYCODE_ENDCALL (挂机键) :
KEYCODE_HOME (按键Home) :
KEYCODE_MENU (菜单键) :
KEYCODE_BACK (返回键) :
KEYCODE_SEARCH (搜索键) :
KEYCODE_CAMERA (拍照键) :
KEYCODE_FOCUS (拍照对焦键) :
KEYCODE_POWER (电源键) :
KEYCODE_NOTIFICATION (通知键) :
KEYCODE_MUTE (话筒静音键) :
KEYCODE_VOLUME_MUTE (扬声器静音键) :
KEYCODE_VOLUME_UP (音量增加键) :
KEYCODE_VOLUME_DOWN (音量减小键) :
控制键
KEYCODE_ENTER (回车键) :
KEYCODE_ESCAPE (ESC键) :
KEYCODE_DPAD_CENTER (导航键 确定键) :
KEYCODE_DPAD_UP (导航键 向上) :
KEYCODE_DPAD_DOWN (导航键 向下) :
KEYCODE_DPAD_LEFT (导航键 向左) :
KEYCODE_DPAD_RIGHT (导航键 向右) :
KEYCODE_MOVE_HOME (光标移动到开始键) :
KEYCODE_MOVE_END (光标移动到末尾键) :
KEYCODE_PAGE_UP (向上翻页键) :
KEYCODE_PAGE_DOWN (向下翻页键) :
KEYCODE_DEL (退格键) :
KEYCODE_FORWARD_DEL (删除键) :
KEYCODE_INSERT (插入键) :
KEYCODE_TAB (Tab键) :
KEYCODE_NUM_LOCK (小键盘锁) :
KEYCODE_CAPS_LOCK (大写锁定键) :
KEYCODE_BREAK (Break/Pause键) :
KEYCODE_SCROLL_LOCK (滚动锁定键) :
KEYCODE_ZOOM_IN (放大键) :
KEYCODE_ZOOM_OUT (缩小键) :
基本
KEYCODE_0 (按键'') :
KEYCODE_1 (按键'') :
KEYCODE_2 (按键'') :
KEYCODE_3 (按键'') :
KEYCODE_4 (按键'') :
KEYCODE_5 (按键'') :
KEYCODE_6 (按键'') :
KEYCODE_7 (按键'') :
KEYCODE_8 (按键'') :
KEYCODE_9 (按键'') :
KEYCODE_A (按键'A') :
KEYCODE_B (按键'B') :
KEYCODE_C (按键'C') :
KEYCODE_D (按键'D') :
KEYCODE_E (按键'E') :
KEYCODE_F (按键'F') :
KEYCODE_G (按键'G') :
KEYCODE_H (按键'H') :
KEYCODE_I (按键'I' ) :
KEYCODE_J (按键'J') :
KEYCODE_K (按键'K') :
KEYCODE_L (按键'L' ) :
KEYCODE_M (按键'M') :
KEYCODE_N (按键'N') :
KEYCODE_O (按键'O') :
KEYCODE_P (按键'P') :
KEYCODE_Q (按键'Q') :
KEYCODE_R (按键'R' ) :
KEYCODE_S (按键'S') :
KEYCODE_T (按键'T') :
KEYCODE_U (按键'U') :
KEYCODE_V (按键'V') :
KEYCODE_W (按键'W') :
KEYCODE_X (按键'X') :
KEYCODE_Y (按键'Y') :
KEYCODE_Z (按键'Z') :

9.send_keys

send_keys(self, *value):

用法 driver.element.send_keys(“中英”)

Simulates typing into the element【在元素中模拟输入(开启appium自带的输入法并配置了appium输入法后,可以输入中英文)】

:Args:

- value - A string for typing, or setting form fields. For setting file inputs, this could be a local file path.

      Use this to send simple key events or to fill out form fields::

      form_textfield = driver.find_element_by_name('username')

      form_textfield.send_keys("admin") This can also be used to set file inputs.
file_input = driver.find_element_by_name('profilePic') file_input.send_keys("path/to/profilepic.gif") # Generally it's better to wrap the file path in one of the methods # in os.path to return the actual path to support cross OS testing. # file_input.send_keys(os.path.abspath("path/to/profilepic.gif"))

send_keys方法需要在配置Capabilities信息时打开模拟键盘unicodeKeyboard与resetKeyboard,如下面代码举例:

from appium import webdriver
import time
desired_caps = {
'platformName' : 'Android',
'deviceName' : '76P4C15813005463',
'platformVersion' : '5.1',
#测试apk包名
'appPackage' : 'com.huawei.android.launcher',
#测试apk的launcherActivity
'appActivity' : '.Launcher',
#打开模拟键盘
'unicodeKeyboard' : True ,
'resetKeyboard' : True,
}
#进入android系统launcher
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(5)
#进入应用市场
driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'应用市场)]").click()
#使用模拟键盘输入'今日头条'
driver.find_element_by_id('com.huawei.appmarket:id/search_edit_text_view').send_keys(u"今日头条")
driver.find_element_by_id('com.huawei.appmarket:id/search_icon_view').click()
time.sleep(5)
driver.quit() 

10. press_keycode

press_keycode(self, keycode, metastate=None):

用法 driver.press_ keycode(‘4’)

Sends a keycode to the device. Android only. Possible keycodes can be found in http://developer.android.com/reference/android/view/KeyEvent.html.
发送按键码(安卓仅有),按键码可以上网址中找到
:Args:
- keycode - the keycode to be sent to the device
- metastate - meta information about the keycode being sent
dr.keyevent(‘’)与driver.press_ keycode(‘’) 功能实现上一样的,都是按了返回键

11. long_press_keycode

long_press_keycode(self, keycode, metastate=None):

用法 driver.long_press_keycode(‘4’)

Sends a long press of keycode to the device. Android only. Possible keycodes can be
found in http://developer.android.com/reference/android/view/KeyEvent.html.
发送一个长按的按键码(长按某键)
:Args:
- keycode - the keycode to be sent to the device
- metastate - meta information about the keycode being sent

12.tap

tap(self, positions, duration=None):

用法 driver.tap([(x,y),(x1,y1)],500)

Taps on an particular place with up to five fingers, holding for a certain time 【模拟手指点击(最多五个手指),可设置按住时间长度(毫秒)】
:Args:
- positions - an array of tuples representing the x/y coordinates of the fingers to tap. Length can be up to five.
- duration - (optional) length of time to tap, in ms
:Usage: driver.tap([(, ), (, ), (, )], )
当控件无法获取时,那我们就可以使用坐标用tap方法做点击操作,而且tap方法可以用于多点点击。
driver.tap([(,)],)

13.zoom

zoom(self, element=None, percent=200, steps=50):

用法 driver.zoom(element)

Zooms in on an element a certain amount (在元素上执行放大操作)
:Args:
- element - the element to zoom
- percent - (optional) amount to zoom. Defaults to %
:Usage: driver.zoom(element)

zoom方法用来模拟手机上的放大操作,主要是要确定element,具体例子和下面pinch方法一起讲。

el=driver.find_element_by_class_name('android.widget.RelativeLayout') driver.zoom(el,150,30) #percent参数和steps可以不写,不写保持默认数值  

14.pinch

pinch(self, element=None, percent=200, steps=50):

用法 driver.pinch(element)

Pinch on an element a certain amount 在元素上执行模拟双指捏(缩小操作)
:Args: - element - the element to pinch
- percent - (optional) amount to pinch. Defaults to %
- steps - (optional) number of steps in the pinch action
:Usage: driver.pinch(element)

pinch方法用来模拟手机上的缩小操作,主要是要确定element,下面举例进入图库查看图片时放大和缩小图片,使用uiautomatorviewer.bat工具来定位元素。

(1)进入图库,如下图所示,图库控件text是唯一的,所以我们采用by_name方法获取元素。

driver.find_element_by_name('图库')

(2)选择图库的一个文件夹,如下图所示,选择杂志锁屏,由于该元素text也是唯一的,所以使用by_name方法获取控件元素。

driver.find_element_by_name('杂志锁屏')

(3)选择一张图片,所下图所示,下面图片是一个整的布局,没有单独分开的控件元素,所以我们只能选择使用tap方法点击屏幕。

driver.tap([(300,500)],50) 

(4)放大和缩小图片,如下图所示,整个图片是一个布局,而且只有class信息,由于放大和缩小需要获得element,所以我们使用class_name的

方法获取整个布局作为元素。

el=driver.find_element_by_class_name('android.widget.RelativeLayout')
 driver.zoom(el)
  driver.pinch(el,200,50)

上面操作的具体脚本如下

from appium import webdriver
import time
desired_caps = {
'platformName' : 'Android',
'deviceName' : '76P4C15813005463',
'platformVersion' : '5.1',
#测试apk包名
'appPackage' : 'com.huawei.android.launcher',
#测试apk的launcherActivity
'appActivity' : '.Launcher',
}
#进入android系统launcher
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(5)
#进入图库
driver.find_element_by_name('图库').click()
driver.find_element_by_name('杂志锁屏').click()
driver.tap([(300,500)],50)
time.sleep(1)
el=driver.find_element_by_class_name('android.widget.RelativeLayout')
#放大图片
driver.zoom(el)
time.sleep(5)
#缩小图片
driver.pinch(el,200,50)
time.sleep(5)
driver.quit()   

15.scroll

scroll(self, origin_el, destination_el):

用法 :driver.scroll(el1,el2)

Scrolls from one element to another
从元素origin_el滚动至元素destination_el
:Args:
- originalEl - the element from which to being scrolling
- destinationEl - the element to scroll to
:Usage:
driver.scroll(el1, el2)

16. drag_and_drop

drag_and_drop(self, origin_el, destination_el):

用法 :driver.drag_and_drop()

Drag the origin element to the destination element
将元素origin_el拖到目标元素destination_el
:Args:
- originEl - the element to drag
- destinationEl - the element to drag to

17. hide_keyboard

hide_keyboard(self, key_name=None, key=None, strategy=None):

用法 :driver.hide_keyboard()

Hides the software keyboard on the device. In iOS, use `key_name` to press a particular key, or `strategy`. In Android, no parameters are used.
隐藏键盘,iOS使用key_name隐藏,安卓不使用参数
:Args:
- key_name - key to press
- strategy - strategy for closing the keyboard (e.g., `tapOutside`)

17.lock

lock(self, seconds):

用法 :driver.lock()

Lock the device for a certain period of time. iOS only.
锁屏一段时间 iOS专有
:Args:
- the duration to lock the device, in seconds

18.contexts

contexts(self):

用法 :driver.contexts()

Returns the contexts within the current session.
返回当前会话中的上下文,使用后可以识别H5页面的控件
:Usage:
driver.contexts

19. current_context

current_context(self):

用法 :driver.current_context()

Returns the current context of the current session.
返回当前会话的当前上下文
:Usage:
driver.current_context 

APPIUM API整理(python)---操作类的更多相关文章

  1. 【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)

    注:这里的服务是指Windows 服务. ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带 ...

  2. APPIUM API整理(python)---其他辅助类

    App运行类 1.current_activity current_activity(self): 用法: print(driver.current_activity()) Retrieves the ...

  3. APPIUM API整理(python)---元素查找

    最近在学习自动化框架appium,网上找一些API相关资料整理了一下 1.find_element_by_id find_element_by_id(self, id_): Finds element ...

  4. MongoDB API和python操作

    安装 下载mongodb的版本,两点注意 根据业界规则,偶数为稳定版,如1.6.X,奇数为开发版,如1.7.X 32bit的mongodb最大只能存放2G的数据,64bit就没有限制 到官网,选择合适 ...

  5. Appium(七):Appium API(一) 应用操作

    1. 应用操作 本章所罗列的方法主要针对应用的操作,如应用的安装.卸载.关闭.启动等. 把前面的启动代码放在这里,后面只展示不同的部分. # coding:utf-8 from appium impo ...

  6. Appium移动自动化测试-----(十二)appium API 之 TouchAction 操作

    Appium的辅助类,主要针对手势操作,比如滑动.长按.拖动等. 1.按压控件 方法: press() 开始按压一个元素或坐标点(x,y).通过手指按压手机屏幕的某个位置. press(WebElem ...

  7. Appium移动自动化测试-----(十一)appium API 之键盘操作

    模拟键盘输入也是非常重要的操作.这一小节来介绍那些关于键盘的操作. 1.sendKeys()方法 方法: sendKeys() 用法: driver.findElements(By.name(&quo ...

  8. Appium移动自动化测试-----(十)appium API 之上下文操作

    其实上下文的操作主要针对于混合应用.啥是混合应用,简单来说就是APP用里面嵌入网页.Android上的浏览器就属于混合应用. 1.获取当前上下文 方法: getContext() 获取当前所有的可用的 ...

  9. Appium移动自动化测试-----(十三)appium API 之其他操作

    其它操作针对移动设备上特有的一些操作. 1.熄屏 方法: * lockDevice() 点击电源键熄灭屏幕. 在iOS设备可以设置熄屏一段时间.Android上面不带参数,所以熄屏之后就不会再点亮屏幕 ...

随机推荐

  1. gcc/g++实战之动态链接库与静态链接库编写

    函数库一般分为静态库和动态库两种. 静态库: 是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了.其后缀名一般为”.a”. 动态库: 与之相反, ...

  2. 在ASP.NET MVC3 中利用JSONP跨域登录WEB系统

    在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复登陆.每次登录都需要输入用户名和密码.最近比较流行的就 ...

  3. Mybatis 二级缓存脏读

    脏读的产生 Mybatis的二级缓存是和命名空间绑定的,所以通常情况下每一个Mapper映射文件都有自己的二级缓存,不同的mapper的二级缓存互不影响.这样的设计一不注意就会引起脏读,从而导致数据一 ...

  4. 【BZOJ3931】[CQOI2015]网络吞吐量 最大流

    [BZOJ3931][CQOI2015]网络吞吐量 Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为 ...

  5. vue父子组件传值

    1.父组件向子组件传值 例如app.vue是父组件,v-header.vue是子组件,实现app向v-header传值父组件需要自定义自己的title值, 子组件v-header内容 <temp ...

  6. String 转 List<Map<String, Object>>

    public static List<Map<String, Object>> toListMap(String json){ List<Object> list ...

  7. curl post CURLOPT_POSTFIELDS

    PHP: curl_setopt - Manual http://php.net/manual/en/function.curl-setopt.php CURLOPT_POST TRUE to do ...

  8. JavaScript 入门之常见对象

    常见对象 1. Object 对象 2. String 对象 3. Array 对象 4. Date 对象 5. Number 对象 6. 自定义对象 with 语句 为了简化对象调用内容的书写 格式 ...

  9. XP系统中IIS访问无法显示网页,目前访问网站的用户过多。终极解决办法

    无法显示网页 目前访问网站的用户过多. -------------------------------------------------------------------------------- ...

  10. 某游戏应用的redis 数据库结构设计(转)

    add by zhj: 搜了一下作者,原来之前是网易的大牛.2011年的文章,有些老了,很多地方可以将string类型键转为hash类型,这样更节省内存,将key聚合在一起,也更简练. 原文:http ...