淘先锋技术网

首页 1 2 3 4 5 6 7

(3)drag拖拽事件

从⼀个元素滑动到另⼀个元素,第⼆个元素替代第⼀个元素原本屏幕上的位置。
drag_and_drop()方法说明:

drag_and_drop(origin_el, destination_el)

参数:
1.origin_el:滑动开始的元素
2.destination_el:滑动结束的元素

业务场景:

  1. 进⼊设置
  2. 模拟⼿指将存储菜单 滑动到 WLAN菜单栏位置

代码实现:

# 定位到存储菜单栏
el1 = driver.find_element_by_xpath("//*[contains(@text,'存储')]")

# 定位到WLAN菜单栏
el2 = driver.find_element_by_xpath("//*[contains(@text,'WLAN')]")

# 执⾏滑动操作
driver.drag_and_drop(el1,el2)

练习:

"""
1.学习目标
    掌握drag_and_drop滑动方法(熟悉)
2.操作步骤
    drag_and_drop方法  从一个元素拖拽到另一个元素上
    driver.drag_and_drop(origin_el,destination_el)
        origin_el         起始元素
        destination_el    终止元素
3.需求
    实现drag_and_drop方法
    在设置首页从”存储“滑动到“蓝牙“

4. 总结
    drag_and_drop方法
        操作对象 :  元素
        操作过程没有惯性。
"""
# 1.导入appium
import time
from appium import webdriver

# 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)

# 4.操作APP
# 定位”存储“和”蓝牙“
store = driver.find_element_by_android_uiautomator('new UiSelector().text("存储")')
blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')

# 从”存储“滑动到”蓝牙“
driver.drag_and_drop(store, blue_tooth)


# 6.关闭APP
time.sleep(3)
driver.quit()

(4)滑动方法小结

滑动方法名称实现方式是否有惯性
swipe传入坐标滑动有惯性(当持续时间足够长时,实现的效果和drag一致)
scroll传入元素滑动有惯性
drag传入元素滑动无惯性

(5)拓展:多次滑动

需求:实现多次滑动手机屏幕的效果。
代码如下:(多看里边的注意事项)

"""
1.学习目标
    掌握多次滑动操作(上面三种滑动方式,那种都可以)
2.操作步骤
    以scroll方式滑动为例。
3.需求
    在设置APP首页实现多次滑动(向上滑动)
    从存储滑动到蓝牙
    再从安全滑动到存储

"""

# 1.导入appium
import time
from appium import webdriver

# 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)

# 获取屏幕大小
size = driver.get_window_size()
print("设备屏幕大小:", size)
# 设备屏幕大小: {'width': 810, 'height': 1440}

# 4.操作APP

# 4.1 定位存储和蓝牙
store = driver.find_element_by_android_uiautomator('new UiSelector().text("存储")')
blue_tooth = driver.find_element_by_android_uiautomator('new UiSelector().text("蓝牙")')

# 4.2  从存储滑动到蓝牙
driver.scroll(store, blue_tooth, duration=5000)

# 4.3 定位安全
# 重点注意1:
# 因为安全这个元素在设置app的界面中没有显示出来,
# 如果你直接进行定位,就会报错,NoSuchElementException,
# 你需要等到滑动界面显示出安全这个元素,才能进行定位。
# 不用完全显示,只要某个元素在屏幕中出现了一点点部分,也可以用find_element找到该元素.
# 这里一定要注意。
safe = driver.find_element_by_android_uiautomator('new UiSelector().text("安全")')

# 4.4 从安全滑动到存储
driver.scroll(safe, store, duration=5000)

# 重点注意2
# 如果在演示的时候,发下第二次滑动的效果有问题(滑动距离很短)
# 原因是:
# find_element如果找到了某个元素,会将具体位置缓存在系统中;
# 只要不重新获取,即使该元素已经跑出屏幕外,但也会认为该元素在之前缓存的位置.
# (这是一个系统定位机制的问题)
# 所以第二次实际滑动的距离是:
# 从安全的位置滑动到,第一次滑动时存储所在的位置。
# 这里一定要注意。

# 所以通过上边的说明,如果我们需要进行连续的滑动操作时,
# 既然会存储元素的位置,我们直接两次从存储滑动到蓝牙操作,
# 不就解决了,多次等距离滑动的操作。
# 如下,执行两次存储滑动到蓝牙操作
# driver.scroll(store, blue_tooth, duration=5000)
# driver.scroll(store, blue_tooth, duration=5000)
# 如果需要多次,可以写一个for循环来执行多次。

# 我使用Android 7.1.1版本的系统,没有发现有元素位置缓存的现象,
# 所以直接正常写就好了,如果出现了上述注意2的现象,
# 这里我们知道是怎么回事就好了。

# 6.关闭APP
time.sleep(3)
driver.quit()

说明:
代码中注意事项2补充:
如果要解决这个问题,只需要对第二次的两个元素重新获取(也就是重新定位),再执行操作就解决了。
如上面的代码中,执行第二次滑动的时候,安全获取了,只需要在重新获取一下存储元素,第二次滑动就能正常操作了。

重点:配套学习资料和视频教学

那么在这里我也精心准备了上述大纲的详细资料在下方链接如下