登录python自动化_Appium+Python实现自动化登录

#Appium+Python实现自动化测试

Appium简介 官方的概述为: Appium is an open source test automation framework for use with native, hybrid and mobile web apps. It drives iOS, Android, and Windows apps using the WebDriver protocol.

Appium是一个开源的测试自动化框架,用于本地、混合和移动Web应用程序。

它使用WebDevices协议驱动iOS、Android和Windows应用程序。也就是可以用它来帮助我们实现自动化测试,代替人为的点击,每次发版都能够按照案例清单完整的跑一套流程,保证当前版本的稳定性。

支持多种语言开发定制 python,javaSprict,java,ruby,Objective C,php,.net,RobotFramework 其中Android SDK ≥ 16

支持多平台 mac和Windows

Appium 安装方式

1:直接安装Appium客户端

Appium官网,点击downLoad即可

2:命令行本地安装 1:安装node 2:npm install -g appium 3:npm install -g appium-doctor appium-doctor是检查你的本地环境是否正常的工具 注:如果权限问题请加上sudo,appium-doctor在新版appium已经移除,需要利用npm安装 sudo npm install -g appium-doctor,安装完成后输入appium-doctor检测环境是否正常 如果遇到缺少js文件错误,说明你的node版本太低,需要升级nodejs,升级的方式为 1: sudo npm cache clean -f 清楚nodejs的cache 2:sudo npm install -g n 管理npm的工具 3:sudo n stable 升级node 4: sudo npm install npm@latest -g 更新npm 4:node -v查看node版本(最新为11.4.0) 再次运行appium-doctor查看本地环境配置是否正常,不正常修复即可

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

安装Python 安装方式网上很多,不在阐述,目前我用的是python3.7 推荐的ide为:Pycharm

编写自动化用例 我们的这次用的apk为微信

希望能够通过appium帮我们实现微信登录并跳转到我的->个人信息界面from appium import webdriver import time class UiTest(object): def __init__(self): # 设备信息 self.config = { "platformName": "Android", "platformVersion": "5.1.1", "deviceName": "Pixel XL", "automationName": "app", "app": '/Users/davidxiong/Desktop/wx.apk', } # 有多重模拟点击方式: # 1:坐标, # 2:id # 3:xpath # 4:name,这边我采用坐标和xpath,因为微信的元素id会动态改变 # 手机号元素路径 self.phone = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.widget.EditText' # 手机号点击登录元素路径 self.phone_enter = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.Button[2]' # 密码路径 self.pass_word = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.widget.EditText' # 密码确认路径 self.pass_word_enter = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.ScrollView/android.widget.LinearLayout/android.widget.Button[2]' # 关闭匹配框 self.close_match = '/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.Button[1]' # 个人中心 self.mine_info = '//android.widget.FrameLayout[@content-desc="当前所在页面,与的聊天"]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/com.tencent.mm.ui.mogic.WxViewPager/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ListView/android.widget.LinearLayout[1]/android.widget.RelativeLayout/android.widget.LinearLayout' self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.config) # editText输入 def edit_input(self, et_id, content, xpath='', timer=-1): if xpath == '': pl = self.driver.find_element_by_id(et_id) else: pl = self.driver.find_element_by_xpath(xpath) if timer != -1: time.sleep(timer) pl.send_keys(content) # 点击事件 def click(self, btn_id, xpath='', timer=-1): if timer != -1: time.sleep(timer) if xpath == '': self.driver.find_element_by_id(btn_id).click() else: self.driver.find_element_by_xpath(xpath).click() def run(self): time.sleep(2) # 点击登录 self.driver.tap([(259, 1773)]) # 输入手机号 self.edit_input('ht', '你的账号', xpath=self.phone, timer=1) # 点击下一步,这边采用xpath self.click('akb', xpath=self.phone_enter) # 输入密码 time.sleep(2) self.edit_input('ht', '密码', xpath=self.pass_word, timer=1) # 登录R self.click('akb', xpath=self.pass_word_enter) time.sleep(8) # 关闭提示匹配通讯录弹出框 self.click('akb', xpath=self.close_match) # 等地同步数据 time.sleep(30) # 点击我的,这边采用坐标 self.driver.tap([(933, 1823)]) # 查看我的个人信息 self.click('akb', xpath=self.mine_info) if __name__ == "__main__": UiTest().run()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lvalue-xvalue-prvalue

• iM: has identity and cannot be moved from • im: has identity and can be moved from (e.g. the result of casting an lvalue to a rvalue reference) • Im: does not have identity and can be moved from 转载于:https://www.cnblogs.com/Searchor/p/5604736.html

城市仿真为何成为大势所趋?

