Python自动化测试---Appium

常用adb命令

获取界面名:adb shell dumpsys window windows | grep mFocusedApp

获取包名+界面名:adb shell dumpsys activity activities

查看已连接系统:adb devices

连接模拟器:adb connect IP:端口号

python-driver命令

前置代码,基本通用

python 复制代码
appium_url = 'http://127.0.0.1:4723/wd/hub'#apppium IP+端口号

desired_caps = {
    'platformName':'Android', #系统
    'platformVersion':'12.0', #系统版本号
    'deviceName':'Android Emulator',#设备名称
    'appPackage':'com.dragon.read',#要启动的包名
    'noReset': True,
    'appActivity': '.pages.main.MainFragmentActivity', #要启动的界面
    'unicodeKeyboard':True, #支持中文
    'resetKeyboard':True  #支持中文
}

driver = webdriver.Remote(appium_url,desired_caps) #启动

输出当前程序包名和界面名

python 复制代码
print(driver.current_package) #包名
print(driver.current_activity) #界面名

跳转到某个app界面,("包名","界面名")

python 复制代码
driver.start_activity('包名','.界面名')

关闭app

python 复制代码
driver.close_app() #只是关闭了当前程序,driver对象还在
driver.quit() #直接关闭driver对象,并且关闭所有程序
driver.terminate_app(appPackage)#关闭指定程序app

#判断APP是否安装,如果未安装 则安装,已安装 则卸载

python 复制代码
if driver.is_app_installed('com.netease.uu'):#判断是否安装的app包名
    #如已安装,则卸载;
    driver.remove_app('com.netease.uu')#要卸载app的包名
else:
    #未安装,则安装:
    driver.install_app('/Users/username/Downloads/110_774da3cfdcb9c020323ae298da84cda3.apk') #电脑内的安装包路径

回到后台3秒,在返回界面

python 复制代码
driver.background_app(3)

元素等待

  • 显式等待
    针对对所有定位元素设置为不同时间值的使用
  • 隐式等待
    针对对全局所有定位元素设置同一个时间值
python 复制代码
#显式等待,只针对单个元素,元素被找到也会继续等待,不常用,浪费时间
time.sleep(5)

#在等待的20秒时间内,每3秒找一次
WebDriverWait(driver,20,3)

#隐式等待,所有定位元素的超时时间设置为同一个,超时报异常通知,
#元素只要找到了就继续往下走 不再等待
driver.implicitly.wait(10)

元素点击

python 复制代码
driver.find_element_by_id("元素定位").click()

输入框输入

python 复制代码
driver.find_element_by_id("元素定位").send_keys("输入内容")

输入框清空

python 复制代码
driver.find_element_by_id("元素定位").clear()

#建议可以直接把driver.find_element_by_id("元素定位")赋予变量,直接接收:

input_text = driver.find_element_by_id("元素定位")

input_text.click()
input_text.send_keys("输入内容")
input_text.clear()

获取元素文本内容

python 复制代码
input_text = driver.find_element_by_id("元素定位")
print(input_text.text)

获取元素位置和大小

python 复制代码
input_text = driver.find_element_by_id("元素定位")
print(input_text.location)
print(input_text.size)

获取元素的属性名和属性值

python 复制代码
login_enable = driver.find_element_by_id("登陆元素定位")
print(login_enable.get_attribute("value")) #value:要获取的元素属性
print(login_enable.get_attribute("text"))
print(login_enable.get_attribute("resourceID"))
print(login_enable.get_attribute("className"))

滑动和拖拽事件

1.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)

1.2滑动事件(scroll)有惯性

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

参数:

origin_el:滑动开始的元素

destination_el:滑动结束的元素

⬇️

driver.scroll( origin_el, destination_el )

1.3拖拽事件(drag_and_drop)无惯性

从第一个元素滑动到另一个元素,并且第二元素代替第一个元素原本屏幕上的位置

参数:

origin_el:滑动开始的元素

