Appium混合页面点击方法tap的使用

2023-09-14 15:01:37

原生应用开发,是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发;HTML5(h5)应用开发,是利用Web技术进行的App开发。目前,市面上很多app都是原生和h5混合开发,这样做的好处在于:

1)开发效率高,节约时间同一套代码Android和IOS基本都可用。

2)更新和部署比较方便,不需要每次升级都要上传到App Store进行审核了,只需要在服务器端升级就可以。

3)代码维护方便、版本更新快,降低产品成本。(以上内容引用自百度)

使用appium对混和开发的app做自动化时,会碰到不少坑。最近在用appium操作app中h5页面时,碰到一个问题:已经切换到webview中并且定位到了元素,用click方法点击元素怎么都不起作用。这时候查看appium日志如图1,发现click方法已经执行了,但是手机上并没有执行这个动作。我以前用click方法是可以点击已定位的webview元素的,所以我找前端研发工程问了一下,找到了原因:在手机端用js操作H5页面时,click会有200-300ms延时,后面写的页面很多都采用封装好的tap来进行点击,这种情况下用click就不起作用。

图片

图 1

接下来我想到用原生中tap方法,先获取元素范围内坐标,再进行tap点击,代码如图2。结果在切到webview获取到元素中心坐标,使用tap方法时报错,因为webview中无法使用原生的tap方法。

图片

图 2

于是我在webview中定位好元素后切回原生后使用tap方法,但这个时候又碰到一个问题:由于web页面坐标系与手机原生坐标系不一致,同一个元素在webview中的坐标与在原生页面中的坐标不一致,切出webview后tap依然点击不到,这条路暂时也行不通了。

我想起appium中的webdriver是继承自selenium,但是手势操作会不会有不同呢,抱着试一试的心态查看了一下appium中的手势操作类TouchAction,发现几行注释如图2,

图片

图 3

原来原生中的tap方法是appium作者为了适应selenium而写的,于是我找到selenium中的TouchActions类,发现也有tap方法如图 3。注:

图片

图 4

该方法中只有element参数,没有坐标参数,参数为坐标时无法点击。
尝试着用selenium下的tap方法,成功实现,伪代码如下:

element = getElement(driver,locationType,locatorExpression)

#该方法为我自己封装的获取element方法,读者只需根据正常方法获取到元素即可。

tas = TouchActions(driver)

#实例化一个TouchActions对象tas.tap(element)

本来以为此问题已经解决,不料在运行第二次时,该方法也失效了,查看touch_actions中的代码如图5发现,手势操作需要用perform再执行一下,把action提交才会起作用,问题解决。

图片

图 5

附上源代码:

from selenium.webdriver.common.touch_actions import TouchActions
def tap_element(locationType, locatorExpression):
    try:
element = getElement(driver, locationType=locationType, locatorExpression=locatorExpression)        #element可根据自己的方式获取
tas = TouchActions(driver)
tas.tap(element).perform()
except Exception, e:
    raise e

    if __name__=='__main__':
launchApp_smy_noReset()     #启动app,此方法自己封装
sleep(10)     #留足够时间点击到调试页,也可用程序跳转到h5页面
switch_to_webview()    #切换到webview
tap_element('xpath','//*[@id="detail"]/div[4]/a[2]')

#调用刚封装好的tap_element方法
print '点击成功'
switch_to_native()    #切换到原生
print '切换成功'

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

更多推荐

腾讯mini项目-【指标监控服务重构】2023-08-22

今日已办50字项目价值和重难点项目价值通过将指标监控组件接入项目,对比包括其配套工具在功能、性能上的差异、优劣,给出监控服务瘦身的建议top3难点减少监控服务资源成本,考虑性能优化如何证明我们在监控服务差异、优劣方面的断言监控服务无感化,支持代码可扩展总监回复小而美的监控服务怎么为之小?怎么为之美?要小要美的关键点是什

vue内置组件Transition的详解

