范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Appium常用操作之微信滑屏触屏操作

  一、滑屏操作
  不需要看到欢迎页面,直接做里面的后续操作就好了。也就是 我想记住一些用户的习惯,  不要像第一次访问一样,有一个重置与否,给它关闭了。 # 重置与否 desired_caps["noReset"]=True 1.访问之后,马上就滑屏可以吗?
  不可以。先等待首页有个元素出现,再去滑屏。滑屏操作需要时间,模拟器或者真机执行操作更需要时间。如果直接滑动 2 次,第一次滑动效果还没展示出来就直接滑动第二次了,就会看到看不懂得现象。所以这种情况下就要加上time。 2.连续实现 2 次滑屏#从右向左滑 driver.swipe(start_x,start_y,end_x,end_y,200) time.sleep(1) driver.swipe(start_x,start_y,end_x,end_y,200) 3.代码# 微信 app 安卓 from appium import webdriver import time from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.mobileby import MobileBy  desired_caps={} # 平台类型 desired_caps["platformName"]="Android" # 平台版本号 desired_caps["platformVersion"]="7.0" # 设备名称 desired_caps["deviceName"]="XPUDU17713003790" # app 包名 desired_caps["appPackage"]="com.tencent.mm" # app 入口 acitivity desired_caps["appActivity"]="com.tencent.mm.ui.LauncherUI" # 重置与否 desired_caps["noReset"]=True  # aapt dump badging 包名 # 连接 Appium server。前提:appium desktop 要启动。有监听端口。 # 将 desired_caps 发送给 appium server。打开 app driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)  # ANDROID_UIAUTOMATOR 这个是一种定位表达式,用其它的表达式也是可以的。 loc=(MobileBy.ANDROID_UIAUTOMATOR,"new UiSelector().text("通讯录")") WebDriverWait(driver,30).until(EC.visibility_of_element_located(loc))  #height、width size= driver.get_window_size() start_x=size["width"]*0.9 start_y=size["height"]*0.5  end_x=size["width"]*0.1 end_y=size["height"]*0.5  #从右向左滑 # 时间长短需要根据实际情况自己来调试,避免没滑过去,代码就执行完毕了。 driver.swipe(start_x,start_y,end_x,end_y,300) time.sleep(2) driver.swipe(start_x,start_y,end_x,end_y,300) 二、模拟触屏
  滑屏也是触屏实现的。手指在屏幕上点点点,在 Appium 中提供了专门的TouchAction类来做这件事。
  Press、longPress和release组合起来使用的。长按和短按的时间长度不同。
  move_to手按住别松开,一直滑动到另外一个点。在每一个操作之间都调用下wait,暂缓下它们的操作间隙,不然太快了,看起来就是一团乱麻。 1.短按和点击的区别?
  短按是按住不松开,但是时间比较短。tap是点完就松开,不需要组合别的一起用。有Press就必须有release,不然就一直按着上面动都不动了。
  发送命令后,只有调用perform才能真的去执行些操作命令,否则是不行的。
  将所有的行为按要求放在列表中,可以将列表中所有的东西取消cancel。
  滑屏操作是在屏幕上按住一个点,然后滑动到另外一个点,最后把它松掉。
  九宫格 就是个典型的触屏应用。
  2.用坐标还是元素?
  元素方便简单,但是不是你想选就一定是哪一种。 一种情况,9 个点都是独立的元素,那么用元素就可以了;第二种情况,9 个点都在一个元素里面怎么办?就没有办法实现元素的移动,因为就一个元素。这个时候就必须要用坐标。
  坐标需要精确定位。需要思考每个坐标之间的关系。 3.引入 TouchAction
  from appium.webdriver.common.touch_action import TouchAction TouchAction 的源码:
  4.每个行为函数都有 3 个参数
  swipe滑屏操作是没有元素的,针对的是整个屏幕。屏幕的话就只能通过坐标点。所以你看swipe的源码就可以看到。 看下 swipe 的实现-源码:  action = TouchAction(self) #首先实例化 TouchAction         action              .press(x=start_x, y=start_y)              .wait(ms=duration)              .move_to(x=end_x, y=end_y)              .release()         action.perform()         return self
  现在是它帮你封装好了。实际上不用swipe,就用TouchAction自己去写都可以。
  x=end_x, y=end_y,没有用 el。 5.首先确定每一个点的位置选择一个元素上的坐标,大概会选哪个位置的?
  中心。
  坐标轴写错了一点,偏移了点,好歹也是在范围之内。如果选择边缘的点,偏了点可能就出不去了。所以, 一般选一个元素的坐标,尽量选择中心。  每个点之间的间隔是一样的。从一个点挪到另外一个点,y 轴不用动,x 轴只要有个固定的距离就好了。
  例如 3 个点的值是:147.376、359.378、571.378 能把这 3 个值直接这样写出来吗?
  不能。换台设备就不行了,这样绝对的数据是不能放在这里的。采用和滑屏操作一样的思想,用百分比和相对距离。如果能获取到元素的大小以及起点坐标就可以了。
  距离是 59。147-59=88
  可以估算一下:
  如果是长方形那就需要另外再算,但是图中是正方形,这 9 个格子的间距是没有什么区别的,重点是它与边界值的差距。 边界值的差距是多少?
  把它分成 6 份。第一个点的坐标:能够得到 view 的起点坐标是 45,272。有专门的函数可以获取元素的大小以及它的起点坐标。
  假设起点坐标是 x、y,我现在已经知道将它分成了 6 份。 那么,第一个点的坐标怎么写?
  x+width*1/6 + height*1/6 看 size 源码:
  看 location 源码:
  #元素的大小 size=ele.size # 均分的步长 高和宽一样(因为是正方形) step=size["width"]/6#py3 中除是取整数的,会缺点小数点没关系。取得是终点,问题不大,还是可以滑动到的。 # 元素的起点坐标-左上角 ori=ele.location point1=(ori["x"]+step,ori["y"]+step) TouchAction(driver)
  等于横向走了这么远,纵向也走了这么远,刚好对着这个点了。
  第二个点的坐标怎么算?
  基于第一个点的基础上做调整就行了。y 轴不变,x 轴往前走了 2 份。
  第 3 个点也是在第 2 个点的基础上往前挪动了 2 个。 #元素的大小 size=ele.size # 均分的步长 高和宽一样(因为是正方形) step=size["width"]/6#py3 中除是取整数的,会缺点小数点没关系。取得是终点,问题不大,还是可以滑动到的。 # 元素的起点坐标-左上角 ori=ele.location point1=(ori["x"]+step,ori["y"]+step) point2=(point1[0]+step*2,point1[1]) #x 轴增加了 2*step point3=(point2[0]+step*2,point2[1]) #x 轴增加了 2*step TouchAction(driver)
  第 4 个点的坐标:
  它是倒着往回走。
  第 5 个点的坐标。 #元素的大小 size=ele.size # 均分的步长 高和宽一样(因为是正方形) step=size["width"]/6#py3 中除是取整数的,会缺点小数点没关系。取得是终点,问题不大,还是可以滑动到的。 # 元素的起点坐标-左上角 ori=ele.location point1=(ori["x"]+step,ori["y"]+step) point2=(point1[0]+step*2,point1[1]) #相对于 point1,x 轴增加了 2*step point3=(point2[0]+step*2,point2[1]) #相对于 point2,x 轴增加了 2*step point4=(point3[0]-step*2,point3[1]+step*2)#相对于 point3,x 轴减少了 2*step,y 轴增加了 2*step point5=(point4[0],point4[1]+step*2)#相对于 point4,x 轴不变,y 轴增加了 2*step TouchAction(driver).press(x=point1[0],y=point1[1]).wait(200).     move_to(x=point2[0],y=point2[1]).wait(200).     move_to(x=point3[0],y=point3[1]).wait(200).     move_to(x=point4[0],y=point4[1]).wait(200).     move_to(x=point5[0],y=point5[1]).wait(200).     release().     perform()  #.是换行用的。
  以 1 个点做基准,针对不同的点做基准,容易把自己绕晕了。所以,都以前一个点做基准。也可以以起点作为基准。 6.代码from appium import webdriver import time from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.mobileby import MobileBy import time from appium.webdriver.common.touch_action import TouchAction  desired_caps={} # 平台类型 desired_caps["platformName"]="Android" # 平台版本号 desired_caps["platformVersion"]="7.0" # 设备名称 desired_caps["deviceName"]="XPUDU17713003790" # app 包名 desired_caps["appPackage"]="填上 appPackage" # app 入口 acitivity desired_caps["appActivity"]="填上 appActivity" # 重置与否 desired_caps["noReset"]=True  # 连接 Appium server。前提:appium desktop 要启动。有监听端口。 # 将 desired_caps 发送给 appium server。打开 app driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)  ele=driver.find_element_by_id("填上元素定位下吧,如果你 app 这里的元素定位不了,那就只能用坐标了,需要另外学习这块的坐标怎么写,呜呜") # 元素的大小 size=ele.size # 均分的步长 高和宽一样(因为是正方形) step=size["width"]/6#py3 中除是取整数的,会缺点小数点没关系。取得是终点,问题不大,还是可以滑动到的。  # 元素的起点坐标-左上角 ori=ele.location point1=(ori["x"]+step,ori["y"]+step) point2=(point1[0]+step*2,point1[1]) #相对于 point1,x 轴增加了 2*step point3=(point2[0]+step*2,point2[1]) #相对于 point2,x 轴增加了 2*step point4=(point3[0]-step*2,point3[1]+step*2)#相对于 point3,x 轴减少了 2*step,y 轴增加了 2*step point5=(point4[0],point4[1]+step*2)#相对于 point4,x 轴不变,y 轴增加了 2*step TouchAction(driver).press(x=point1[0],y=point1[1]).wait(100).     move_to(x=point2[0],y=point2[1]).wait(100).     move_to(x=point3[0],y=point3[1]).wait(100).     move_to(x=point4[0],y=point4[1]).wait(100).     move_to(x=point5[0],y=point5[1]).wait(100).     release().     perform()  #.是换行用的。 三、注意
  这里是 V1.6.几的或 V1.7.1,V1.7 以前的,如果按上面代码的方式写坐标的话,会报错"提示越界了"。 这个是版本差异引起的。  需要看日志,日志中会告诉你,当前滑动的点是什么。
  多看 Appium 中的日志,它会问你是 el 滑动还是坐标滑动?
  坐标滑动会直接打印坐标值,看下坐标值超了就说明是有问题的。 版本比较晚的应该都是绝对坐标。
  实际上是不会"越界"的,那只因为 用的相对距离来滑动的。 move_to的每一个坐标点都是真实的绝对坐标。
  用的当前元素的原坐标点加上移动的距离得到的是当前相对于整个屏幕左上角这个 00 的真实坐标值。
  我现在用的坐标,但是有的版本的问题是:
  它的move_to参数不是绝对坐标。而是相对于上一个点的移动距离。
  比如第一个点,press 是没有错的。用 move_to 的时候 y 没有动,x 轴移动了 2 倍 step。
  如果是这种相对距离移动的话,要求x=2*step,没有坐标,y=0。如果不是按这种风格写的,会报"越界"。
  它拿着上一个点的坐标值加上 x,y,得出来肯定超界了。因为代码里写的真实坐标,再加上 x,第二个点可能没有越界,第三个点就越界了。
  如果报"越界"错误,那么就改成相对坐标滑动一下,看看有没有报错。
  Appium 在不同的版本修复了不同的问题,但是修复的同时也可能出现不同的问题。

