Python+Appium实现APP自动化测试

一、环境准备

1.脚本语言:Python3.x IDE:安装Pycharm

2.安装Java JDK 、Android SDK

3.adb环境,path添加E:\Software\Android_SDK\platform-tools

4.安装Appium for windows,官网地址 

二、真机测试

1.连接手机

打开开发者模式,USB线连接手机和电脑,并且在开发者选项当中,开启USB调试

 

 

测试是否连接成功,可执行命令adb devices


 

出现上图就证明手机和电脑连接成功。。。

2.点击Start Inspector Session,


 

按如下配置Desired Capabilities

 

 

platformName :声明是ios还是Android系统

platformVersion : Android内核版本号,可通过命令adb shell getprop

ro.build.version.release查看

 

 

deviceName :连接的设备名称,通过命令adb devices -l中model查看

 

 

appPackage :apk的包名

appActivity:apk的launcherActivity,通过命令adb shell dumpsys activity | findstr

“mResume”查看(需先打开手机应用)

 

 

注意:Android 8.1之前应使用adb shell dumpsys activity | findstr “mFocus”

3.运行Start Session,选择元素


 

右侧 Selected Element 区域有三个按钮

    • Tap:执行选中元素的点击事件
    • Send Keys:为文本框等对象传值
    • 如果是文本输入元素,就清除文本
    • 4.录制脚本
    •  

       
    • 录制生成的python代码如下:

      # This sample code uses the Appium python client
      # pip install Appium-Python-Client
      # Then you can paste this into a file and simply run with Python
      from appium import webdriver
      
      caps = {}
      caps["platformName"] = "Android"
      caps["platformVersion"] = "9.0.0"
      caps["deviceName"] = "Mi_Note_3"
      caps["appPackage"] = "com.antfortune.wealth"
      caps["appActivity"] = "com.alipay.mobile.quinox.LauncherActivity"
      caps["resetKeyboard"] = True
      caps["unicodeKeyboard"] = True
      
      driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
      
      el1 = driver.find_element_by_id("com.antfortune.wealth.login:id/login_main_button")
      el1.click()
      el2 = driver.find_element_by_id("com.alipay.mobile.accountauthbiz:id/auth_login_btn")
      el2.click()
      
      driver.quit()

      5.在pycharm中建立项目将代码粘入,在运行之前,还需通过pip命令安装pip install Appium-Python-Client依赖包

       

       

       
本文转载于网络 如有侵权请联系删除

