第四章 Appium真机运行测试用例讲解
-----手机自动化之Appium
手机自动化测试用例虽然可以在模拟器上运行,可是模拟器毕竟和真机还是有区别的。在第二章我们讲到了模拟器上运行测试用例后,我又花了两天的时间,研究了一下真机运行测试用例。只有在真机上运行,才能真正发现出问题。期间也遇到了不少问题,不过最终还是搞定了,现在先将测试用例真机运行的方法说一下,然后再罗列我遇到的问题。
4.1真机运行测试用例的方法
一, 打开手机的USB调试模式
不同的手机有不同的方法打开usb调试模式,可是去网上查一下你手机的调试模式打开办法(http://wenku.baidu.com/view/3077f06c25c52cc58bd6be15.html?re=view)。还有一个可以去网上下载一个“USB调试快捷开关”的应用,将手机的USB调试模式打开。
二, 连接手机到电脑
将手机用数据线连接到电脑,并授权USB调试模式。查看连接的效果,在cmd下运行命令:adb devices -l 查看UDID,如下图4.1所示:
图4.1 查看手机信息
如果有输出,就表示连接成功。
三, 启动Appium服务
根据查到的UDID启动appium服务,运行命令:
#>appium -a 127.0.0.1 -p 4723 –U 4ca1558c --no-reset
-U 参数后面跟的一串字符就是手机的UDID,这个是通过第二步查到的。
图4.2 启动Appium服务
当程序输出如上图信息的时候,表示appium启动成功,此时便可以运行测试脚本了。
四, 安装要测试的App
当然我们要需要在测试机上安装被测试的App,去网上下载最新的众筹网的App,然后安装到测试机上。注意要确保安装的App的版本,手机系统版本,和android Sdk的API版本相同或是兼容。
五,测试脚本的编写及运行
真机运行的测试脚本与模拟器上几乎是相同的,就是有些儿配置不太一样。具体脚本详解如下:
#-*- coding: UTF-8 -*-
import os
import time
import unittest
from selenium import webdriver
from lib2to3.pgen2.driver import Driver
from lib2to3.tests.support import driver
PATH=lambda p:os.path.abspath(
os.path.join(os.path.dirname(__file__),p)
)
global driver
class LoginAndroidTests(unittest.TestCase):
def setUp(self):
desired_caps={}
desired_caps['device'] = 'android'
desired_caps['platformName']='Android'
desired_caps['browserName']=''
desired_caps['version']='4.4.2'
desired_caps['deviceName']='MIUI-KXCCNBF22.0'#这是测试机的型号,可以查看手机的关于本机选项获得
desired_caps['app'] = PATH('D:\\AndroidAutomation\\AndroidAutoTest\\app\\zhongchou.apk')#被测试的App在电脑上的位置
#如果知道被测试对象的apppage,appActivity可以加上下面这两个参数,如果不知道,可以注释掉,不影响用例执行
#desired_caps['appPackage']='com.subject.zhongchou'
#desired_caps['appActivity']='.ZhongChou'
self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
def tearDown(self):
self.driver.quit()
def test_login(self):
time.sleep(10)
#点击“注册登录”按钮 button=self.driver.find_element_by_id("com.subject.zhongchou:id/register_button")
button.click()
time.sleep(5)
#登录
name = self.driver.find_element_by_id('com.subject.zhongchou:id/loginnumber_phone')
name.click()
name.send_keys('183XXXXXX05')
psd = self.driver.find_element_by_id('com.subject.zhongchou:id/loginnumber_password')
psd.click()
psd.send_keys('XXXXXXXX’)
blogin=self.driver.find_element_by_id('com.subject.zhongchou:id/go_numberlogin')
blogin.click()
time.sleep(10)
#此处加上检测登录是否成功的代码
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(LoginAndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
另开一个cmd窗口,运行测试脚本(python XXXX.py)即可。此时服务端就会有输出,程序在手机上运行。打开App后,输入用户名和密码,然后进入应用后停了10秒后关闭App。
注:在测试用例运行过程中,要在手机上安装Appium Settings,按提示允许安装就可以了。
4.2 真机运行的时候遇到的问题
(1)电脑连接到手机后,运行adb devices –l无信息输出?
电脑连接手机后,一般情况下会提示安装驱动程序,如果手机较新的话可能不会提示,但是运行adb devices –l后无任何输出。此时只需要安装91手机助手或是其他手机管理工具,安装上相应的驱动程序,再次连接就可以了。
(2)运行程序后提示:WebDriverException: Message: u"A new session could not be created. (Original error: Activity used to start app doesn't exist or cannot be launched! Make sure it exists and is a launchable activity)"?
当我从网上学习了脚本的编写方法后,模拟着写了一个我自己的测试用例,可是连接到真机后,运行脚本时,在执行过程中出现了上面的错误提示,可是程序无法运行。
在网上查看了一下,找到了问题所在:是程序的'appPackage'和‘appActivity’不正确,查找了解决办法,有说要反编译被测试的app,然后查找里面的appactivity。可是反编译后才发现,里面的东西好多,找不到开始的时候appactivity是哪儿个?只好再找其他的办法了。
最后在一个论坛的回复中找到了解决办法:将setup函数中的两行代码注释掉就可以了。
desired_caps['appPackage']='com.subject.zhongchou'
desired_caps['appActivity']='.ZhongChou'
(3)在程序执行这程中,用Send_keys()函数对输入框输入值的时候,无法输入?
当我执行测试用例的时候,发现用户名和密码无法用send_keys()函数输入到输入框中。因为输入就会打开软键盘,而软键盘上面的布局是九宫格的,点击一直出错。
在网上查了好多办法,人家都是一用的这个函数啊,为什么到我这就不行了呢?我想到了先切换到数字或是英语输入模式,然后再输入,折腾起来很麻烦,还没有成功。最后才发现,是我自己好傻,安装了搜狗输入法的原因,把这个输入法卸掉后就成功了!
4.3 本章小结
本章我们讲解了如何在真实的手机上运行测试用例,当然我们仍然是以众筹网App的登录为例的。通过分步介绍,我们可以一步步地把测试用例在真机上运行起来,这也是我们真正开始我们的自动化测试用例编写之路之前的准备。环境,Appium API和真机运行方法我们都讲解完后,从下一章我们开始,讲解具体的测试用例应该如何入手。
第四章 Appium真机运行测试用例讲解的更多相关文章
- Appium真机运行测试用例
- python+appium真机运行登录例子
一.手机USB连接电脑(手机打开调试模式) 验证:cmd -> 输入adb devices,查看手机的UDID.显示如下表示 连接成功 二.启动Appium服务 1. 启动Appium,点击 右 ...
- 二.Android手机自动化测试真机运行
手机自动化测试用例虽然可以在模拟器上运行,可是模拟器毕竟和真机还是有区别的.在搞定了模拟器上运行测试用例后,我又花了两天的时间,研究了一下真机运行测试用例.期间也遇到了不少问题,不过最终还是搞定了,现 ...
- Appium学习之驱动真机运行
一.Appium工具的简单原理 Appium工具可以分为:客户端(appium-client).服务端(appium-server)和移动设备端(模拟器或者真机).客户端支持多语言,如:python- ...
- 如何在 iOS 真机运行 Appium
使用 gui 启动的 appium 1.2.2 也会有这个问题,所以你要把 deviceconsole 复制到 /Applications/Appium.app/Contents/Resources/ ...
- appium 真机测试问题 出现 instruments crashed on startup
1.appium 真机测试的时候 instruments crashed on startup,必须在真机上打开UI Automation 在设置里: Developer->Enable UI ...
- ReactNative真机运行指南
ReactNative真机运行指南 注意在iOS设备上运行React Native应用需要一个Apple Developer account并且把你的设备注册为测试设备.本向导只包含React Nat ...
- ionic ios项目真机运行-不用开发者账号
ionic ios项目真机运行-不用开发者账号 1. 添加ios平台 ionic platform add ios 2.使用XCODE打开项目 3.使用APPID登录XCODE 打开XCODE账号登录 ...
- 【Android Studio安装部署系列】七、真机运行项目
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 简单介绍下真机运行项目的操作步骤. 手机连接电脑 将手机通过数据线连接到电脑上,此时电脑会自动下载安装驱动程序.如果没有安装上的话, ...
随机推荐
- sys添加调用模块的路径;遍历可以调用模块的路径
import sys sys.path.append("D:") for i in sys.path: print(i)
- 如何选择RDBMS关系型数据库和Nosql非关系型数据库?
RDBMS关系型数据库和Nosql非关系型数据库区别: 一.RDBMS是关系型数据库模式: 1.二维模式,由行列组成. 2.非常强调事务原子性,例如用户提出一个请求,DB完整的去执行,如果报错就全部回 ...
- ECMAScript 定义类、对象
使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 工厂方式 原始的方式 因为对象的属性可以在对象创建后动 ...
- C++用指针变量作为函数的参数接受数组的值的问题的总结
实参和形参的四种结合方式 实参 形参 实例 数组名 数组名 1.1 数组名 指针变量 1.2 指针变量 数组名 1.3 指针变量 指针变量 1.4 本文以输入10个整数,然后对其进行排序,然后输出的程 ...
- IO流框架关系总结(关系图)
字节流和字符流关系图 打印流和序列化流关系图
- 1.5快速上手OpenCV图像处理
在上一节中,已经完成了OPENCV的配置,在本节接触几个Opencv图像处理相关的程序,看看opencv用简洁的代码能够实现哪些有趣的图像效果. 1.第一个程序:图像显示 #include<op ...
- c++中怎么实现Java中finally语句
所有学习c++的书籍都明确提出了,不要使用goto, 以免造成程序流程的混乱,使理解和调试程序都产生困难. 但是我们遇到这样一个场景怎么办:就是不管程序执行成功与否,都要执行一些资源释放语句,相当ja ...
- java全栈day06---数组的练习 冒泡排序
水仙花练习功能实现 * A: 水仙花练习功能实现 * a: 题目分析 * 明确什么样的数就是水仙花数.水仙花数是指一个3位数(100-999之间),其每位数字立方之和等于该3位数本身. 如153 = ...
- 'module' object has no attribute 'contrib'
Problem solved, turns i had 2 tensorflow versions installed: When launching $python , it used 0.6 ve ...
- [译]Javascript中的递归函数
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...