appium 如何跨app测试怎么测试安卓手机app

&&国之画&&&&&&
版权所有 京ICP备号-2
迷上了代码!app自动化的webView页面测试思路(appium工具)。
app自动化的webView页面测试思路(appium工具)。
标签:1.获取当前activity多有的handles,然后去遍历它,发现webView后切换到webView对应模式,就可以了。进一步操作webView的话用下面的方法(driver.getPageSource)获取webView对应的html代码(这一步很关键).之后就跟测试web页面一样了。
发表评论:
TA的最新馆藏第四章&Appium真机运行测试用例讲解
&-----手机自动化之Appium
手机自动化测试用例虽然可以在模拟器上运行,可是模拟器毕竟和真机还是有区别的。在第二章我们讲到了模拟器上运行测试用例后,我又花了两天的时间,研究了一下真机运行测试用例。只有在真机上运行,才能真正发现出问题。期间也遇到了不少问题,不过最终还是搞定了,现在先将测试用例真机运行的方法说一下,然后再罗列我遇到的问题。
4.1真机运行测试用例的方法
打开手机的USB调试模式
不同的手机有不同的方法打开usb调试模式,可是去网上查一下你手机的调试模式打开办法()。还有一个可以去网上下载一个“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
参数后面跟的一串字符就是手机的UDID,这个是通过第二步查到的。
图4.2 启动Appium服务
&当程序输出如上图信息的时候,表示appium启动成功,此时便可以运行测试脚本了。
安装要测试的App
当然我们要需要在测试机上安装被测试的App,去网上下载最新的众筹网的App,然后安装到测试机上。注意要确保安装的App的版本,手机系统版本,和android Sdk的API版本相同或是兼容。
五,测试脚本的编写及运行
& &真机运行的测试脚本与模拟器上几乎是相同的,就是有些儿配置不太一样。具体脚本详解如下:
#-*- coding: UTF-8 -*-
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__':
unittest.TestLoader().loadTestsFromTestCase(LoginAndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
另开一个cmd窗口,运行测试脚本(python XXXX.py)即可。此时服务端就会有输出,程序在手机上运行。打开App后,输入用户名和密码,然后进入应用后停了10秒后关闭App。
注:在测试用例运行过程中,要在手机上安装Appium Settings,按提示允许安装就可以了。
真机运行的时候遇到的问题
(1)电脑连接到手机后,运行adb
devices &l无信息输出?
& &电脑连接手机后,一般情况下会提示安装驱动程序,如果手机较新的话可能不会提示,但是运行adb devices &l后无任何输出。此时只需要安装91手机助手或是其他手机管理工具,安装上相应的驱动程序,再次连接就可以了。
(2)运行程序后提示:?
&&当我从网上学习了脚本的编写方法后,模拟着写了一个我自己的测试用例,可是连接到真机后,运行脚本时,在执行过程中出现了上面的错误提示,可是程序无法运行。
在网上查看了一下,找到了问题所在:是程序的'appPackage'和‘appActivity’不正确,查找了解决办法,有说要反编译被测试的app,然后查找里面的appactivity。可是反编译后才发现,里面的东西好多,找不到开始的时候appactivity是哪儿个?只好再找其他的办法了。
最后在一个论坛的回复中找到了解决办法:将setup函数中的两行代码注释掉就可以了。
desired_caps['appPackage']='com.subject.zhongchou'
desired_caps['appActivity']='.ZhongChou'
(3)在程序执行这程中,用Send_keys()函数对输入框输入值的时候,无法输入?
&当我执行测试用例的时候,发现用户名和密码无法用send_keys()函数输入到输入框中。因为输入就会打开软键盘,而软键盘上面的布局是九宫格的,点击一直出错。
&在网上查了好多办法,人家都是一用的这个函数啊,为什么到我这就不行了呢?我想到了先切换到数字或是英语输入模式,然后再输入,折腾起来很麻烦,还没有成功。最后才发现,是我自己好傻,安装了搜狗输入法的原因,把这个输入法卸掉后就成功了!
本章我们讲解了如何在真实的手机上运行测试用例,当然我们仍然是以众筹网App的登录为例的。通过分步介绍,我们可以一步步地把测试用例在真机上运行起来,这也是我们真正开始我们的自动化测试用例编写之路之前的准备。环境,Appium API和真机运行方法我们都讲解完后,从下一章我们开始,讲解具体的测试用例应该如何入手。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。IOS、Android自动化测试框架Appium概述
Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar&s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。
使用Appium进行自动化测试有两个好处:
1. Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。
2. Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。
Requirements
IOS自动化测试需要Mac os操作系统
Mac OS X 10.7或者更高版本,推荐10.8.4版本
Android自动化测试可以在Mac、Linux上进行。对于Windows平台的支持还在beta阶段
需要安装node和npm(node版本高于0.8)
IOS自动化:
Apple开发者工具(iphone模拟器sdk,及命令行工具)
Android自动化:
Android SDK API版本 &= 17,即android版本高于4.2
方案1: 使用Appium.app
下载appium.app&
在Apple系统上安装appium.app,就可以直接运行自己的case
方案2: 使用node从命令行运行appium
安装node及npm
下面命令是在linux系统中安装appium
mkdir appium-test && cd appium-test
npm install -g appium
# might have to do this with sudo
sudo authorize_ios # enable developer use of iOS sim
npm install wd
curl -O /appium/appium/master/sample-code/examples/node/simplest.js
node simplest.js
下面是一些不同语言编写的appium的测试用例
Example Tests:&&|&&|&&|&&|&
如果使用过程遇到问题,可以参考,这里包含了一些常见错误的解决方法,也包含appium组织的联系方法。
使用appium编写测试用例
Appium支持(部分支持,非全部)
appium定位元素的方法也和webdriver类似,但是也仅支持webdriver中的部分方法,详细信息见.
Appium也为json wire协议提供了一些拓展,来支持智能手机的手势动作,如tap(轻击)、flick,swipe,更多信息点击
Appium也支持在混合的app中,自动化测试web views,参见
Appium 同时支持Android和IOS平台:
Appium全部文档,点击。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'16:20 提问
appium 测试无法打开 app,请各位大神帮忙
初学appium,使用python写测试脚本,现在可以安装上app,之后无法自动启动app。
这是我的脚本:
#coding=utf-8
from appium import webdriver
from lib2to3.pgen2.driver import Driver
from lib2to3.tests.support import driver
import time
PATH=lambda p:os.path.abspath(os.path.join(os.path.dirname(file),p))
global driver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.2'
desired_caps['deviceName'] = 'b91b9b66'
#desired_caps['appPackage'] = 'com.zhengyuan.watch'
#desired_caps['appActivity'] = 'com.zhengyuan.watch.logic.launch.AppStart'
desired_caps['app'] = PATH('D:\android\app\rtring_c_zhengyuan.apk')
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(5)
driver.swipe(600,660,10,660,1000)
time.sleep(1)
driver.swipe(600,660,10,660,1000)
time.sleep(1)
info: --& POST /wd/hub/session {"desiredCapabilities":{"platformVersion":"4.4.2","deviceName":"b91b9b66","app":"D:\android\app\rtring_c_zhengyuan.apk","platformName":"Android"}}
info: Client User-Agent string: Python-urllib/2.7
info: [debug] No appActivity desired capability or server param. Parsing from apk.
info: [debug] No appPackage desired capability or server param. Parsing from apk.
info: [debug] Using local app from desired caps: D:\android\app\rtring_c_zhengyuan.apk
info: [debug] Creating new appium session 7ab051a1-8c95-4b9a-a998-f
info: Starting android appium
info: [debug] Getting Java version
info: Java version is: 1.7.0_79
info: [debug] Checking whether adb is present
info: [debug] Using adb from D:\android\sdk\platform-tools\adb.exe
info: [debug] Parsing package and activity from app manifest
info: [debug] Checking whether aapt is present
info: [debug] Using aapt from D:\android\sdk\build-tools\android-4.4W\aapt.exe
info: [debug] Extracting package and launch activity from manifest.
info: [debug] executing cmd: D:\android\sdk\build-tools\android-4.4W\aapt.exe dump badging D:\android\app\rtring_c_zhengyuan.apk
info: [debug] badging package: com.zhengyuan.watch
info: [debug] badging act: com.zhengyuan.watch.logic.launch.AppStart
info: [debug] Parsed package and activity are: com.zhengyuan.watch/com.zhengyuan.watch.logic.launch.AppStart
info: [debug] Using fast reset? true
info: [debug] Preparing device for session
info: [debug] Checking whether app is actually present
info: Retrieving device
info: [debug] Trying to find a connected android device
info: [debug] Getting connected devices...
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe devices
info: [debug] 1 device(s) connected
info: Found device b91b9b66
info: [debug] Setting device id to b91b9b66
info: [debug] Waiting for device to be ready and to respond to shell commands (timeout = 5)
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 wait-for-device
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "echo 'ready'"
info: [debug] Starting logcat capture
info: [debug] Getting device API level
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "getprop ro.build.version.sdk"
info: [debug] Device is at API Level 19
info: Device API level is: 19
info: [debug] Extracting strings for language: default
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "getprop persist.sys.language"
info: [debug] Current device persist.sys.language: zh
info: [debug] java -jar "C:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-adb\jars\appium_apk_tools.jar" "stringsFromApk" "D:\android\app\rtring_c_zhengyuan.apk" "C:\Users\admin\AppData\Local\Temp\com.zhengyuan.watch" zh
info: [debug] Reading strings from converted strings.json
info: [debug] Setting language to default
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 push "C:\Users\admin\AppData\Local\Temp\com.zhengyuan.watch\strings.json" /data/local/tmp
info: [debug] Checking whether aapt is present
info: [debug] Using aapt from D:\android\sdk\build-tools\android-4.4W\aapt.exe
info: [debug] Retrieving process from manifest.
info: [debug] executing cmd: D:\android\sdk\build-tools\android-4.4W\aapt.exe dump xmltree D:\android\app\rtring_c_zhengyuan.apk AndroidManifest.xml
info: [debug] Set app process to: com.zhengyuan.watch
info: [debug] Not uninstalling app since server not started with --full-reset
info: [debug] Checking app cert for D:\android\app\rtring_c_zhengyuan.apk.
info: [debug] executing cmd: java -jar "C:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-adb\jars\verify.jar" D:\android\app\rtring_c_zhengyuan.apk
info: [debug] App already signed.
info: [debug] Zip-aligning D:\android\app\rtring_c_zhengyuan.apk
info: [debug] Checking whether zipalign is present
info: [debug] Using zipalign from D:\android\sdk\build-tools\android-4.4W\zipalign.exe
info: [debug] Zip-aligning apk.
info: [debug] executing cmd: D:\android\sdk\build-tools\android-4.4W\zipalign.exe -f 4 D:\android\app\rtring_c_zhengyuan.apk C:\Users\admin\AppData\Local\Temp\-1fgurq6\appium.tmp
info: [debug] MD5 for app is 310a577ec209ceac8a6deed
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "ls /data/local/tmp/310a577ec209ceac8a6deed.apk"
info: [debug] Getting install status for com.zhengyuan.watch
info: [debug] Getting device API level
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "getprop ro.build.version.sdk"
info: [debug] Device is at API Level 19
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "pm list packages -3 com.zhengyuan.watch"
info: [debug] App is installed
info: Installing App
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "mkdir -p /data/local/tmp/"
info: [debug] Removing any old apks
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "ls /data/local/tmp/*.apk"
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell rm "/data/local/tmp/8f29ab35c86ad03708a23dfe9aaeeaa0.apk"
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 push "D:\android\app\rtring_c_zhengyuan.apk" /data/local/tmp/310a577ec209ceac8a6deed.apk
info: [debug] Uninstalling com.zhengyuan.watch
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "am force-stop com.zhengyuan.watch"
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 uninstall com.zhengyuan.watch
info: [debug] App was uninstalled
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "pm install -r /data/local/tmp/310a577ec209ceac8a6deed.apk"
info: [debug] Forwarding system:4724 to device:4724
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 forward tcp:4724 tcp:4724
info: [debug] Pushing appium bootstrap to device...
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 push "C:\Program Files (x86)\Appium\node_modules\appium\build\android_bootstrap\AppiumBootstrap.jar" /data/local/tmp/
info: [debug] Pushing settings apk to device...
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 install "C:\Program Files (x86)\Appium\node_modules\appium\build\settings_apk\settings_apk-debug.apk"
info: [debug] Pushing unlock helper app to device...
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 install "C:\Program Files (x86)\Appium\node_modules\appium\build\unlock_apk\unlock_apk-debug.apk"
info: Starting App
info: [debug] Attempting to kill all 'uiautomator' processes
info: [debug] Getting all processes with 'uiautomator'
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "ps 'uiautomator'"
info: [debug] Attempting to kill process 31936
info: [debug] executing cmd: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell "kill 31936"
info: [debug] Running bootstrap
info: [debug] spawning: D:\android\sdk\platform-tools\adb.exe -s b91b9b66 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap -e pkg com.zhengyuan.watch -e disableAndroidWatchers false
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: numtests=1
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream=
info: [debug] [UIAUTOMATOR STDOUT] io.appium.android.bootstrap.Bootstrap:
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: test=testRunServer
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: class=io.appium.android.bootstrap.Bootstrap
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: current=1
info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: 1
info: [debug] [BOOTSTRAP] [debug] Socket opened on port 4724
info: [debug] [BOOTSTRAP] [debug] Appium Socket Server Ready
info: [debug] [BOOTSTRAP] [debug] Loading json...
error: Unhandled error: Error: getaddrinfo ENOENT
at Object.exports.errnoException (util.js:746:11)
at errnoException (dns.js:49:15)
at GetAddrInfoReqWrap.onlookup as oncomplete context: [POST /wd/hub/session {"desiredCapabilities":{"platformVersion":"4.4.2","deviceName":"b91b9b66","app":"D:\android\app\rtringc_zhengyuan.apk","platformName":"Android"}}]
info: [debug] [BOOTSTRAP] [debug] json loading complete.
info: [debug] [BOOTSTRAP] [debug] Registered crash watchers.
info: &-- POST /wd/hub/session - - ms - -
之后就停住了,请大家帮我看看是什么问题,纠结了好几天了,谢谢大家!
按时间排序
手机上的appium setting 还有unlock删除了,再重启appium就OK了
你这个问题解决了吗,楼主
958关注|266收录
其他相似问题

我要回帖

更多关于 appium 安卓真机测试 的文章

 

随机推荐