Appium桌面程序中的API及在Appium-Python-Client中的使用(二十三)

一、定位控件的API

1、 id定位
  • 通过检查器窗口,可以查看对象的id属性。
  • 使用方法(在生成驱动的前提下进行):
driver.find_element_by_id('com.tencent.mm:id/drq')
2、name定位
driver.find_element_by_name('登录')
3、class name定位
driver.find_element_by_class_name('android.widget.Button')
4、xpath定位
driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/an
droid.widget.LinearLayout/android.widget.FrameLayout/android.view.Vie
w/android.widget.FrameLayout/android.widget.LinearLayout/android.widg
et.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLa
yout/android.widget.Button[1]')
5、注意事项:
    1. name,classname以及xpath往往会获取多个元素,find_element_by_*方法只会返回找到的第一个,如果返回多个,使用find_elements_by_*方法。
    1. 个人觉得在原生app上不要使用xpath定位。

二、应用操作的API

官方问答:http://appium.io/docs/cn/writing-running-appium/appium-bindings/#_1

1、安装应用

安装应用到设备中,需要apk包的路径。

driver.install_app("D:\\android\\apk\\some.apk")
2、卸载应用
driver.remove_app("com.tencent.mm") # 填写你要卸载的app包名
3、关闭应用

关闭打开的应用,关闭desired capabilities中指定的app,所以不用传入参数。

driver.close_app
4、启动应用

启动desired capabilities中指定的app

driver.launch_app
5、检查是否安装
driver.is_app_installed('com.tencent.mm')
6、将应用置于后台

将当前活跃的应用程序发送到后台,这个方法需要传入参数,指定置于后台的时长。

driver.background_app(2)
7、重置

重置当前app

river.reset()

三、appium键盘操作的API

