Appium语法知识点(第一篇)

一、元素定位操作API

1.定位一个元素

(1)driver.find_element_by_id(值)

传入的参数:resource-id的值
(2)driver.find_element_by_class_name(值)

传入的参数:class的值
(3)driver.find_element_by_xpath(值)

传入的参数:xpath表达式

例:driver.find_element_by_xpath("//*[@content-desc='收起']")

里面的content-desc是定位的类型,收起是值

注:定位到这个值的第一个元素

2.定位一组元素

在1中element变成elements,就可以定位到这个值的所有元素

3.定位元素的注意点

示例

使用find_element_by_xx或者find_elements_by_xx的方法,分别传入一个没有的"特征"会有什么结果?

小结

1.如果使用find_element_by_xx方法,如果传入一个没有的特征,会报NoSuchElementException的错误
2.如果使用find_elements_by_xx方法,如果传入一个没有的特征,不会报错,会返回一个空列表

二、元素等待

1.应用场景

可能由于一些原因,我们想找的元素并没有立刻出来,此是结果直接定位可能会报错,比如以下原因:

1.由于网络速度原因

2.服务器处理请求原因

3.电脑配置原因

2.隐式等待

关键方法:

1.通过driver对象调用implicitly_wait方法
例:driver.implicitly_wait(10) ##意思是在10s内等待定位的元素出现
2.设置超时时间

作用:

1.在设置了超时时间之后,后续所有的定位元素的方法都会在这个时间内等待元素的出现
2.如果出现了,直接进行后续操作
3.如果没有出现,报错:NoSuchElementExcepition

3.显式等待

关键方法:

1.关键类:WebDriverWait
例:
from selenium.webdriver.support.ui import WebDriverWait
#显式等待(对单个定位的元素)
click_agree = WebDriverWait(driver,5,1).until(lambda x:x.find_element_by_id("com.taobao.taobao:id/provision_positive_button"))#寻找同意按钮
#5代表等待5秒,1代表每1秒寻找一次元素,不填1则默认为0.5秒寻找一次元素
click_agree.click()#点击同意按钮
2.关键方法:WebDriverWait对象中的until的方法

作用:

1.在设置了显示等待之后,可以等待一个超时时间,在这个超时时间之内进行查找,默认每0.5秒找一次
2.0.5秒的频率是可以设置的
3.一但找到这个元素,直接进行后续操作
4.如果没有找到,报错:TimeOutException

三、元素操作API

1.点击元素操作

关键方法:

click()
例;
driver.find_element_by_id("com.taobao.taobao:id/provision_positive_button").click()

2.对输入框进行文字输入操作

关键方法:

send_keys("要输入的文字")
例:
driver.find_element_by_id("com.taobao.taobao:id/provision_positive_button").send_keys("要输入的文字")

注意点:

默认输入中文是有问题的,需要在连接手机的参数中加多两行代码
desired_caps['unicodeKeyboard'] = True # 使用unicodeKeyboard的编码方式来发送字符串
desired_caps['resetKeyboard'] = True  # 将键盘给隐藏起来

3.对输入框进行文字的清空操作

关键方法:

clear()

4.获取元素的位置和大小

search_button = driver.find_element_by_id("xxxxx")
print(search_button.location) #获取这个元素的X和y轴坐标
print(search_button.location["x"])#获取这个元素的x轴坐标
print(search_button.location["y"])#获取这个元素的y轴坐标
print(search_button.size)#获取这个元素图标的宽高
print(search_button.size["width"])#获取这个元素图标的宽
print(search_button.size["high"])#获取这个元素图标的高

注意点

1.location和size最后获得的都是一个字典,前者key为x和y,后者key为width和high
2.获取的数据类型都是int

5.获取元素的属性值

关键方法:
get_attribute("value")
eles = driver.find_element_by_id("xxxxx")
for i in eles:
    print(i.get_attribute("enabled"))#获取这个元素属性名为enabled的属性值
    print(i.get_attribute("clickable"))#获取这个元素属性名为clickable的属性值

注意点

填入get_attribute("value")
value = 'text'返回text的属性值
value = 'name'返回content-desc/text属性值
value = 'className'返回class属性值,只有API ==> 18才支持
value = 'resourceId'返回resource-id属性值,只有API ==> 18才支持

四、滑动和拖拽事件

1.swipe滑动事件

概念:

从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动

方法名

参数:
start_x:  起点x轴坐标
start_y:  起点y轴坐标
end_x:    终点x轴坐标
end_y:    终点y轴坐标
duration: 滑动这个操作一共持续的时间长度,单位:ms
driver.swipe(start_x,start_y,end_x,end_y,duration=None)

