Java + Selenium + Appium自动化测试

2023-12-16

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

二、启动 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");  //h5

        des.setCapability("platformName", "Android");//平台名称

        des.setCapability("platformVersion", "4.4");//手机操作系统版本

        des.setCapability("udid", "192.168.229.101:5555");//连接的物理设备的唯一设备标识

        des.setCapability("deviceName", "S4");//使用的手机类型或模拟器类型  UDID

         

        des.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);//设置超时等待时间,默认250ms

        driver.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;

    @BeforeTest

    public 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.contacts

        des.setCapability("appActivity", ".Calculator");//.activities.PeopleActivity

        des.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);    

    }

}

【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通


二、接口自动化项目实战

三、Web自动化项目实战


四、App自动化项目实战

五、一线大厂简历


六、测试开发DevOps体系

七、常用自动化测试工具


八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java + Selenium + Appium自动化测试 的相关文章

随机推荐

  • 让老板成为数据分析师,我用 ChatGpt 链接本地数据源实战测试

    本文探究 ChatGpt 等AI机器人能否帮助老板快速的做数据分析 用自然语言同老板进行沟通 满足老板的所有数据分析的诉求 一 背景 设想这样一个场景 你是某贸易公司的老板 公司所有的日常运转数据都在私域的进销存系统 包括客户 供应商 销售
  • LangChain+通义千问+AnalyticDB向量引擎保姆级教程

    本文以构建AIGC落地应用ChatBot和构建AI Agent为例 从代码级别详细分享AI框架LangChain 阿里云通义大模型和AnalyticDB向量引擎的开发经验和最佳实践 给大家快速落地AIGC应用提供参考 前言 通义模型具备的能
  • 拆解大语言模型 RLHF 中的PPO算法

    为什么大多数介绍大语言模型 RLHF 的文章 一讲到 PPO 算法的细节就戛然而止了呢 要么直接略过 要么就只扔出一个 PPO 的链接 然而 LLM x PPO 跟传统的 PPO 还是有些不同的呀 其实在 ChatGPT 推出后的相当一段时
  • java版微信小程序商城免费搭建 java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

    涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架 V
  • 被忽悠选择那些价格昂贵的知识付费平台?我有才知识服务平台手把手教你如何正确选择!

    在当今的知识经济时代 一个高效 便捷的知识服务平台对于企业和个人至关重要 然而 市面上的众多知识服务平台中 许多产品存在高昂的费用 无用功能的堆砌 无法定制化等问题 让用户进退两难 甚至被忽悠掉入使用陷阱 今天 我们将为您详细介绍一款改变这
  • 构建企业知识金库,开启专属知识付费之旅

    一 确定目标群体 首先 你需要明确你的知识付费平台的目标用户是谁 这将帮助你确定所需的内容和功能 以及如何吸引和留住这些用户 例如 如果你的目标群体是职场新人 你的平台可能需要提供职场技能 职业规划 面试技巧等方面的内容 二 创建优质内容
  • 教你如何打造自己的知识付费平台!

    我有才知识付费平台 一 确定目标群体 首先 你需要明确你的知识付费平台的目标用户是谁 这将帮助你确定所需的内容和功能 以及如何吸引和留住这些用户 例如 如果你的目标群体是职场新人 你的平台可能需要提供职场技能 职业规划 面试技巧等方面的内容
  • 题解|#走多远# lanqiao 拓扑排序模板

    题解 走多远 lanqiao 拓扑排序模板 include
  • xv6(12文件系统Inode&;Directory&;Path

    签三方前查一下校招黑名单 对你真没啥坏处 靠谱 也可以找我push 华为上海终端 各位大大帮忙看看 发的一堆sp被鸽麻了 求求大家投下小米 谈谈c 方向 校招 华为15A vs 南湖实验室 华为15A vs 南湖实验室 27届Java求建议
  • java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • 我有才专属定制适合个人的知识付费平台,打造个性化品牌与自主管理体验

    在当今数字化时代 知识付费平台已经成为人们获取专业知识 提升自身素质的重要渠道 然而 公共知识付费平台虽然内容丰富 但难以满足个人或企业个性化的需求和品牌打造 因此 我们提出了专属定制适合个人的知识付费平台的概念 重点突出属于自己公司或个人
  • 企业电子招投标采购系统源码之鸿鹄电子招投标系统+电子招投标的组成

    鸿鹄招投标系统的功能描述 1 门户管理 用户可通过门户页面查看所有公告信息及相关通知信息 包括招标公告 非招标公告 系统通知和政策法规等板块 2 立项管理 企业用户可以对需要采购的项目进行立项申请 并提交审批 同时可以查看所有的立项信息 主
  • JMeter接口测试之文件上传!

    最近用JMeter做接口测试 频繁遇到了文件上传的接口 与其他一般接口的处理方式不一样 想着分享下 希望能给测试同学一点启发 文章将围绕三个部分进行展开 一 用户场景 二 接口请求参数 三 JMeter脚本编写步骤 四 JMeter脚本执行
  • 基于Java的土地档案管理系统设计与实现开题报告

    计算机开题报告 一 选题背景与意义 土地档案管理是土地资源管理的重要组成部分 对于政府部门来说 一个高效 准确的土地档案管理系统能够提高土地资源管理的效率和质量 本项目旨在设计和实现一个基于Java的土地档案管理系统 方便政府部门对土地档案
  • 选择正确的自动化测试工具:打造高效测试流程的必备利器!

    摘要 自动化测试正在逐步取代部分手动测试 因为它可以节省时间并提高测试质量 特别是在进行回归测试的情况下 自动化可以通过多种方式提高效率 手动进行重复测试是浪费时间和资源 此外 由于重复测试可能会遗漏 因此存在一定的错误范围 但是自动化中发
  • 大模型下开源文档解析工具总结及技术思考

    1 基于文档解析工具的方法 pdf解析工具 导图一览 PyPDF2提取txt import PyPDF2 def extract text from pdf pdf path with open pdf path rb as file pd
  • 概念解读稳定性保障

    什么是稳定 百度百科关于稳定的定义 稳恒固定 没有变动 很明显这里的 稳定 是相对的 通常会有参照物 例如 A 车和 B 车保持相同速度同方向行驶 达到相对平衡相对稳定的状态 那么软件质量的稳定是指什么呢 假设软件系统是辆车 质量预期是满足
  • 华为od求捞

    字节 虾皮 算法面试 虾皮 算法工程师 一面面经 虾皮北京提前批 算法工程师 回暖分析 战绩结算 on 赛文X 爱奇艺 华为od求捞 情况 12月机考289 没有约到面试 普通本科 自考了河北大学计算机本科 有四年的软件开发工作经验 这种情
  • 快速搭建知识付费平台?我有才,为你提供一站式解决方案

    在当今数字化时代 知识付费已经成为一种趋势 越来越多的人愿意为有价值的知识付费 然而 公共知识付费平台虽然内容丰富 但难以满足个人或企业个性化的需求和品牌打造 同时 开发和维护一个属于自己的知识付费平台需要较高的成本和专业技术支持 对于许多
  • Java + Selenium + Appium自动化测试

    一 启动测试机或者Android 模拟器 Genymotion俗称世界上最快的模拟器 可自行百度安装 二 启动 Appium Appium环境安装可自行百度 三 安装应用到Genymotion上 如下图我安装一个计算机的小应用 包名为Cal