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爬虫抓取手机APP的传输数据
Jan 22 Python
Python pymongo模块常用操作分析
Sep 01 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
Python中shapefile转换geojson的示例
Jan 03 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
Apr 05 Python
Python实现京东秒杀功能代码
May 16 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
Jan 15 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
python爬虫破解字体加密案例详解
Mar 02 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
escape unescape的php下的实现方法
2007/04/27 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
PHP7匿名类的用法示例
2019/04/05 PHP
Javascript 继承机制实例
2009/08/12 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
python之信息加密题目详解
2019/06/26 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
估算杭州有多少软件工程师
2015/08/11 面试题
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
应聘医药销售自荐书范文
2014/02/08 职场文书
公司股权转让协议书
2014/04/12 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
2015年春节标语口号
2014/12/09 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
村主任当选感言
2015/08/01 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书