来源:智慧城市联合实验室不知从何时起,人们开始从城市的角度构想,未来可以建设一个虚拟城市,来映射真实城市的运行,再进一步管理真实城市的运行。现在,这种构想已经初步实现……(内附《城市环境…

linux网络配置_linux复制和网络配置的小注意事项

centos7,vbox复制出来的虚拟机无法ping通。其实这是vbox低版本没有解决的一个小问题,复制过去,主机的mac重新生成了(复制时候一定要选这个选项),但是配置文件的mac还是被复制的主机配置,网上搜索很多方案各种改,其实只…

实验室培养的迷你大脑,产生了脑电波...

十月龄如豌豆大小的类器官。图片来源:Muotri Lab来源:中国生物技术网近日,来自美国加州大学圣地亚哥分校的科学家用发育了功能性神经网络的干细胞创造了“迷你大脑”。尽管这些实验室发育的大脑比人脑小一百万倍,但它们是第一个被…

jupyternotebook运行python_jupyter notebook参数化运行python方式

Updates (2019.8.14 19:53)吃饭前用这个方法实战了一下,吃完回来一看好像不太行:跑完一组参数之后,到跑下一组参数时好像没有释放之占用的 GPU,于是 notebook 上的结果,后面好几条都报错说 cuda…

重磅|PPT讲解机器人产业发展现状与未来展望,重磅资料

来源:机器人大讲堂前段时间咱们分享过王喜文博士做的关于《5G》的PPT,大家反映做的很棒,最近王喜文博士在机械工业出版社又出了一本新书:智能:《新一代人工智能发展规划》解读,ISBN:978-7-111-6…

中国之光!中国最酷黑科技30强名单公布!

来源:智慧芽当前的中国正在迎来一个科技大爆发的时代,科技成果输出的速度远远快于经济成长的速度。中国现在每年产出科技成果,居世界第二,且正在高速接近美国。最好的一个证明就是含金量相对较高的PCT国际专利申请量,2…

python为什么没有指针_Python 没有指针,如何解算法题?

👆“Python猫” ,一个值得加星标的公众号 花下猫语: 今天一大早,读者群里又讨论了 Python 的“指针”问题。之前在公众号里发布过樱雨楼小姐姐的《对比 C 和 Python,谈谈指针与引用》,它从概念上有比较清晰…

深度 | 刘群:基于深度学习的自然语言处理,边界在哪里?

来源: AI科技评论 编辑 | Camel四大边界:数据边界、语义边界、符号边界和因果边界当前,深度学习之于自然语言处理,有其局限性。那么它所能起作用的边界在哪里呢?对此问题,我们应当深思。近日,在…

html border阴影效果_【开发小技巧】026—如何使用HTML和CSS创建浮动框阴影效果?...

英文 | https://www.geeksforgeeks.org/how-to-create-floating-box-effect-using-html-and-css/?refrp浮动框效果是自定义框阴影技术的经典示例。在这种技术中,我们无需使用CSS提供的box-shadow属性即可创建逼真的阴影效果。实现方法:在选择器之后使用…

NLP这两年:15个预训练模型对比分析与剖析

来源 | 知乎前言在之前写过的《NLP的游戏规则从此改写?从word2vec, ELMo到BERT》一文中,介绍了从word2vec到ELMo再到BERT的发展路径。而在BERT出现之后的这大半年的时间里,模型预训练的方法又被Google、Facebook、微软、百度、OpenAI等极少数…

多余的读写端口什么时候会对程序造成影响_程序员需要了解的硬核知识之控制硬件...

应用和硬件的关系我们作为程序员一般很少直接操控硬件,我们一般通过 C、Java 等高级语言编写的程序起到间接控制硬件的作用。所以大家很少直接接触到硬件的指令,硬件的控制是由 Windows 操作系统 全权负责的。你一定猜到我要说什么了,没错&am…

直击2019WAIC丨李德毅:人工智能是脱离意识的工具,需要约束的是人类自己

转自 上观新闻中国工程院院士、中国人工智能学会理事长李德毅在2019世界人工智能大会“科学前沿”主论坛上表示,人工智能就是人类智能的体外延伸,可以脱离意识而存在,应该将其看作一种工具。李德毅认为,意识和智能相互之间有很多典…

matplotlib给坐标轴特定的位置加上文字

比如我想在横坐标0和1这两个位置分别用文字“y1”和“y2”代替,即实现以下这种效果: plt.xlim([-1, 2]) plt.xticks([0, 1], ["y1", "y2"])

K-Means ++ 算法

Kmeans算法的缺陷 • 聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适• Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致…

螺旋桨设计软件_我们又双叒叕获得一项国家软件著作权!

近日中建三局一公司深圳分公司岗厦天元花园项目“实时监测数据可视化与BIM集成展示平台(简称监测数据可视化集成展示平台)V1.0”荣获国家软件著作权该项成果由岗厦天元花园项目与哈尔滨工业大学深圳校区组成的科研团队共同完成该平台能收集钢结构塔冠的水平位移、应变、温度、风…

计算机界和数学界,也需要一个“希波克拉底誓言”

汉娜弗莱: “未来不会就这么来到我们眼前,我们一直在塑造它。”摄影:Paul Wilkinson | The Guardian来源 The Guardian翻译 刘勤编辑 魏潇一位学界的领军人物表示,数学家、工程师以及科学家们应通过一个计算机界的“希波克拉底…

WCF技术实现基于角色的访问控制

第一次写,小紧张! 即将毕业了,现在将我毕业设计中用到的小的编程技术以及自己的一些理解分享出来,希望可以做点小贡献。 首先要感谢网上各路大神无私的分享,没有你们,就没有我的收获。 在大四之前&#xff…

double类型占几个字节_MongoDB 中的数据类型

1 JSON 与 BSONMongoDB 是文档数据库,什么是文档呢?如果你看了之前的文章相信你已经有些概念了,这里的文档不是指 Word、PDF 这样的文档,而是类似 JSON(JavaScript Object Notation) 的对象,由不同的键以及对应的值组成…