1、send_keys
url_input = driver.find_element_by_id(id_='com.android.browser:id/url').send_keys(''https://www.jetstar.com/cn/zh/home'')
2、press_keycode

appium扩展提供了一个press_keycode方法,该方法Android特有。需要传入一个参数。

driver.press_keycode(66)

下面提供Android keycode参考表:

  • 电话键
    KEYCODE_CALL 拨号键 5
    KEYCODE_ENDCALL 挂机键 6
    KEYCODE_HOME 按键Home 3
    KEYCODE_MENU 菜单键 82
    KEYCODE_BACK 返回键 4
    KEYCODE_SEARCH 搜索键 84
    KEYCODE_CAMERA 拍照键 27
    KEYCODE_FOCUS 拍照对焦键 80
    KEYCODE_POWER 电源键 26
    KEYCODE_NOTIFICATION 通知键 83
    KEYCODE_MUTE 话筒静音键 91
    KEYCODE_VOLUME_MUTE 扬声器静音键 164
    KEYCODE_VOLUME_UP 音量增加键 24
    KEYCODE_VOLUME_DOWN 音量减小键 25
  • 控制键
    KEYCODE_ENTER 回车键 66
    KEYCODE_ESCAPE ESC键 111
    KEYCODE_DPAD_CENTER 导航键 确定键 23
    KEYCODE_DPAD_UP 导航键 向上 19
    KEYCODE_DPAD_DOWN 导航键 向下 20
    KEYCODE_DPAD_LEFT 导航键 向左 21
    KEYCODE_DPAD_RIGHT 导航键 向右 22
    KEYCODE_MOVE_HOME 光标移动到开始键 122
    KEYCODE_MOVE_END 光标移动到末尾键 123
    KEYCODE_PAGE_UP 向上翻页键 92
    KEYCODE_PAGE_DOWN 向下翻页键 93
    KEYCODE_DEL 退格键 67
    KEYCODE_FORWARD_DEL 删除键 112
    KEYCODE_INSERT 插入键 124
    KEYCODE_TAB Tab键 61
    KEYCODE_NUM_LOCK 小键盘锁 143
    KEYCODE_CAPS_LOCK 大写锁定键 115
    KEYCODE_BREAK Break/Pause键 121
    KEYCODE_SCROLL_LOCK 滚动锁定键 116
    KEYCODE_ZOOM_IN 放大键 168
    KEYCODE_ZOOM_OUT 缩小键 169
  • 组合键
    KEYCODE_ALT_LEFT Alt+Left
    KEYCODE_ALT_RIGHT Alt+Right
    KEYCODE_CTRL_LEFT Control+Left
    KEYCODE_CTRL_RIGHT Control+Right
    KEYCODE_SHIFT_LEFT Shift+Left
    KEYCODE_SHIFT_RIGHT Shift+Right
  • 基本键
    KEYCODE_0 按键'0' 7
    KEYCODE_1 按键'1' 8
    KEYCODE_2 按键'2' 9
    KEYCODE_3 按键'3' 10
    KEYCODE_4 按键'4' 11
    KEYCODE_5 按键'5' 12
    KEYCODE_6 按键'6' 13
    KEYCODE_7 按键'7' 14
    KEYCODE_8 按键'8' 15
    KEYCODE_9 按键'9' 16
    KEYCODE_A 按键'A' 29
    KEYCODE_B 按键'B' 30
    KEYCODE_C 按键'C' 31
    KEYCODE_D 按键'D' 32
    KEYCODE_E 按键'E' 33
    KEYCODE_F 按键'F' 34
    KEYCODE_G 按键'G' 35
    KEYCODE_H 按键'H' 36
    KEYCODE_I 按键'I' 37
    KEYCODE_J 按键'J' 38
    KEYCODE_K 按键'K' 39
    KEYCODE_L 按键'L' 40
    KEYCODE_M 按键'M' 41
    KEYCODE_N 按键'N' 42
    KEYCODE_O 按键'O' 43
    KEYCODE_P 按键'P' 44
    KEYCODE_Q 按键'Q' 45
    KEYCODE_R 按键'R' 46
    KEYCODE_S 按键'S' 47
    KEYCODE_T 按键'T' 48
    KEYCODE_U 按键'U' 49
    KEYCODE_V 按键'V' 50
    KEYCODE_W 按键'W' 51
    KEYCODE_X 按键'X' 52
    KEYCODE_Y 按键'Y' 53
    KEYCODE_Z 按键'Z' 54

四、TouchAction操作的API

appium的辅助类,主要针对手势操作,比如滑动,长按,拖动等。跟selenium中的action chain相同。

1、按压控件

方法:press(self, el=None, x=None, y=None)
开始按压一个元素或者坐标点(x,y)。通过手指按压手机屏幕某个位置。
例如:

TouchAction(driver).press(x=231, y=498).release().perform()
  • release() 取消屏幕上的指针,也可以理解为松开手指
  • perform()执行操作发送到服务器
2、长按控件

方法:long_press(selef, el=None, x=None, y=None, duration=1000)
相比press()方法,long_press()多了一个参数,duration,以毫秒为单位,默认1000毫秒表示1秒钟。用法与press()相同
例如:

TouchAction(driver).long_press(x=231, y=498, duration=2000).release().perform()
3、点击控件

方法:tap(self, element=None, x=None, y=None, count=1)对一个元素或者控件执行点击操作。count代表点击次数。
例如:

TouchAction(driver).tap(x=231, y=498).release().perform()
4、移动

方法:move_to(self, el=None, x=None, y=None)将指针从上一个点移动到指定的元素或点。
例如:

TouchAction(driver).move_to(x=231, y=498).perform()
5、暂停

方法:wait(self, ms=0),暂停,单位为毫秒。

五、其他操作

1、息屏

方法:lock(self, seconds=None),息屏seconds秒,如果seconds=None会一直黑屏直到调用unlock方法。

driver.lock(seconds=3)
2、点亮屏幕

方法:driver.unlock(self)

3、收起键盘

方法:driver.hide_keyboard()

4、滑动

方法:def swipe(self, start_x, start_y, end_x, end_y, duration=None),模拟用户从一个点滑动到另一个点。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容