注意点

时间越长,惯性越小
时间越短,惯性越大

2.scroll滑动事件

概念

从一个元素滑动到另一个元素,直到页面自动停止

方法名

参数
origin_el:  滑动开始的元素
destination_el:  滑动结束的元素
driver.scroll(orgin_el,destination_el)

示例

save_button = driver.find_element_by_id("xxx")
more_button = driver.find_element_by_id("xxx")
driver.scroll(save_button,more_button)

3.drag_and_drop拖拽事件

和scroll方法相似

方法名

参数
origin_el:  滑动开始的元素
destination_el:  滑动结束的元素
driver.drag_and_drop(orgin_el,destination_el)

五、高级手机TouchAction

注意:先导入包

from appium.webdriver.common.touch_action import TouchAction 

使用步骤

1.创建TouchAction对象
2.通过对象调用想执行的手势
3.通过perform()执行操作

1.手指轻敲操作

应用场景

模拟手指对某个元素或坐标按下并快速抬起。比如,固定点击(100,100)的位置

方法名

参数
element:  元素
x:        x坐标
y:        y坐标
TouchAction(driver).tap(element=None,x=None,y=None).perform()

示例

方法一:
TouchAction(driver).tap(x=453,y=1104).perform() #用坐标轻敲点击
方法二:
ele = driver.find_element_by_id("com.taobao.taobao:id/provision_positive_button")
TouchAction(driver).tap(element=ele).perform()#用元素定位轻敲点击

2.按下和抬起操作

应用场景

模拟手指一直按下,模拟手指抬起。可以用来组合撑轻敲或者长按的操作

方法名

模拟手指对元素或者坐标按下操作
参数
element:  元素
x:        x坐标
y:        y坐标
TouchAction(driver).press(element=None,x=None,y=None).perform()
模拟手指对元素或者坐标抬起操作
TouchAction(driver).release().perform()

示例:

TouchAction(driver).press(x=453,y=1104).perform() #按下
time.sleep(3) #停3秒
TouchAction(driver).release().perform() #抬起

3.等待操作

应用场景

模拟手指等待,比如按下后等待5秒之后再抬起

方法名

模拟手指暂停的操作
参数
ms:  暂停的毫秒数
TouchAction(driver).wait(ms=0).perform()

示例

TouchAction(driver).press(x=453,y=1104).wait(3000).release().perform()

4.长按操作

应用场景

模拟手指对元素或坐标的长按操作。比如,长按某个按钮弹出菜单

方法名

参数
element:  元素
x:        x坐标
y:        y坐标
duration  长按时间,毫秒
TouchAction(driver).long_press(element=None,x=None,y=None,duration=1000).perform()

示例

TouchAction(driver).long_press(x=453,y=1104,duration=1000).release().perform()

5.移动操作

应用场景

模拟手指移动操作,比如,手势解锁需要先按下,再移动

方法名

element:  元素
x:        x坐标
y:        y坐标
TouchAction(driver).move_to(element=None,x=None,y=None).perform()

示例

图案解锁
TouchAction(driver).press(x=453,y=1104).move_to(x=897,y=987).move_to(x=665,y=897).release().perform()

六、手机操作API

1.获取手机分辨率

应用场景

自动化测试可能会需要根据当前设备的屏幕分辨率来计算一些点击或者滑动的坐标

方法名

driver.get_window_size()

示例

print(driver.get_window_size())

2.手机截图

应用场景

有些自动化操作可能没有反应,但并不报错,此时我们就可以将操作过后的关键情况,截图留存,后期也可以根据图片发现问题。

方法名

参数
filename:  指定路径下,指定格式的图片
get_screenshot_as_file(filename)

示例

driver.get_screenshot_as_file(D:\android-sdk\screen.jpg)

3.获取手机网络

属性名

driver.network_connection

示例

print(driver.network_connection)

4.设置当前网络

示例

driver.network_connection(1)
#看函数方法,1则为飞行模式

延伸

from appium.webdriver.connectiontype import ConnectionType
#判断有没有用流量
if driver.network_connection == ConnectionType.DATA_ONLY:
    print(1)
else:
    print(0)

5.发送键到设备

方法名

参数
keycode:  发送给设备的关键代码
metastate:  关于背发送的关键代码的元信息,一般为默认值
driver.press_keycode(keycode,metastate=None)

注意点

按键对应的编码,可以在百度搜索关键字“android keycode”

示例

#点击三次音量加,再点击返回
driver.press_keycode(24)
driver.press_keycode(24)
driver.press_keycode(24)
driver.press_keycode(4)

6.操作手机的控制栏

方法名

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