|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zhang805095258 于 2018-1-28 19:15 编辑
一、 连接android手机和电脑连接(安装驱动)
a) 打开手机的USB调试
b) 连接手机到电脑
将手机用数据线连接到电脑,并授权USB调试模式。查看连接的效果,在cmd下运行命令:adb devices查看UDID,如下图所示:
1
二、 启动Appium
1. Cmd命令行启动
1.1 没有指定任何参数
2
Appium启动成功,启动ip为默认的 0.0.0.0,端口为默认的 4723
1.2 指定一些参数
命令行中输入:appium -a 127.0.0.1 -p 4723 --session-override
3
-a 是指定监听的ip(也可写成 --address),后面“127.0.0.1”可以改为你需要的ip地址;
-p 是指定监听的端口(也可写成 --port),也可以修改为你需要的端口;
--session-override 是指覆盖之前的session;
1.3 实际工作中常用的命令
命令行中输入:appium -a 127.0.0.1 -p 4727 -bp 4728 --chromedriver-port 9519 -U T47TCEHEBQPZPBO7--session-override
4
-bp 是连接Android设备bootstrap的端口号,默认是4724(也可写成--bootstrap-port)
--chromedriver-port 是chromedriver运行需要指定的端口号,默认是9515#应该是和浏览器的模拟器有关,做app测试可忽略
-U 是连接的设备名称,如"adb devices"获取的设备标识(也可写成--udid)
所以真实测试时,只需要运行下列命令:
根据查到的UDID启动appium服务,运行命令:
#>appium -a 127.0.0.1 -p 4723 –U T47TCEHEBQPZPBO7 --no-reset
-U 参数后面跟的一串字符就是手机的UDID,这个是通过第一步查到的。
2. 点击左上角有“机器人”的按钮
5
6
三、 然后执行python编写好的自动化测试代码
真机运行的测试代码与模拟器上几乎是相同的,就是有些儿配置不太一样。具体代码demo如下demo.py:
'''
测试登陆、订单列表、订单搜索、交接班
'''
#! /usr/bin/env python
#coding=utf-8
import os
import time
import unittest
from appium import webdriver#导入的必须是appium而不是selenium,因为有一些函数没有。例如driver.keyevent(4)
from selenium.webdriver.support.wait import WebDriverWait
#主测试程序
def d(platformName,platformVersion,deviceName,path):
desired_caps = {}
desired_caps['platformName'] = platformName#设备系统
desired_caps['platformVersion'] = platformVersion#设备系统版本
desired_caps['deviceName'] = deviceName#设备名称
#desired_caps['unicodeKeyboard'] = True#不弹出键盘直接输入
#desired_caps['resetKeyboard'] = True#不弹出键盘直接输入
desired_caps['app'] = path#金元宝
#金元宝
desired_caps['appPackage'] = 'com.yunzong.crosspos'
desired_caps['appActivity'] = 'com.yunzong.crosspos.activity.LauncherActivity'
#如果设置的是app在电脑上的路径,则不需要配appPackage和appActivity,同理反之
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)#启动app
if wait(driver,t='请输入您的账号'):
driver.find_element_by_xpath("//android.widget.RelativeLayout[contains(@index,1)]").send_keys("18511076143")
driver.find_element_by_xpath("//android.widget.RelativeLayout[contains(@index,2)]").send_keys("111111")
driver.hide_keyboard()#收起键盘
if wait(driver,t='登录'):
driver.find_element_by_name("登录").click()
if wait(driver,t='收银台'):
driver.find_element_by_name("订单").click()
if wait(driver,t='订单(今天)'):
driver.find_element_by_xpath("//android.widget.RelativeLayout/android.widget.TextView[contains(@index,2)]").click()
if wait(driver,t='请输入订单编号或会员卡号'):
driver.find_element_by_name("请输入订单编号或会员卡号").send_keys(u"1712161510548371")
driver.keyevent(84)#搜索点击确定
driver.find_element_by_name("取消").click()
driver.find_element_by_name("返回").click()
driver.find_element_by_name("交接班").click()
driver.find_element_by_name("在班").click()
driver.find_element_by_name("确定交接班").click()
print("测试完成,全部通过")
driver.quit()
#显式等待函数
def wait(driver,t):
try:
if WebDriverWait(driver,20,1).until(lambda driver:driver.find_element_by_name(t)):
return True
else:
return False
except:
print("20秒内没有找到元素:%s" % t)
driver.quit()
if __name__=="__main__":
platformName = 'Android'#设备系统
platformVersion = '4.2.1'#设备系统版本
deviceName= 'T47TCEHEBQPZPBO7'#设备名称
path = 'E:\\android+appium\\pos-release-1.1.4-sunmi.apk'
d(platformName,platformVersion,deviceName,path)
另开一个cmd窗口,运行测试代码(python demo.py)即可。此时服务端就会有输出,程序在手机上运行。
注:在测试用例运行过程中,正常情况下手机会自动安装Settings和Unlock,有些手机有兼容性问题,Settings和Unlock程序打不开,所以每次运行代码都会提示安装,按提示允许安装就可以。
四、 Appium的Desired Capabilities是扩展了webdriver的Desired Capabilities的,下面的一些通用配置是需要指定的:
• automationName:使用哪种自动化引擎。appium(默认)还是Selendroid?#如果是app自动化测试,一定要选择appium
• platformName:使用哪种移动平台。iOS, Android, orFirefoxOS?
• deviceName:启动哪种设备,是真机还是模拟器?iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, etc...
• app:应用的绝对路径,注意一定是绝对路径。如果指定了appPackage和appActivity的话,这个属性是可以不设置的。另外这个属性和browserName属性是冲突的。
• browserName:移动浏览器的名称。比如Safari' for iOS and 'Chrome', 'Chromium', or 'Browser' for Android;与app属性互斥。
• udid:物理机的id。比如1ae203187fc012g。
五、 下面这些属性是android平台特定的:
• appActivity:待测试的app的Activity名字。比如MainActivity, .Settings。注意,原生app的话要在activity前加个"."。
• appPackage:待测试的app的java package。比如:com.example.android.myApp, com.android.settings。
六、 获取Android app的appActivity
方法一:
问研发
方法二:
appPackage 是com.yunzong.crosspos
adb shell
logcat | grep cmp= com.yunzong.crosspos
7
方法三:
首先,你要有一个APP的安装包 xxx.apk,
然后,通过这个解压工具将.apk解压。如下:
通过notepad++ 打开AndroidManifest.xml 文件,在里面搜索:manifest对应的就是appPackage。
搜索:activity对应的就是appActivity。(activity关键字很多,你要注意辨别。)
|
|