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中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
python+pyqt5实现24点小游戏
Jan 24 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
详解python的argpare和click模块小结
Mar 31 Python
在python中修改.properties文件的操作
Apr 08 Python
python模拟斗地主发牌
Apr 22 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
Python之字典对象的几种创建方法
Sep 30 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
mysql 字段类型说明
2007/04/27 PHP
php设计模式小结
2013/02/15 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
vue调用本地摄像头实现拍照功能
2020/08/14 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python中的urllib模块使用详解
2015/07/07 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
python 内置模块详解
2019/01/01 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
国际经济贸易专业推荐信
2013/11/06 职场文书
机电一体化专业推荐信
2013/12/03 职场文书
代办社保委托书范文
2014/10/06 职场文书
人力资源部工作计划
2019/05/14 职场文书
ant design vue的form表单取值方法
2022/06/01 Vue.js