(转) [Android测试] AS+Appium+Java+Win自动化测试之三: 基础知识和Appium界面
一、把上一章的demo先看懂
AndroidContactsTest.Java
public class AndroidContactsTest {
//Driver
private AppiumDriver<AndroidElement> driver;
/**
* 配置启动driver
* @throws Exception
*/
@Before
public void setUp() throws Exception {
File classpathRoot = new File(System.getProperty("user.dir"));
//app的目录
File appDir = new File(classpathRoot, "/src/main/java/apps/");
//app的名字,对应你apps目录下的文件
File app = new File(appDir, "ContactManager.apk");
//创建Capabilities
DesiredCapabilities capabilities = new DesiredCapabilities();
//设置要调试的模拟器的名字
capabilities.setCapability("deviceName","minote");
//设置模拟器的系统版本
capabilities.setCapability("platformVersion", "4.4.2");
//设置app的路径
capabilities.setCapability("app", app.getAbsolutePath());
//设置app的包名
capabilities.setCapability("appPackage", "com.example.android.contactmanager");
//设置app的启动activity
capabilities.setCapability("appActivity", ".ContactManager");
//启动driver
driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
public void tearDown() throws Exception {
//测试完毕,关闭driver,不关闭将会导致会话还存在,下次启动就会报错
driver.quit();
}
/**
* 要执行的的测试方法
*/
@Test
public void addContact(){
//利用Xpath的方法寻找text值为Add Contact的控件
WebElement el = driver.findElement(By.xpath(".//*[@text='Add Contact']"));
//点击这个控件
el.click();
//利用类名获取界面上所有的EditText
List<AndroidElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
//第一个EditText输入内容Some Name
textFieldsList.get(0).sendKeys("Some Name");
//第三个EditText输入内容Some Name
textFieldsList.get(2).sendKeys("Some@example.com");
//在坐(100,500)滑动到(100,100) 时间为2毫秒
driver.swipe(100, 500, 100, 100, 2);
//用xpath的方式寻找到text值为Save的控件,然后点击
driver.findElementByXPath(".//*[@text='Save']").click();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
二、Selenium 是什么?
Selenium是一套完整的web自动化测试工具集,它包含了测试的录制(Selenium IDE)、编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)、WebDriver(selenium 2.0)等。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可运行于任何支持javascript的浏览器上。与WatiN相同,Selenium也是一款同样使用Apache License 2.0协议发布的开源框架
Selenium IDE 是firefox浏览器的一个插件。提供简单的脚本录制、编辑与回放功能。
Selenium Grid 是用来对测试脚步做分布式处理。现在已经集成到selenium server 中了。
RC和WebDriver 更多应该把它看成一套规范,在这套规范里定义客户端脚步与浏览器交互的协议。以及元素定位与操作的接口。
三、WebDriver 是什么?
其实它就是一层基础的协议规范。
假如说:Webdriver API(接口规范)说,我们要提供一个页面元素id的定位方法。
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;//导入java版的selenium(webdriver)
findElement(By.id("xx")); //id定位方法
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
四、Webdriver 如何组织和执行用例?
把写好这些操作页面元素的方法(用例)组织起来执行并输入测试结果,是由编程语言的单元测试框架去完成的。如java 的junit和testng单元测试框架(之后会说,替换Testng)。
五、并行与分布式的区别
如何并行的执行测试用例,并行要求“同时”执行多条用例,这个也是由编程语言的多线程技术实现的。
并行可以用Selenium Grid或者Testng来实现。
Selenium Grid 不是可以实现分布式执行么?分布式的概念是写好一条用例可以调用不同的平台执行,如 A电脑上有一个测试用例,可以调用B电脑(Linux)的Firefox浏览器来跑A电脑上的测试用例;也可以调用C电脑(windows)的Chrome浏览器来跑A电脑上的测试用例。这是分布式的概念。
六、Appium再度了解和界面
说了那么多,其实Appium专业做MobileApp的自动化的,selenium只能操作iOS和Android的默认浏览器。
从本质上来讲,appium同样继承了WebDriver API的接口规范。Appium 同样是支持多种编程语言, 然后Appium还包含了Selenium。
so Appium是非常强大的,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于ios和android以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用,移动网页应用是指网页应用,类似于ios中safari应用或者Chrome应用或者类浏览器的应用。混合应用是指一种包裹webview的应用,原生应用于网页内容交互性的应用。
重要的是Appium是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套api来编写测试用例。
Appium界面
1. Android Setting (Android设置)
Android相关的设置,为什么要设置呢,因为这里设置主要为了不用在脚本里面添加capabilities属性和inspector检测使用。
一些意思翻译过来就明白了,也不多说了
2. General Setting (常规设置)
服务器、日志记录 设置。这里服务器是本机,端口是4723,这是appium的端口,不是你模拟器的端口,不要搞混了,不用修改。
3. Developer Setting (开发者设置)
4.About (关于)
这没什么好说了,主要看当前版本
5. inspector (获取id元素的工具)
放大镜工具,获取app界面控件属性的工具,个人认为:截屏速度快,支持元素点击(MAC的比较屌,能记录,滑动,摇一摇等等)。但没有层次感,选中控件没有提示框,属性没分割不好看。这里推荐使用sdk自带的Android Device Monitor,主要是看id和布局。
还是介绍一下他的使用方法:
- 启动模拟器
- 配置Adnroid Setting(选择安装包和设置设备名)
- 启动Appium服务
- 启动Inspector
点击放大镜打开inspector,点击Refresh,没安装的话,就会安装AnroidStting里面设置的app
界面我都注释了:
6.Launch the appium node server开始停止
界面右上角的的三角按钮
7. 日志输出
中间黑色背景,是显示日志的,这个日志有用,调试运行过程中都会输出日志,报错都得靠他,输出内容有:
info: Appium的调试信息
error 出现错误时候的错误信息,这个很重要,解决出错问题就看这里了
8. clear this output log清除日志
主界面的右下角的垃圾桶,就是清除日志的,强迫症的点点点。
ps: 有些内容来自互联网
(转) [Android测试] AS+Appium+Java+Win自动化测试之三: 基础知识和Appium界面的更多相关文章
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- Windows&Appium&Java&Python自动化测试-配置开发环境
摘要 本篇博文,主要介绍借助Appium做移动端自动化测试的开发环境搭建,包括Java和Python Java环境:Appium+Maven+Idea+TestNG+Reportng Python环境 ...
- Java学习1——计算机基础知识
本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- Java中浮点数的基础知识
偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...
- java 程序运行的基础知识【Java bytecode】
聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- java前三本基础知识总结
基础软件:1:JDK,JRE,JVM(一些参数和作用),GC(机制和算法),Class,Loader(机种作用,加载顺序) 2:环境搭建:JAVA_HOME,path,class 语言基础:引用类型: ...
- JAVA面试题相关基础知识
1.面向对象的特征有哪些方面 ①抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 ...
- java OOP及相关基础知识汇总(转)
OOP 对象有三个要素 behavior 接口是怎样的,有什么方法/field可以用? state 调用方法的时候,对象会有什么反应? 只有通过调用方法才能改变一个对象的state identity ...
随机推荐
- 2023-03-26:给定一个二维数组matrix, 每个格子都是正数,每个格子都和上、下、左、右相邻。 你可以从任何一个格子出发,走向相邻的格子, 把沿途的数字乘起来,希望得到的最终数字中,结尾的0
2023-03-26:给定一个二维数组matrix, 每个格子都是正数,每个格子都和上.下.左.右相邻. 你可以从任何一个格子出发,走向相邻的格子, 把沿途的数字乘起来,希望得到的最终数字中,结尾的0 ...
- 2022-06-16:给定一个数组arr,含有n个数字,都是非负数, 给定一个正数k, 返回所有子序列中,累加和最小的前k个子序列累加和。 假设K不大,怎么算最快? 来自亚马逊。
2022-06-16:给定一个数组arr,含有n个数字,都是非负数, 给定一个正数k, 返回所有子序列中,累加和最小的前k个子序列累加和. 假设K不大,怎么算最快? 来自亚马逊. 答案2022-06- ...
- golang基础面试题,不完整
启动流程 Q.go的init函数是什么时候执行的? Q.多个init函数执行顺序能保证吗? Q.go init 的执行顺序,注意是不按导入规则的(这里是编译时按文件名的顺序执行的) Q.init函数能 ...
- 2021-11-30:给定一个数组arr,当拿走某个数a的时候,其他所有的数都+a, 请返回最终所有数都拿走的最大分数。 比如: [2,3,1], 当拿走3时,获得3分,数组变成[5,4]; 当拿走5
2021-11-30:给定一个数组arr,当拿走某个数a的时候,其他所有的数都+a, 请返回最终所有数都拿走的最大分数. 比如: [2,3,1], 当拿走3时,获得3分,数组变成[5,4]: 当拿走5 ...
- Python Numpy 切片和索引(高级索引、布尔索引、花式索引)
张量(Tensor).标量(scalar).向量(vector).矩阵(matrix) Python Numpy 切片和索引(高级索引.布尔索引.花式索引) Python NumPy 广播(Broad ...
- Vue 全局避免按钮重复点击
这里用到的 Vue.directive 自定义指令 自定义指令是对普通DOM元素进行的底层操作,它是一种有效的的补充和扩展,不仅可以用于定义任何的dom操作,并且是可以复用的 在 main.js 中写 ...
- Python这样读写Excel数据,这样简直不要太粗暴!
什么是xlrd&xlwt? xlrd和xlwt是Python语言中,读取和写入Excel数据的扩展工具.xlrd为xls文件read库,xlwt为xls文件write库.具体请看xlrd百度百 ...
- 记录一次ScrollViewer控件 经过大量文本数据卡顿的原因
在 WPF 中,CanContentScroll 是 ScrollViewer 控件的一个附加属性,它控制滚动视图中的内容是否按项或像素来滚动. 当 CanContentScroll 设置为 fals ...
- mybatis拦截器实现数据权限
前端的菜单和按钮权限都可以通过配置来实现,但很多时候,后台查询数据库数据的权限需要通过手动添加SQL来实现. 比如员工打卡记录表,有id,name,dpt_id,company_id等字段,后两个表示 ...
- undefined reference to错误的解决方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/cserchen/article/deta ...