Appium
常用接口
定位一个元素
-
通过id定位
driver.find_element_by_id()
-
通过className
driver.find_element_class_name()
-
通过xpath
driver.find_element_by_xpath()
定位一组元素
-
通过id定位
driver.find_elements_by_id()
-
通过className
driver.find_elements_class_name()
-
通过xpath
driver.find_elements_by_xpath()
等待
-
隐式等待
所有的find操作都会等待
driver.implicitly_wait(10) # 10秒
-
显示等待
针对当前绑定的用户的等待,在5s内,每0.5s调用一次查找元素
wait = WebDriverWait(driver, 5) # 5s button = wait.until(lambda xx.find_element_by_xpath(""))
对比
-
作用域
显示等待单个元素,隐式等待全局元素
-
方法
显示等待在WebDriverWait类中,而隐式等待则直接通过driver实例化对象调用
-
sleep
固定写死时间,不推荐
-
报错
显示等待未找到报错TimeOutException,隐式等待报错NoSuchElementException
元素操作
-
点击
element.click()
-
清空文本框元素
element.clear()
-
输入内容
element.send_keys()
-
获取文本内容
element.text()
-
位置&大小
element.location #{'x':12, 'y': 12} element.size # {'height':192, 'width': 192}
-
获取元素属性值
key=“text” 返回text属性值
key="name"返回content-desc/text属性值
key="className"返回class属性,只有API>=18支持
key="resourceId"返回resource-id属性值,只有API>=18支持
element.get_attribute("key")
滑动与拖拽事件
-
swipe滑动事件
有距离误差,时间越短惯性越小
driver.swipe(start_x, start_y, end_x, end_y, duration) #持续时间 默认为0 ms
-
scroll滑动
从一个元素滑动到另一个元素,直到页面自动停止,有惯性
driver.scroll(element1, element2)
-
drag_and_drop拖拽事件
从一个元素滑动到另一个元素,第二个元素代替第一个元素原本屏幕上的位置,没有惯性
driver.drag_and_drop(element1, element2)
高级手势TouchAction
轻敲
要么传element,要么传X,Y坐标,count是执行次数,单击(1),双击(2)
TouchAction(driver).tap(element=None, x=None, y=None, count=1).perform()
按下和抬起
-
按下
pressure是ios的强制按下
TouchAction(driver) .press(el=None, x=None, y=None, pressure=float) .wait(2000) .perform()
-
抬起
TouchAction(driver) .release() .perform()
-
长按
TouchAction(driver) .long_press(el=None, x=None, y=None, duration=1000) .perform()
长按
TouchAction(driver)
.move_to(el=None, x=None, y=None)
.perform()
获取手机分辨率
driver.get_window_size() #{'height':2560, 'width':1440}
截图
dirver.get_screenshot_as_file("fileName.png")
获取&设置手机网络
-
获取网络
driver.network_connection
-
设置网络
value Data WIFI Airplane Mode 0 0 0 0 1 0 0 1 2 0 1 0 4 1 0 0 6 1 1 0 driver.set_network_connection()
按键操作
KEYCODE_UNKNOWN=0; | KEYCODE_DPAD_CENTER=23; | KEYCODE_R=46; | KEYCODE_MINUS=69; |
---|---|---|---|
KEYCODE_SOFT_LEFT=1; | KEYCODE_VOLUME_UP=24; | KEYCODE_S=47; | KEYCODE_EQUALS=70; |
KEYCODE_SOFT_RIGHT=2; | KEYCODE_VOLUME_DOWN=25; | KEYCODE_T=48; | KEYCODE_LEFT_BRACKET=71; |
KEYCODE_HOME=3; | KEYCODE_POWER=26; | KEYCODE_U=49; | KEYCODE_RIGHT_BRACKET=72; |
KEYCODE_BACK=4; | KEYCODE_CAMERA=27; | KEYCODE_V=50; | KEYCODE_BACKSLASH=73; |
KEYCODE_CALL=5; | KEYCODE_CLEAR=28; | KEYCODE_W=51; | KEYCODE_SEMICOLON=74; |
KEYCODE_ENDCALL=6; | KEYCODE_A=29; | KEYCODE_X=52; | KEYCODE_APOSTROPHE=75; |
KEYCODE_0=7; | KEYCODE_B=30; | KEYCODE_Y=53; | KEYCODE_SLASH=76; |
KEYCODE_1=8; | KEYCODE_C=31; | KEYCODE_Z=54; | KEYCODE_AT=77; |
KEYCODE_2=9; | KEYCODE_D=32; | KEYCODE_COMMA=55; | KEYCODE_NUM=78; |
KEYCODE_3=10; | KEYCODE_E=33; | KEYCODE_PERIOD=56; | KEYCODE_HEADSETHOOK=79; |
KEYCODE_4=11; | KEYCODE_F=34; | KEYCODE_ALT_LEFT=57; | KEYCODE_FOCUS=80;//Camerafocus |
KEYCODE_5=12; | KEYCODE_G=35; | KEYCODE_ALT_RIGHT=58; | KEYCODE_PLUS=81; |
KEYCODE_6=13; | KEYCODE_H=36; | KEYCODE_SHIFT_LEFT=59; | KEYCODE_MENU=82; |
KEYCODE_7=14; | KEYCODE_I=37; | KEYCODE_SHIFT_RIGHT=60; | KEYCODE_NOTIFICATION=83; |
KEYCODE_8=15; | KEYCODE_J=38; | KEYCODE_TAB=61; | KEYCODE_SEARCH=84; |
KEYCODE_9=16; | KEYCODE_K=39; | KEYCODE_SPACE=62; | KEYCODE_MEDIA_PLAY_PAUSE=85; |
KEYCODE_STAR=17; | KEYCODE_L=40; | KEYCODE_SYM=63; | KEYCODE_MEDIA_STOP=86; |
KEYCODE_POUND=18; | KEYCODE_M=41; | KEYCODE_EXPLORER=64; | KEYCODE_MEDIA_NEXT=87; |
KEYCODE_DPAD_UP=19; | KEYCODE_N=42; | KEYCODE_ENVELOPE=65; | KEYCODE_MEDIA_PREVIOUS=88; |
KEYCODE_DPAD_DOWN=20; | KEYCODE_O=43; | KEYCODE_ENTER=66; | KEYCODE_MEDIA_REWIND=89; |
KEYCODE_DPAD_LEFT=21; | KEYCODE_P=44; | KEYCODE_DEL=67; | KEYCODE_MEDIA_FAST_FORWARD=90; |
KEYCODE_DPAD_RIGHT=22; | KEYCODE_Q=45; | KEYCODE_GRAVE=68; | KEYCODE_MUTE=91; |
driver.press_keycode()
通知栏
只有开,没有关
要关闭的方法
- 滑动操作
- 按返回键 key=4
driver.open_notifications()