1.Transition定义Vue提供了两个内置组件,可以帮助你制作基于状态变化的过渡和动画:<Transition>会在一个元素或组件进入和离开DOM时应用动画。<TransitionGroup>会在一个v-for列表中的元素或组件被插入,移动,或移除时应用动画。简单地说,就是当元素发生变化,比如消失、显示时,添加动

c#对接webservice接口

方式一:需要填写地址,不能映射每个方法工具类usingSystem;usingSystem.CodeDom.Compiler;usingSystem.CodeDom;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Linq;usingSystem.N

灞桥论“健” 共话康养 灞桥康养论坛取得圆满成功

随着我国“老龄化”的加速,养老资源的匮乏已经成为一个十分严峻的社会问题。同时随着生活水平的大幅提高,康养产业应势而生。涵盖了养老、医疗、体育、养生、旅游等多个领域的康养产业,不仅要为老人们实现“老有所乐、身体健康”的理想,更是要让养老变成“享老”。活力灞桥共话康养9月15日,以“融合康养产业、乐享宜居灞桥”为主题的灞桥

程序猿比抓系列 - 搜索算法

必抓!搜索算法的深度剖析一:引言搜索算法是计算机科学中一类十分重要且常见的算法,它们在各个领域和应用场景中都有广泛的应用。搜索算法可以帮助程序员快速地在大规模的数据中找到目标元素,从而提高程序的效率和准确性。对于一个程序员来说,掌握各种搜索算法是必不可少的,可以帮助他们更好地解决实际问题,提高自己的编程水平。二:常见搜

搭建Docker开发环境_Linux

环境搭建文章目录环境搭建@[toc]DockerDocker运行权限Docker加速Docker容器创建Python版本切换版本工具RepoGit开发SDK代码拉取在线离线(推荐)Debian安装软件包编译打包问题技巧Dockersudoaptinstalldocker.ioDocker运行权限#添加dockergro

新的小伙伴加入,开始系统更新分享了

近几个月一直有一个好消息未跟大家分享,就是我们有新的小伙伴加入了,帅就不必说了,关键是对电控的理解那可不是一般的强,工程经验丰富,学术能力也是一等一的。我们有幸在一个公司工作,跟着一个企业导师学习技术,按照学校的叫法可以一定程度称为“同门”和“师兄弟”了。在我们的共事中,我也发现了他对电控领域相关的知识与技术有着深层次

(数组 / 字符串) 55. 跳跃游戏 ——【Leetcode每日一题】

❓55.跳跃游戏难度:中等给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。示例1:输入:nums=[2,3,1,1,4]输出:true解释:可以先跳1步,从下标0到达下标1,然后再从

数据分析方法-对比分析和用户画像(文末送书)

🤵‍♂️个人主页:@艾派森的个人主页✍🏻作者简介:Python学习者🐋希望大家多多支持,我们一起进步!😄如果文章对你有帮助的话,欢迎评论💬点赞👍🏻收藏📂加关注+对比分析事出反常必有妖、没有对比就没有好坏如果单纯给你一个数字500或者-500,你可能两眼一懵,并不能得出什么有价值结论。那如果告诉你该公司是

【HarmonyOS】如何实现应用内引用HSP模块中ArkUI组件

【关键字】HSP开发、引入HSP模块中ArkUI组件【写在前面】在使用ArkTS开发HarmonyOS应用时,通常会定义一些公共组件或公共接口功能,此时可以将这些功能封装到HSP模块中,然后通过在HSP模块中导出组件或接口方式在其他模块中引用,可以实现应用内部代码与资源的共享。这里主要讲如何在entry模块中引用HSP

D. Boris and His Amazing Haircut

Problem-D-Codeforces问题描述:剪发,将数组a减为数组b,有m个剪刀,每个剪刀只可以用一次且可以在任意区间内剪发,将长度大于mi的减为mi。现在有m数组,数组元素是第i个剪刀可以剪到mi,问能否将a减为b。洛谷翻译:思路:一定是先减最长的,再减短的。在减的时候会将这个a数组渐渐减成多个数组,再对这些数

热文推荐