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)
相关推荐
CryptoRzz9 分钟前
欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档
java·服务器·开发语言·数据库·区块链
久未11 分钟前
Pytorch autoload机制自动加载树外扩展(Autoload Device Extension)
人工智能·pytorch·python
java1234_小锋26 分钟前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 使用Keras.Model来定义模型
python·深度学习·tensorflow·tensorflow2
Learn Beyond Limits31 分钟前
TensorFlow Implementation of Content-Based Filtering|基于内容过滤的TensorFlow实现
人工智能·python·深度学习·机器学习·ai·tensorflow·吴恩达
java1234_小锋31 分钟前
TensorFlow2 Python深度学习 - 函数式API(Functional API)
python·深度学习·tensorflow·tensorflow2
Never_Satisfied31 分钟前
在JavaScript / HTML中,div容器在内容过多时不显示超出的部分
开发语言·javascript·html
Y2003091632 分钟前
使用 PyTorch 实现 MNIST 手写数字识别
python
马尚来38 分钟前
移动端自动化测试Appium,从入门到项目实战Python版
python
天才测试猿1 小时前
WebUI自动化测试:POM设计模式全解析
自动化测试·软件测试·python·selenium·测试工具·设计模式·测试用例
艾莉丝努力练剑1 小时前
【C++STL :stack && queue (一) 】STL:stack与queue全解析|深入使用(附高频算法题详解)
linux·开发语言·数据结构·c++·算法