win10用什么远程控制电脑好?这个就非常多了,下面我简单分享5个非常不错的win10远程桌面控制软件,感兴趣的朋友可以尝试一下Teamviewer这是一个非常不错的远程桌面控制软件,个人使用完全免费,只需要在本诚意满满,功能丰富,绿联首款降噪耳机体验TWS真无线蓝牙耳机的竞争太激烈了,我都没想到绿联会切入这一赛道,这也说明了真无线耳机的市场很大。到目前为止,绿联已经推出多款真无线蓝牙耳机,也得到了消费者的认可,今年也继续推出了多少钱的手机可以满足人们的日常需求?随着社会的不断进步手机已经发展成为人们日常生活必不可少的电子产品了,现在市面上各类手机品牌和造型也是接踵而至也是让我们购买手机的时候会眼花缭乱不知道该选用哪一款手机。那么多少钱的手杨澜,联想独立非执行董事,年薪235万,能力超群工资高,服不服5月15日下午,联想集团在港交所发布公告称,委任电视节目主持人传媒企业家杨澜为公司独立非执行董事,年薪33万美元,折合人民币约为235万元。该任命即日起生效。委任电视节目主持人传媒Java操作PDF文件,竟然如此简单本文从iText最基本的用法,分别介绍从表格,图片,中文来介绍iText,希望能够帮助到你。作者热衷技术的Java程序员来源今日头条202112090902收藏分享maven依赖使立讯精密已为电子烟市场需求做好准备,收获了品牌客户认可澎湃新闻记者周玲12月9日,立讯精密(002475)在回答投资者提问时表示,公司已为电子烟市场需求做好准备,目前业务进展顺利,也收获了品牌客户高度认可。有投资者提问称,从媒体公开报医图生科致力于使用世界领先的人工智能技术推动新药研发来源央广网AI凭借其强大的发现能力学习计算能力能有效缩短新药研发周期降低药物开发成本,在近年来逐渐成为生命科学领域的新风口。面对AI新药研发这一百亿级热门赛道,国内各地都在积极推动锂电铜箔供需趋紧,宁德时代拟与嘉元科技设立合资公司锁定铜箔产能财经网资本市场讯伴随着锂电行业掀起新一轮投资扩产潮,锂电铜箔也成为抢手货。12月8日,宁德时代(300750。SZ)的铜箔供应商嘉元科技(688388。SH)公告称,公司近日与宁德家庭清洁黑科技,追觅吸尘器V16究竟有多高效?随着科技进步与生活节奏的加快,人们对于生活效率有了更高的要求,特别是在面对繁琐费力的家务活时,越来越多人开始寻求高效的智能清洁工具,来减轻家务压力从而解放自己。但在追求清洁效率的同网约车司机权益有保障大家乘坐网约车时可能都注意到过,司机手机APP显示的车费和乘客手机上的不一致。这是因为平台需要扣除信息费保险费和抽成,司机每单收入低于乘客费用是正常的。不过,个别网约车平台抽成比例华为被迫撤出美国,苹果却登顶国内第一,为什么不同样禁售?众所周知,华为手机自从走出国门后,在海外市场发展非常凶猛,特别是在欧洲地区,获得了用户们的青睐,在一些国家拿下市场第一。在华为强劲发展的同时,也期望能够进入美国市场,毕竟作为全球第
2021年高性价比电热水器推荐云米这款NanoC1太能打了随着人们生活水平地不断提升,热水器早已成为家家户户必备的常规家电。目前市面上的热水器主要分为两种,一种为使用管道天然气的燃气热水器,另一种则是采用电加热的储水式热水器。相比起对于安苹果设备刷机不求人,希望可以帮到大家最近这几天帮亲戚朋友处理了iPhone解锁和iPad刷机的问题,虽然不是专业干这个的,但是通过网上教程和平时工作积累的经验还是顺利解决了,现在对这几天的操作做个复盘,希望可以帮助到SanagXPro体验,音质延迟给力,200元打造无线游戏耳机天花板当下,无线耳机几乎成为了年轻人的标配,但是,市面上的无线耳机琳琅满目且性质趋同,为了吸引潮酷青年们的目光,各大耳机厂商也开始向游戏耳机等细分领域深耕。游戏耳机到底是噱头?还是有真本加强网络知识产权保护来源人民网人民日报海外版电商帮助农民致富大数据助力疫情防控人工智能应用于城市管理互联网信息时代,科技创新正从各领域多维度改善我们的生活,这与中国近年来在知识产权保护方面所做的努力分国内最大的电脑公司为什么陷入舆论风波?暨中国互联网的底层逻辑国内最大的电脑公司为什么陷入舆论风波?暨中国互联网的底层逻辑(本文仅基于实际使用中遇到的问题技术层面分析,因没数据并未涉及金融手段人员间谍手段等)镜头1美国总统计算机信息产业是王牌被区块链公司坑了近50亿元云南国企经营陷入泥潭曾经是日进斗金的小金矿,如今变成了夺人性命的绊脚石。曾号称区块链第一股的易见供应链管理股份有限公司(以下简称ST易见)害人不浅,今年以来,公司股价暴跌60多,5万多中小投资者财富急电商平台该被消灭还是应该大规模普及?电商平台的发展,在我们国家已经有20年了。消费者从开始的否定,怀疑,到现在近10亿人选择网上购物,这种增长速度,是历史上任何商业模式所没有的。电商的兴起,为广大消费者带来了前所未有华为储能光伏新能源汽车BIPV!充电桩平台和运营规模全球第一华为储能光伏新能源汽车BIPV!这家公司充电桩平台和运营规模双双全球第一,机构预估明年业绩大增3倍,预中标上亿国家电网项目风电光伏储能智能电网!这家公司多晶硅总产能全球前四,高压变什么品牌的手机信号最好?影响信号的主要因素有哪些?一起来看看现在很多人买手机一般都是看处理器强不强,运行内存有多大,屏幕分辨率高,不高清,不清晰,拍照像素好不好,续航久不久,基本上这些都没问题之后就果断的买下这部手机了。但是很少有人会去关心华为Mate40Pro(5g)现货供应,这可能是这两年最便宜的华为了最近各种节日和活动,小宝看到在各大直播间或者各大平台的自营店都看到发布一年多的Mate40pro开始现货了,并且是5G版本。也就是说,大家终于不再需要加价去抢华为的5G手机了。但需受欢迎的三款折叠屏手机,万元以内,闭着眼买就行随着科技的发展,手机行业的竞争似乎更加激烈了,不管是中端市场,还是高端市场,厂商的新机都是一款接一款的发布,目的就是为了占取市场份额,从按键时代再到现在的全面屏时代,手机的外观设计