相关文章

  • ValueError: Input contains NaN, infinity or a value too large for dtype(‘float64’).

    大家好,又见面了,我是你们的朋友全栈君。笔者在使用LogisticRegression模型进行预测时,报错 Traceback(mostrecentcalllast): File“D:/软件(学习)/Python/MachineLearing/taitannike/train.py”,line55,in predicted_np=clf.predict(test_np) File“D:\Python\Anaconda\lib\site-packages\sklearn\linear_model\base.py”,line281,inpredict scores=self.decision_function(X) File“D:\Python\Anaconda\lib\site-packages\sklearn\linear_model\base.py”,line257,indecision_function X=check_array(X,accept_sparse=‘csr’) File“D:\Python\Anaconda\lib\site-packages\sklearn\uti

  • android画廊无限轮播,ViewPager无限循环实现画廊式banner

    大家好,又见面了,我是你们的朋友全栈君。先看一下效果两边显示上一个和下一个item部分布局,可以自动滚动实现:布局主要属性:android:clipChildren=”false”//允许子布局超出父布局显示xml代码:Adapter没什么特别的只要getCount()返回一个很大的值如:returnInteger.MAX_VALUE;适配器代码:packagecom.guzhc.module_demo;importandroid.content.Context;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.ViewParent;importandroid.widget.ImageView;importandroid.widget.TextView;importandroidx.annotation.NonNull;importandroidx.viewpager.widget.PagerAdapter;importcom.bumptech.glide.Glide;importjava.u

  • 建房从二楼开始,猫猫远程帮助小白之后想说的心里话

    前几日在群里,有小白在提问为什么程序在SQL管理器里面执行成功,在VFP里面执行不成功。 联系猫猫远程后,才发现自己连程序执行失败错误信息在哪里取都不知道,这说明选择一本对的入门书多重要啊。其二:开发CS程序还是过程性思维,从创建链接开始,再执行程序完毕,完全没有错误处理。 其实我们有没有人想过,建房子不能从二楼开始,那我们程序可以不可以先盖二楼呢?当然是可以的,我们做成装配性建筑就好了。 我下面有建好的SQL执行类,大家可以看看,是不是感觉眼界大开啊。MSSQLhelper是执行SQL命令的封装类,,封装了常用的数据库操作。特点是:无需管连接,可以获取执行失败的错误信息。很多狐友写程序喜欢用SQLEXEC,执行失败就笼统提示执行失败,而不会去跟踪和处理错误,这是要不得的。以下的示例所使用的数据表来自于MSSQL的NorthWind数据库一:进行账套管理配置好连接参数。二:打开命令窗口执行如下命令1数据查询SQLQuery方法参数:SQL语句,游标名返回表:返回查询的游标返回值:>=0返回查询记录数,<0表示查询出错错误信息:存放于类的errmsg属性1数据查询SQLQue

  • Leetcode|887. 鸡蛋掉落(动规找最优BST根节点 + 将解作为状态)

    文章目录1动态规划(递归超时)2动态规划(二分搜索优化,5%beat,1400ms)3动态规划(将解作为状态,100%beat,0ms)致谢1动态规划(递归超时) 【状态】:①第i层扔碎了;②第i层扔没碎【dp函数含义】:剩余k个鸡蛋,有n层楼时,最坏情况下最少扔鸡蛋的次数为dp(k,n)【初始化】:状态有两个,因此需分别初始化,当楼层为0时,最少扔蛋次数为0;当剩余鸡蛋仅1个时,需做线性扫描,因此最坏情况下最少扔蛋次数为n【状态转移】minCont表示N课BST树中最小深度BST树的深度值(在N个点中找最佳切分点)minCont=min[minCont,max(第i棵BST左分支depth,第i棵BST右分支depth)+1(root)]【记录重叠子问题】:需要用到map类数据结构,由于key=(k,n),C++中可以使用tuple来绑定多key(比pair方便),但只有底层红黑树实现的map可以将tuple作为key,底层哈希表实现的unordered_map不可以,原因很简单,没有多key对应的哈希映射,需要自己手动实现.classSolution{ private: //dp备

  • android listview初步学习实例代码

    在android开发中ListView是比较常用的组件,下面分享一个实例。MainActivitypackagecom.example1.listviewpracticvce; /* *本例子实现的功能: *用listview显示给定的一个静态数组,数组定义在string.xml中攻或者activity中 */ importandroid.net.sip.SipAudioCall.Listener; importandroid.os.Bundle; importandroid.app.ListActivity; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.AdapterView.OnItemClickListener; importandroid.widget.ArrayAdapter; importandroid.widget.ListView; importandroid.widget.TextView; importandroid.widget.Toast; pub

  • 【SpringBoot注解-3】Bean注入相关注解

    常见注解总结之Bean注入 SpringBoot中要实现bean的注入,依赖三种注解:@Autowired@Inject@Resource1@Autowired在SpringBoot应用启动时,Spring容器会自动装载一个org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor处理器,当容器扫扫描到@Autowired注解时,就会在IoC容器就会找相应类型的Bean,并且实现注入。1.1@Autowired特点@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。1.2使用示例在MVC模式中,控制层(controller)注

  • 详细梳理ajax跨域4种解决方案

    前言自动接触前端,跨域这个词就一直萦绕在耳畔。因为一般接手的项目都已经做好了这方面的处理,而且之前一直感觉对这方面模棱两可,所以今天就抽个时间梳理一下。为什么需要跨域跨域这个概念来自一个叫“同源策略”的东西。同源策略是浏览器(注意是浏览器,跟通信协议无关)上为了安全考虑实施的非常重要的安全机制。Ajax默认只能获取到同源的数据,对于非同源的数据,Ajax是获取不到的。什么是同源?协议相同域名相同端口相同举例来说,http://www.example.com/dir/page.html这个网址,协议是http://,域名是www.example.com,端口是80(默认端口可以省略)。这个网址,在这个地址中要去访问下面服务器的数据,那么会发生什么情况呢?URL结果原因https://www.example.com/dir/other.html不同源协议不同,https和httphttp://en.example.com/dir/other.html不同源域名不同http://www.example.com:81/dir/other.html不同源端口不同http://www.exampl

  • 第四届魔镜杯大赛数据应用大赛方案分享(亚军)

    写在前面老样子,先感谢队友的实力带飞,让我学习到业务知识和骚操作。本次比赛将给出完整方案和部分代码,希望能给大家带来启发。赛题背景资金流动性管理迄今仍是金融领域的经典问题。在互联网金融信贷业务中,单个资产标的金额小且复杂多样,对于拥有大量出借资金的金融机构或散户而言,资金管理压力巨大,精准地预测出借资金的流动情况变得尤为重要。本次比赛以互联网金融信贷业务为背景,以《现金流预测》为题,希望选手能够利用我们提供的数据,精准地预测资产组合在未来一段时间内每日的回款金额。本赛题涵盖了信贷违约预测、现金流预测等金融领域常见问题,同时又是复杂的时序问题和多目标预测问题。希望参赛者利用聪明才智把互联网金融的数据优势转化为行业解决方案。数据介绍本赛题对回款预测问题进行了简化,选手需要分别预测每个资产标的第一期从成交日期至第一期应还款日期每日的还款金额,并最终在整体上以资产组合每日还款的误差作为评价指标。赛题提供了2018年1月1日至2018年12月31日的标的第一期的还款数据作为训练集,需要选手预测2019年2月1日至2019年3月31日成交标的第一期的还款情况。同时还提供了相关的标的属性信息,借款用

  • Android开发笔记(一百一十一)聊天室中的Socket通信

    Socket通信基本概念 对于程序开发来说,网络通信的基础就是Socket,但因为是基础,所以用起来不容易,今天我们就来谈谈Socket通信。计算机网络有个大名鼎鼎的TCP/IP协议,普通用户在电脑上设置本地连接的ip时,便经常看到下图的弹窗,注意红框部分已经很好地描述了TCP/IP协议的作用。 TCP/IP是个协议组,它分为三个层次:网络层、传输层和应用层: 网络层包括:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 传输层包括:TCP协议、UDP协议。 应用层包括:HTTP、FTP、TELNET、SMTP、DNS等协议。 之前我们提到的网络编程,其实都是应用层方面的http或ftp编程;而socket属于传输层的技术,它的api实现TCP协议后即可用于http通信,实现UDP协议后即可用于ftp通信,当然也可以直接在底层进行点对点通信,比如即时通信软件(QQ、微信)这样就是。 扯远了,言归正传,java的socket编程主要使用Socket和ServerSocket两个类,下面是相关类的使用说明。 Socket Socket是最常用的,客户端和服务

  • 人机大战已不止体育范畴 拥抱AI时代思之不及行不却步

    撰文/车莉第十三届全运会成功举行、中国女排时隔16年再夺大冠军杯、体操世锦赛肖若腾男子全能称王、北京冬奥会会徽发布……新华社权威评出的2017十大体育新闻,其中半数都在现场亲眼见证,作为一名体育新闻工作者,不能不说荣幸。然而,柯洁与AlphaGo的“人机大战”带给我的震撼与思考,却已不仅限于体育赛事范畴。2017年5月27日,乌镇。当与AlphaGo的第三局对弈进行到3小时38分钟时,柯洁抓出三颗白子,往棋盘右下角轻轻一推。摘下眼镜,柯洁低头拭泪,这是连续被AlphaGo暴击之后的绝望,是面对人工智能的强大,看不到任何获胜希望的绝望。“被AI虐还是挺难受的……”这一年进入倒计时的时候,柯洁再次和我们谈论起那次失利和落泪,他说那时出战感觉自己是在为人类而战,却被AI的强大全面碾压。其实,一年前韩国见证李世石被AlphaGo打败的时候,包括古力等知名棋手就已经表示过,支撑自己几十年的价值观崩塌了,围棋作为守卫人类尊严的最后壁垒已被攻破,只是那时候我们还没有意识到。腾讯高级执行副总裁卢山是围棋爱好者,面对AI对围棋的改变,他在震惊之余一直在思考:当新科技来临,我们该如何去拥抱它?这一年AI不

  • 【每周CV论文推荐】初学视觉注意力机制有哪些值得阅读的论文?

    欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。注意力机制是当下计算机视觉和自然语言处理中非常重要的内容,是模型设计的基础和核心方向,包含的内容非常多,本次我们给新手推荐计算机视觉注意力机制入门必须阅读的论文。作者&编辑|言有三1什么是注意力机制IttiandKochmodel是最早研究注意力机制问题的模型之一,虽然不属于深度学习与神经网络领域,但对于想要追溯注意力机制的早期研究,了解显著目标检测方向的朋友来说,仍然是值得一读的论文。文章引用量:5000+推荐指数:✦✦✦✦✦[1]IttiL,KochC.Computationalmodellingofvisualattention[J].Naturereviewsneuroscience,2001,2(3):194-203.2空间注意力机制SpatialTransformerNetworks是极为经典的基于空间注意力机制的模型,它通过对输入数据中有效目标位置的学习,实现预处理变换,降低模型的学习难度,该思想被后续很多领域借鉴,广泛被用

  • ScrollView 嵌套 ListView 时,刷新页面时,会出现 自动 滚动至listview 的区域 解决方案:

    在页面切换  的时候,可能会出现  因listview 数据加载 而 导致  该页面展示的位置为 该listview区域。   解决方案:可在ScrollView中添加   android:descendantFocusability="blocksDescendants"复制     概述: android:descendantFocusability DefinestherelationshipbetweentheViewGroupanditsdescendantswhenlookingforaViewtotakefocus. Mustbeoneofthefollowingconstantvalues.复制   该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。 该属性的值有三种:      beforeDescendants:viewg

  • 利用Oracle Database Resource Manager实现UNDO表空间的quota

    1.查出当前使用的是哪个resourceplan select*fromGV$RSRC_PLAN   2.创建pendingarea begin dbms_resource_manager.create_pending_area;end;   3.创建consumergroup BEGIN DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP=>'SALES_APP',COMMENT=>'');END;   4.创建plandirective begin dbms_resource_manager.create_plan_directive(PLAN=>'DB_CONSOLIDATE_PLAN',group_or_subplan=>'SALES_APP',undo_pool=>1024,comment=>'');end;   5.设置session到consumergroup的映射: begin dbms_r

  • 用adb来修改android嵌入式设备的system只读目录下的东西

    转的一篇:   以修改hosts文件为例: 由于某些原因,可能需要指定域名对应的IP地址。Android是基于Linux的系统,与Linux类似,通过hosts文件来设置。 在Android下,/etc是link到/system/etc的,我们需要修改/system/etc/hosts来实现。但是这个文件是只读,不能通过shell直接修改。可以通过连接到PC上使用adb来修改。步骤如下: 1、获得root权限:adbroot 2、设置/system为可读写:adbremount 3、将hosts文件复制到PC:adbpull/system/etc/hosts<PC机上文件名> 4、修改PC机上文件 5、将PC机上文件复制到手机:adbpush<PC机上文件名>/system/etc/hosts 如果要查看是否修改成功,可以在PC上执行adbshell,运行cat/system/etc/hosts;或者在手机上运行cat/system/etc/hosts。

  • sql语句练习50题(Mysql版)

    原文链接

  • Java服务端API接口统一加密和解密

      packagecom.ubest.scf.base.encrypt; importorg.apache.commons.codec.binary.Base64; importjavax.crypto.Cipher; importjavax.crypto.KeyGenerator; importjavax.crypto.spec.SecretKeySpec; /** *前后端数据传输加密工具类 * *@authormonkey */ publicclassAesEncryptUtils{ //参数分别代表算法名称/加密模式/数据填充方式 privatestaticfinalStringALGORITHMSTR="AES/ECB/PKCS5Padding"; /** *加密 * *@paramcontent加密的字符串 *@paramencryptKeykey值 *@return *@throwsException */ publicstaticStringencrypt(Stringcontent,StringencryptKey)throwsException

  • MySQL入门篇(六)之mysqldump备份和恢复

    本文转自链接https://www.cnblogs.com/linuxk/p/9371475.html 一、备份单个数据库 1、备份命令:mysqldump   MySQL数据库自带的一个很好用的备份命令。是逻辑备份,导出的是SQL语句。也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程。 单实例语法(Syntax): mysqldump-u<username>-p<dbname>>/path/to/***.sql 多实例的备份语法(Syntax): mysqldump-u<username>-p<dbname>-S<sockPath>>/path/to/***.sqleg:mysqldump-uroot-pwordpress>/opt/wordpress_$(date+%F).sql复制 2、参数解析  ViewCode 举例使用:  ViewCode 3、恢复操作 语法(Syntax): mysql-u<username>

  • Triangulated Category

    Mappingcones          我们通过以下引理引出triangle的概念;                     三角范畴间的functor是:    三角范畴可以看作是complexcategory的一般化。    而cohomologicalfunctor是模上的复形范畴中取上同调函子的一般化。                                

  • ADB memo

    adbdevices adbinstallxxx.apk adbuninstallxxx.apk adbuninstall-kxxx.apk adbshell adbpush adbpull adbshell adbrebootbootloader fastbootdevices fastbootflashsystemsystem.img fastbootreboot

  • LeetCode:704_二分查找(Binary Search)

    给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1。 示例1: 输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4 方法:二分查找二分查找是一种基于比较目标值和数组中间元素的教科书式算法。 如果目标值等于中间元素,则找到目标值。如果目标值较小,继续在左侧搜索。如果目标值较大,则继续在右侧搜索。 算法: 初始化指针left=0,right=n-1。当left<=right:比较中间元素nums[pivot]和目标值target。如果target=nums[pivot],返回pivot。如果target<nums[pivot],则在左侧继续搜索right=pivot-1。如果target>nums[pivot],则在右侧继续搜索left=pivot+1。     classSolution: defsearch(s

  • 00000000

    00000000

相关推荐

推荐阅读