destination_el:滑动结束的元素

⬇️

driver.drag_and_drop( origin_el, destination_el )

高级手势TouchAction

1.1 手指轻敲

模拟手指对元素或坐标点击后的快速抬起

参数:

element:元素

x:x坐标

y:y坐标

⬇️

TouchAction(driver) . tap("定位元素") . perform()

1.2 按下和抬起

模拟手指按下和抬起

参数:

element:元素

x:x坐标

y:y坐标

⬇️

python 复制代码
#按下
TouchAction(driver) . press("定位元素") . perform()

#抬起
TouchAction(driver) . press("定位元素").release().perform()
1.3 等待操作

模拟手指暂停操作

参数:

ms:暂停的毫秒数

⬇️

python 复制代码
TouchAction(driver).tap("定位元素").wait(2000).release().perfrom()
1.4 长按操作

参数:

element:元素

x:x坐标

y:y坐标

duration:长按时间,单位:ms

⬇️

python 复制代码
TouchAction(driver).long_press("定位元素",duration=2000).perfrom()
1.5 移动操作

模拟手指移动的操作,比如 手势密码 需要先按下 在移动

参数:

element:元素

x:x坐标

y:y坐标

⬇️

python 复制代码
#可以move_to很多次,坐标可以通过Automator 放大窗口得到
TouchAction(driver).press("定位元素").move_to("x坐标","y坐标").move_to("x坐标","y坐标").release().perfrom()

手机操作

1.1 获取手机分辨率

需要根据当前设备的分辨率来计算点击和滑动坐标

python 复制代码
#获取手机分辨率
size = driver.get_window_size()
print(size)
1.2 手机截图

参数:

filename:指定路径下指定格式的图片

⬇️

python 复制代码
driver.get_creenshot_as_file("screen.png")
1.3 获取设置手机网络
python 复制代码
#获取手机网络
wifi = driver.network_connection
print (wifi)


#设置手机网络
#参数:connectionType:网络类型

driver.set_network_connection("输入网络类型")
#connectionType:0,1,2,4,6
#0无网,1飞行模式,2Wi-Fi,4流量,6Wi-Fi+流量
1.4 发送键到设备

模拟返回键或者home键

参数:

keycode:发送给设备的代码

metastate:关于被发送代码的源信息,一般默认

keycode代码可参考: https://blog.csdn.net/Betray391/article/details/142108054

⬇️

python 复制代码
driver.press_keycode("发送给设备的代码")
1.5 操作手机通知栏
python 复制代码
#打开手机通知栏
driver.open_notifications()

#但并没有关闭通知栏的方法,需要使用滑动方法关闭通知栏
driver.swipe("x坐标","y坐标")

#或者使用返回键,进行关闭通知栏
driver.press_keycode(4)
相关推荐
DanielYQ24 分钟前
LCR 001 两数相除
开发语言·python·算法
yngsqq29 分钟前
037集——JoinEntities连接多段线polyline和圆弧arc(CAD—C#二次开发入门)
开发语言·c#·swift
Zԅ(¯ㅂ¯ԅ)31 分钟前
C#桌面应用制作计算器进阶版01
开发语言·c#
过期的H2O233 分钟前
【H2O2|全栈】JS进阶知识(七)ES6(3)
开发语言·javascript·es6
一路冰雨43 分钟前
Qt打开文件对话框选择文件之后弹出两次
开发语言·qt
松树戈1 小时前
JS推荐实践
开发语言·javascript·ecmascript
瑞雨溪1 小时前
java中的this关键字
java·开发语言
vener_1 小时前
LuckySheet协同编辑后端示例(Django+Channel,Websocket通信)
javascript·后端·python·websocket·django·luckysheet
封步宇AIGC1 小时前
量化交易系统开发-实时行情自动化交易-4.2.3.指数移动平均线实现
人工智能·python·机器学习·数据挖掘
互联网杂货铺1 小时前
自动化测试基础知识总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例