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中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
理论讲解python多进程并发编程
Feb 09 Python
django 实现电子支付功能的示例代码
Jul 25 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
django中的数据库迁移的实现
Mar 16 Python
基于Python中random.sample()的替代方案
May 23 Python
python3 循环读取excel文件并写入json操作
Jul 14 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 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
用libtemplate实现静态网页生成
2006/10/09 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
php获取文件大小的方法
2014/02/26 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
JS 控制CSS样式表
2009/08/20 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
通过实例解析js简易模块加载器
2019/06/17 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
python实现计算倒数的方法
2015/07/11 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
.net软件工程师面试题
2015/03/31 面试题
英语专业毕业生自荐信范文
2013/12/31 职场文书
《藏戏》教学反思
2014/02/11 职场文书
党员自我评议个人对照检查材料
2014/09/16 职场文书
运动会通讯稿600字
2015/07/20 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL