(6)综合练习
需求:
1,封装上下左右滑动操作到一个工具类中。
2, 实现在滑动的过程中找到"时间和日期"元素,并点击进入该页面。(这个例子类似于Selenium中学习的聚焦元素)
封装滑动工具类:
# 1.导入appium
import time
from appium import webdriver
# 定义driver
def app_driver():
# 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.android.settings", # APP包名
"appActivity": ".Settings" # APP启动名
}
# 3.启动APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
return driver
# 把滑动操作封装成一个工具类
class AppSwipe:
# 初始化方法
# 需要一个全局的driver(相当于一个启动的app),
def __init__(self, driver):
self.driver = driver
# size是一个字典类型的数据,一个宽度,一个高度
self.size = self.driver.get_window_size() # 获取手机屏幕大小
"""
封装滑动方法:使用driver.swipe()方法
因为scroll滑动和drag拖拽是使用元素定位,左右滑动的时候可能实现不了。
因为没个设备的屏幕大小不一样,我们需要先获取屏幕的大小,在适用坐标定位。
"""
def swipeUp(self, t=5000, n=1):
'''
手势:向上滑动
:param duration:持续时间
:param n:滑动次数
:return:
'''
# 根据手机屏幕的宽高,来确定起始坐标位置
# 上下滑动水平x轴不变,屏幕的宽度*0.5 表示屏幕的中间
start_x = self.size['width'] * 0.5 # x坐标
# 手势向上滑动,y轴的坐标从大到小
start_y = self.size['height'] * 0.75 # 起点y坐标
end_y = self.size['height'] * 0.25 # 终点y坐标
for i in range(n):
self.driver.swipe(start_x, start_y, start_x, end_y, t)
def swipeDown(self, duration=5000, n=1):
'''
手势:向下滑动
:param duration:持续时间
:param n:滑动次数
:return:
'''
# 根据手机屏幕的宽高,来确定起始坐标位置
# 上下滑动水平x轴不变,屏幕的宽度*0.5 表示屏幕的中间
start_x = self.size['width'] * 0.5 # x坐标
# 手势向下滑动,y轴的坐标从小到大
start_y = self.size['height'] * 0.25 # 起始y坐标
end_y = self.size['height'] * 0.75 # 终点y坐标
for i in range(n):
self.driver.swipe(start_x, start_y, start_x, end_y, duration)
def swipLeft(self, duration=5000, n=1):
'''
手势:向左滑动
:param duration:持续时间
:param n:滑动次数
:return:
'''
# 根据手机屏幕的宽高,来确定起始坐标位置
# 手势向左滑动,x轴的坐标从大到小
start_x = self.size['width'] * 0.75
end_x = self.size['width'] * 0.25
# 左右滑动垂直y轴不变,屏幕的高度*0.5 表示屏幕的中间
start_y = self.size['height'] * 0.5
for i in range(n):
self.driver.swipe(start_x, start_y, end_x, start_y, duration)
def swipRight(self, duration=5000, n=1):
'''
手势:向右滑动
:param duration:持续时间
:param n:滑动次数
:return:
'''
# 根据手机屏幕的宽高,来确定起始坐标位置
# 手势向右滑动,x轴的坐标从小到大
start_x = self.size['width'] * 0.25
end_x = self.size['width'] * 0.75
# 左右滑动垂直y轴不变,屏幕的高度*0.5 表示屏幕的中间
start_y = self.size['height'] * 0.5
for i in range(n):
self.driver.swipe(start_x, start_y, end_x, start_y, duration)
if __name__ == '__main__':
driver = app_driver()
swipe = AppSwipe(driver)
swipe.swipeDown() # 手势:向下滑动
swipe.swipeUp(n=2) # 手势:向上滑动
time.sleep(2)
实现"时间和日期"元素的定位和点击:
# 1、导入刚刚封装好的滑动工具类app_swipe
from app_swipe import AppSwipe, app_driver
import time
# 2、获得driver驱动和工具类的实体类
driver = app_driver()
swipe = AppSwipe(driver)
# 3.操作APP--聚焦元素到"日期和时间"
# 如果设置app的界面中没有显示"日期和时间"元素,我们是无法定位的,
# 这个时候我们就执行向上滑动操作,
# 直到手机界面中显示了"日期和时间"元素,并且成功定位了该元素。
# 我们就执行点击操作,然后退出循环。即可执行更多的操作了。
while True:
try:
driver.find_element_by_android_uiautomator('new UiSelector().text("日期和时间")').click()
break
except:
# 向上滑动
AppSwipe(driver).swipe_up() # 向上滑动
# 4.关闭APP
time.sleep(3)
driver.quit()