登录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

C++ const vector的迭代器

vector<int>::const_iterator it a.begin(); int main(){const vector<int> a { 1, 2, 3 };vector<int>::const_iterator it a.begin();for (; it ! a.end(); it){cout << *it << endl;}return 0; }

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

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

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

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

C++ vector的反向迭代器

int main(){vector<int> a { 1, 2, 3 };vector<int>::reverse_iterator it a.rbegin();for (; it ! a.rend(); it){cout << *it << endl;}return 0; }

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

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

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

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

学期总结

这学期虽然比较忙&#xff0c;但学会了很多&#xff0c;也结识了很好的伙伴组成团队。不一样的队友有着不一样的风格、不一样的思维&#xff0c;虽然最初的时候也有过争吵&#xff0c;但是我们都学会了在此过程中成长。在学习这门课程的过程中&#xff0c;我知道了软件开发不是…

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

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

发送广播BroadcastReceiver

import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button; public class BroadcastMain extends Activity {   Bu…

C++ 字符串转数字/数字转字符串

数字转字符串&#xff1a; 很简单&#xff0c;直接用to_string()函数 int numto_string(num) 字符串转数字&#xff1a; 方法一&#xff1a; sscanf(s.c_str(), "%d", &num); int main(){string s "234";int num;sscanf(s.c_str(), "%d&qu…

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

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

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

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

用JSON-server模拟REST API(一) 安装运行

用JSON-server模拟REST API(一) 安装运行 在开发过程中&#xff0c;前后端不论是否分离&#xff0c;接口多半是滞后于页面开发的。所以建立一个REST风格的API接口&#xff0c;给前端页面提供虚拟的数据&#xff0c;是非常有必要的。 对比过多种mock工具后&#xff0c;我最终选择…

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

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

C++char转int和int转char

区别在于0还是-0 char转int&#xff1a;-0 int main(){char c 5;int n c - 0;cout << n << endl;return 0; } int转char:0 int main(){int n 5;char c n0;cout << c << endl;return 0; }

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

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

php变量函数,回调函数

一,变量可以直接传递函数 <?php function demo($num , $n )//$n是个函数 {for($i0;$i<$num;$i){if($n($i)){echo $i."<br>";}} } function funcall($i) {return $i%20; } demo(100,"funcall"); 二, 使用call_user_func_array  <?php fu…

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

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