Appium中scroll和drag_and_drop根据元素位置滑动


Posted in Python onFebruary 15, 2022

背景

我们在操作APP应用时,有些需要从一个元素滑动到另外一个元素时,这时候我们无法确定坐标,所以swipe 根据坐标滑动方式就无法使用了,如下图:从 课堂直播 上滑到 直播公开课 位置

Appium中scroll和drag_and_drop根据元素位置滑动


这时候我们就需要使用其他滑动方式,我们想到可以根据元素进行滑动,Appium 里面根据元素来进行滑动的方式主要方法为 scrolldrag_and_drop

scroll 介绍

说明

从一个元素滚动到另一个元素,只能是两个元素之间的滑动。

方法详情

def scroll(self: T, origin_el: WebElement, destination_el: WebElement, duration: Optional[int] = None) -> T:
        """Scrolls from one element to another

        Args:
            origin_el: the element from which to being scrolling
            destination_el: the element to scroll to
            duration: a duration after pressing originalEl and move the element to destinationEl.
                Default is 600 ms for W3C spec. Zero for MJSONWP.

        Usage:
            driver.scroll(el1, el2)

        Returns:
            Union['WebDriver', 'ActionHelpers']: Self instance
        """

        # XCUITest x W3C spec has no duration by default in server side
        if self.w3c and duration is None:
            duration = 600

        action = TouchAction(self)
        if duration is None:
            action.press(origin_el).move_to(destination_el).release().perform()
        else:
            action.press(origin_el).wait(duration).move_to(destination_el).release().perform()
        return self

参数:

  • origin_el - 要滚动的起始元素
  • destination_el - 要滚动到的结束元素
  • duration - 持续时间,单位毫秒,默认为 600 ms

操作场景

  • 进入网易云首页
  • 从课堂直播滑动到直播公开课位置

关键代码实现

# 定位到课堂直播元素
el1 = driver.find_element(AppiumBy.XPATH, "//*[@text='课堂直播']").click()

# 定位到直播公开课元素
el2 = driver.find_element(AppiumBy.XPATH, "//*[@text='直播公开课']").click()

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

说明

操作过程有 惯性,需要添加duration参数,参数值越大,惯性越小。

drag_and_drop 介绍

说明

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

方法详情

def drag_and_drop(self: T, origin_el: WebElement, destination_el: WebElement) -> T:
        """Drag the origin element to the destination element

        Args:
            origin_el: the element to drag
            destination_el: the element to drag to

        Returns:
            Union['WebDriver', 'ActionHelpers']: Self instance
        """
        action = TouchAction(self)
        action.long_press(origin_el).move_to(destination_el).release().perform()
        return self

参数:

  • origin_el - 要滑动页面的起始元素
  • destination_el - 要滑动页面到结束元素

操作场景

  • 进入网易云首页
  • 从课堂直播滑动到直播公开课位置

关键代码实现

# 定位到课堂直播元素
el1 = driver.find_element(AppiumBy.XPATH, "//*[@text='课堂直播']").click()

# 定位到直播公开课元素
el2 = driver.find_element(AppiumBy.XPATH, "//*[@text='直播公开课']").click()

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

说明

不能设置持续时间,没有惯性

滑动和拖拽使用场景选择

滑动和拖拽无非就是考虑是否具有“惯性”,以及传递的参数是“元素”还是“坐标”。

  • scroll:有 “惯性” ,传入 “元素”,可以通过设置duration参数来进行控制惯性大小
  • drag_and_drop:无 “惯性” ,传入 “元素”
  • swipe:有 “惯性” ,传入 “坐标”,可以通过设置duration参数来进行控制惯性大小

说明: 添加duration参数,参数值越大,惯性越小

到此这篇关于Appium中scroll和drag_and_drop根据元素位置滑动的文章就介绍到这了,更多相关Appium 元素滑动内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python解析模块(ConfigParser)使用方法
Dec 10 Python
跟老齐学Python之通过Python连接数据库
Oct 28 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
Python通用函数实现数组计算的方法
Jun 13 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
python 实现return返回多个值
Nov 19 Python
python map比for循环快在哪
Sep 21 Python
python模拟点击在ios中实现的实例讲解
Nov 26 Python
Python如何把不同类型数据的json序列化
Apr 30 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
python 远程执行命令的详细代码
Feb 15 #Python
python 详解turtle画爱心代码
python分分钟绘制精美地图海报
基于PyQT5制作一个桌面摸鱼工具
Feb 15 #Python
python接口测试返回数据为字典取值方式
Feb 12 #Python
Python socket如何解析HTTP请求内容
Feb 12 #Python
python全面解析接口返回数据
Feb 12 #Python
You might like
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
python实现文件名批量替换和内容替换
2014/03/20 Python
python批量提取word内信息
2015/08/09 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
乌克兰在线药房:Аптека24
2019/10/30 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
联谊活动策划书
2014/01/26 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
服装设计师求职信
2014/06/04 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
绿色小区申报材料
2014/08/22 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
详解nodejs内置模块
2021/05/06 NodeJs
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers