自动化测试篇:Java+selenium+appium自动化测试详解

一、启动测试机或者Android模拟器(Genymotion俗称世界上最快的模拟器,可自行百度安装)

同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

软件测试视频教程观看处:

自动化测试篇—实战案例:自动化及接口自动化本质及适用场景

二、启动Appium(Appium环境安装可自行百度)

三、安装应用到Genymotion上,如下图我安装一个计算机的小应用,包名为CalcTest.apk

安装步骤:(基于Android SDK已经配置好了环境变量,可自行百度)

1、Win + R
2、CMD
3、adb devices   --检查操作,列出存在的设置名称
4、adb  install  F:\Appium\CalcTest.apk     --正式安装App

测试apk下载地址:https://files.cnblogs.com/files/yyym/CalcTest.apk

如下图:192.168.229.101:5555就是我刚开启的Genymotion虚拟机

四、安装成功之后回到Genymotiong可以看到已经安装成功了

打开该应用,可以看到实际是个简单的计算器

五、打开Eclipse创建Maven项目并使用uiautomatorviewer工具(Android SDK工具包自带的)进行基本元素定位操作,元素定位方式前面我们已经详细讲解过了。

1、打开Android SDK可找到路径:android-sdks\tools如下(获取App包名可反编译:aapt dump badging apk路径)

2、打开uiautomatorviewr.bat

3、编写基本代码如下仅供参考:

package appium_demo;import java.net.MalformedURLException;import java.net.URL;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.remote.DesiredCapabilities;import io.appium.java_client.android.AndroidDriver;/** * @author 李小卫 E-mail:yyymlxw@163.com @date 创建时间2018年2月11日上午10:10:02 */public class calc_demo {public static void main(String[] args) throws MalformedURLException {AndroidDriver driver;DesiredCapabilities des = new DesiredCapabilities();//    des.setCapability("automationName", "Appium");//Selendroid //自动化的模式选择//     des.setCapability("app", "C:\\software\\CalcTest.apk");//配置待测试的apk的路径//      des.setCapability("browserName", "chrome");  //h5des.setCapability("platformName", "Android");//平台名称des.setCapability("platformVersion", "4.4");//手机操作系统版本des.setCapability("udid", "192.168.229.101:5555");//连接的物理设备的唯一设备标识des.setCapability("deviceName", "S4");//使用的手机类型或模拟器类型  UDIDdes.setCapability("appPackage", "com.sky.jisuanji");//App安装后的包名,注意与原来的CalcTest.apk不一样des.setCapability("appActivity", ".JisuanjizixieActivity");//app测试人员常常要获取activity,进行相关测试,后续会讲到des.setCapability("unicodeKeyboard", "True");//支持中文输入des.setCapability("resetKeyboard", "True");//支持中文输入des.setCapability("newCommandTimeout", "10");//没有新命令时的超时时间设置des.setCapability("nosign", "True");//跳过检查和对应用进行 debug 签名的步骤driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), des);//虚拟机默认地址driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//设置超时等待时间,默认250msdriver.findElement(By.id("com.android.calculator2:id/digit1")).click();//定位'1'driver.findElement(By.id("com.android.calculator2:id/plus")).click();//定位'+'driver.findElement(By.id("com.android.calculator2:id/digit6")).click();//定位'6'driver.findElement(By.id("com.android.calculator2:id/equal")).click();//定位'='}}   

六、使用TestNG编写正式测试用例并开始执行测试了

package appium_operate;import java.net.MalformedURLException;import java.net.URL;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.remote.DesiredCapabilities;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import io.appium.java_client.android.AndroidDriver;/** * @author 李小卫 E-mail:yyymlxw@163.com @date 创建时间2018年2月11日上午10:30:02 */public class CalcTest {AndroidDriver driver;@BeforeTestpublic void setUp() throws MalformedURLException{DesiredCapabilities des = new DesiredCapabilities();//      des.setCapability("app", "c:\\");des.setCapability("platformName", "Android");des.setCapability("platformVersion", "4.4");des.setCapability("udid", "192.168.43.101:5555");des.setCapability("deviceName", "s4");des.setCapability("appPackage", "com.android.calculator2");//com.android.contactsdes.setCapability("appActivity", ".Calculator");//.activities.PeopleActivitydes.setCapability("unicodeKeyboard", "True");des.setCapability("resetKeyboard", "True");des.setCapability("newCommandTimeout", "15");des.setCapability("nosign", "True");driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),des);driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);}@Test(enabled = false)public void add() {driver.findElement(By.xpath("//android.widget.Button[@text='5']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='+']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='8']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='=']")).click();String value = driver.findElement(By.xpath("//android.widget.EditText[@class='android.widget.EditText']")).getAttribute("text");Assert.assertEquals(value, "13");      }@Test(enabled = false)public void sub() {driver.findElement(By.xpath("//android.widget.Button[@text='1']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='0']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='-']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='8']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='=']")).click();String value = driver.findElement(By.xpath("//android.widget.EditText[@class='android.widget.EditText']")).getAttribute("text");Assert.assertEquals(value, "2");       }@Test(enabled = false)public void mul() {driver.findElement(By.xpath("//android.widget.Button[@text='5']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='×']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='8']")).click();driver.findElement(By.xpath("//android.widget.Button[@text='=']")).click();String value = driver.findElement(By.xpath("//android.widget.EditText[@class='android.widget.EditText']")).getAttribute("text");Assert.assertEquals(value, "40");      }@DataProvider(name="testdata")public Object[][] getData(){return new Object[][]{{"20","80","100","+"},{"90","3","270","×"},{"6","2","3","÷"}};}@Test(dataProvider = "testdata")public void calcTestcase(String num1,String num2,String result,String calcType){for(char num:num1.toCharArray()){driver.findElement(By.xpath("//android.widget.Button[@text='"+String.valueOf(num)+"']")).click();}driver.findElement(By.xpath("//android.widget.Button[@text='"+calcType+"']")).click();for(char num:num2.toCharArray()){driver.findElement(By.xpath("//android.widget.Button[@text='"+String.valueOf(num)+"']")).click();}driver.findElement(By.xpath("//android.widget.Button[@text='=']")).click();String value = driver.findElement(By.xpath("//android.widget.EditText[@class='android.widget.EditText']")).getAttribute("text");Assert.assertEquals(value, result);    }}

七、写在最后 

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

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

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

相关文章

JavaScript基础入门02

目录 1.变量的使用 1.1基本用法 1.2理解 动态类型 2.基本数据类型 2.1number 数字类型 2.2数字进制表示 2.3特殊的数字值 2.4string 字符串类型 2.4.1基本规则 2.4.2转义字符 2.4.3求长度 2.4.4字符串拼接 2.5boolean 布尔类型 2.6undefined 未定义数据类型 2.7n…

MASK-RCNN tensorflow环境搭建

此教程默认你已经安装了Anaconda,且tensorflow 为cpu版本。为什么不用gpu版本,原因下面解释。 此教程默认你已经安装了Anaconda。 因为tensorflow2.1后的gpu版,不支持windows。并且只有高版本的tensorflow才对应我的CUDA12.2; 而…

【漏洞复现】fastjson_1.2.24_unserializer_rce

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞检测3、漏洞验证 1.5、深度利用1、GetShell 说明内容漏洞编号漏洞名称fastjson 1.2.24 反序列化导致…

Linux 环境搭建

目录 1.Linux 背景介绍1.1发展史1.1.1 UNIX发展的历史1.1.2 Linux发展历史 1.2开源1.3 企业应用现状1.4 发行版本 2.搭建 Linux 环境2.1 Linux 环境的搭建方式 1.Linux 背景介绍 1.1发展史 Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展史。…

自定义在input生成tag标签样式,标签可删除。组件封装

生成效果如图&#xff1a; <template><div class"tag-input"><!-- 父盒子 --><div class"father_box" click"fatherOnclick" :class"verify?:notVerify"><!-- 生成的标签 --><div v-for"(item…

师从IEEE Fellow|民办高校计算机专业教师自费赴美访学

D老师科研背景较弱&#xff0c;拟自费访学并带孩子出国就读&#xff0c;故要求申请到美国生活成本低且有较好公立中学教育资源的地区&#xff0c;并希望对方不收管理费。最终我们落实了德克萨斯大学达拉斯分校的邀请函&#xff0c;对方是IEEE Fellow、IET Fellow和EAI Fellow三…

Redis中Hash类型的命令

目录 哈希类型的命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat 内部编码 Hash类型的应用场景 作为缓存 哈希类型和关系型数据库的两点不同之处 缓存方式对比 Redis自身已经是键值对的结构了,Redis自身的键值对就…

『CV学习笔记』图像超分辨率等图像处理任务中的评价指标PSNR(峰值信噪比)

图像超分辨率等图像处理任务中的评价指标PSNR(峰值信噪比) 文章目录 一. PSNR(峰值信噪比)1.1. 定义1.2. 作用1.3. 例子1.4 . PSNR评价标准二. 参考文献一. PSNR(峰值信噪比) 1.1. 定义 峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)是图像超分辨率等图像处理任务中常用的一…

YOLO算法改进5【中阶改进篇】:添加SENet注意力机制

SE-Net 是 ImageNet 2017&#xff08;ImageNet 收官赛&#xff09;的冠军模型&#xff0c;是由WMW团队发布。具有复杂度低&#xff0c;参数少和计算量小的优点。且SENet 思路很简单&#xff0c;很容易扩展到已有网络结构如 Inception 和 ResNet 中。 我们可以看到&#xff0c;已…

纯CSS实现卡片上绘制透明圆孔

<template><div class"dot-card-wrapper"><div class"top-wrapper"><slot name"top"></slot></div><!-->核心是下面这部分</--><div class"dot-row"><div class"left-…

java配置GDAL

<gdal.version>3.7.0</gdal.version><!-- gdal--><dependency><groupId>org.gdal</groupId><artifactId>gdal</artifactId><version>${gdal.version}</version></dependency> GDAL环境安装 downlo…

学习 Python 数据可视化,如何快速入门?

Python 是一种非常流行的编程语言&#xff0c;具有简单易学、高效、丰富的库和工具等特点。其中&#xff0c;数据可视化是 Python 的一个重要应用领域&#xff0c;可以帮助人们更好地理解和分析数据。本文将介绍如何快速入门 Python 数据可视化&#xff0c;以及常用的可视化工具…

PHP进销存ERP系统源码

PHP进销存ERP系统源码 系统介绍&#xff1a; 扫描入库库存预警仓库管理商品管理供应商管理。 1、电脑端手机端&#xff0c;手机实时共享&#xff0c;手机端一目了然。 2、多商户Saas营销版 无限开商户&#xff0c;用户前端自行注册&#xff0c;后台管理员审核开通 3、管理…

HarmonyOS鸿蒙原生应用开发设计- 元服务(原子化服务)图标

HarmonyOS设计文档中&#xff0c;为大家提供了独特的元服务图标&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的元服务图标内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的元服务图标侵权意外情况等&…

ROS学习笔记(4):ROS架构和通讯机制

前提 前4篇文章以及帮助大家快速入门ROS了&#xff0c;而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。 1.ROS架构三层次&#xff1a; 1.基于Linux系统的OS层&#xff1b; 2.实现ROS核心通信机制以及众多机器人开发库的中间层&#xff1b…

提升ChatGPT答案质量和准确性的方法Prompt engineering

文章目录 怎么获得优质的答案设计一个优质prompt的步骤:Prompt公式:示例怎么获得优质的答案 影响模型回答精确度的因素 我们应该知道一个好的提示词,要具备一下要点: 清晰简洁,不要有歧义; 有明确的任务/问题,任务如果太复杂,需要拆分成子任务分步完成; 确保prompt中…

ElasticSearch集群环境搭建

1、准备三台服务器 这里准备三台服务器如下: IP地址主机名节点名192.168.225.65linux1node-1192.168.225.66linux2node-2192.168.225.67linux3node-3 2、准备elasticsearch安装环境 (1)编辑/etc/hosts&#xff08;三台服务器都执行&#xff09; vim /etc/hosts 添加如下内…

硬盘坏道检测修复工具下载,仅支持机械盘

硬盘坏道检测修复工具下载&#xff0c;仅支持机械盘 下载路径&#xff0c;最下方官网——软件下载——常用工具下载——硬盘坏道修复工具硬盘检测修复工具 【软件试用版下载、软件资讯或技术支持服务可点击文章最下方官网】

845. 八数码

文章目录 QuestionIdeasCode Question 在一个 33 的网格中&#xff0c;1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如&#xff1a; 1 2 3 x 4 6 7 5 8 在游戏过程中&#xff0c;可以把 x 与其上、下、左、右四个方向之一的数字交换&#xff08;如果存…

orangepi zero2 全志H616 SSD1306 OLED屏幕测试程序 (已附源码)

orangepi zero2 H616 SSD1306 OLED屏幕测试程序 orangepi zero2 配置wiringpi 库后&#xff0c;突发奇想构建一个测试oled屏幕的程序&#xff0c;放一个蜗牛每次移动一个像素点&#xff0c;实时显示蜗牛的步数&#xff0c;后面要显示其他内容在此代码上修改即可&#xff0c;如…