├── .idea
└── workspace.xml
├── README.md
├── Server
├── README.md
├── Server.py
├── ServerManager.py
├── __init__.py
└── log
│ └── README.md
├── apk
└── __init__.py
├── common
├── ApkBase.py
├── BaseTestCase.py
├── DataProvider.py
├── DeviceManager.py
├── DriverManager.py
├── HttpServerHandler.py
├── Log.py
├── MonkeyResultEmail.py
├── MonkeyResultWiki.py
├── PreProManager.py
├── PublicMethod.py
├── RunTestManager.py
├── TestCaseManager.py
├── TheTestResult.py
├── __init__.py
└── share.py
├── config
├── __init__.py
└── config.yaml
├── getverifycode.sh
├── log
└── README.md
├── model
├── Device.py
├── Tester.py
├── User.py
└── __init__.py
├── prepro
├── ASUSZ00APreProcess.py
├── BaseDevicePreProcess.py
├── ChuiZi_YQ607PreProcess.py
├── Coopad8729PreProcess.py
├── Coopad8729blackPreprocess.py
├── Coopad8765PreProcess.py
├── Coopad9729blackPreprocess.py
├── HTCBFPreProcess.py
├── HTCD826wPreProcess.py
├── HTCONEPreProcess.py
├── HUAWEIMT7PreProcess.py
├── HUAWEIVNSAL00PreProcess.py
├── HUIWEIP6PreProcess.py
├── HuaWeiG9PreProcess.py
├── HuaWeiJAZZProPrecess.py
├── LeX620PreProcess.py
├── LianXiang5860PreProcess.py
├── LianXiangK30TPreProcess.py
├── M3notePreProcess.py
├── M57APreProcess.py
├── MEITU5PreProcess.py
├── MEITUM4PreProcess.py
├── MEIZU4PROPreProcess.py
├── MX5PreProcess.py
├── MZM1notePreProcess.py
├── MZM2NotePreProcess.py
├── Nexus6PreProcess.py
├── ONEPlusXPreProcess.py
├── OPPOA33PreProcess.py
├── OPPOA37PreProcess.py
├── OPPOA59PreProcess.py
├── OPPON5207PreProcess.py
├── OPPOR7sPreProcess.py
├── OPPOR8700PreProcess.py
├── OPPOR9PreProcess.py
├── RedMi1sPreProcess.py
├── RedMi2APreProcess.py
├── RedMiNote2PreProcess.py
├── RedMiNote3PreProcess.py
├── RedMiNote4PreProcess.py
├── Smartisan1PreProcess.py
├── Smartisan705PreProcess.py
├── SumSing9152PreProcess.py
├── SumSingNote3PreProcess.py
├── SumSingNote4PreProcess.py
├── SumSingS4PreProcess.py
├── VIVOV3MAXPreProecss.py
├── VIVOX5ProPreProcess.py
├── VivoX7PreProcess.py
├── XIAOMI2PreProcess.py
├── XIAOMI3PreProcess.py
├── XIAOMI4PreProcess.py
├── XIAOMI5PreProcess.py
├── XIAOMINOTEPreProcess.py
└── __init__.py
├── res
├── README.md
└── autotest
│ ├── 0806EF9802963A8512369373AE9E32EC.jpg
│ ├── 098C1191F2E2A94756CD49A75ABE763B.jpg
│ ├── 4CA22076BFAFA339C697CA0D0E1975B2.jpg
│ ├── 5343D94B01E7B43516E8841A87482454.jpg
│ ├── 5A70EE0CE05BDDCC290C8674C70C62C3.jpg
│ ├── 7F0FFD3206D307DFA463D3E69A4690A2.jpg
│ ├── B1758FB83C0834B7A4F490B1D8A34A12.jpg
│ ├── CEDF4620EAA3DC538A1F9F964B40DE4C.jpg
│ └── DCDF783DE47BF56CB43153DF81E90B62.jpg
├── run_mode_autotest.py
├── run_mode_monkey.py
├── run_server_appium.py
├── run_server_http.py
├── stopAll.py
├── testcase
├── __init__.py
├── test_just_try.py
└── test_story_pub_image.py
└── testresult
├── README.md
├── result.css
├── result.js
└── sorttable.js
/.idea/workspace.xml:
--------------------------------------------------------------------------------
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 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | 1505235633552
140 |
141 |
142 | 1505235633552
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | appium_pyton_android
2 | 继承并封装了appium,Android移动端自动化测试框架。
3 | 支持多设备并发运行testcase,直接错误log及截图功能,html输出测试报告等。
4 |
5 | 简单介绍下用法:
6 |
7 | 1、运行前请添加测试包、设备信息到config.yaml中
8 | NiceAPK: /Users/xxxxx/xxx.apk # 测试包的路径
9 |
10 | Devices:
11 | - deviceid: 5HUC9S6599999999 # 设备识别adb devices的值
12 | devicename: OPPO_R9M # 设备的名称,用于区分
13 | serverport: 4723 # -p Appium的主要端口,设备之间不能重复
14 | bootstrapport: 4823 # -bp Appium bootstrap端口,设备之间不能重复
15 | platformname: Android # desired_caps
16 | platformversion: 5.1 # desired_caps
17 | server: 127.0.0.1 # 地址
18 |
19 | 2、测试用例,testcase目录下保留了两条参考用例,其中一条是真实用例测试com.nice.main
20 |
21 | 3、连接好所有的设备后运行run_server_appium,启动appium server
22 |
23 | 4、待appium server启动完毕,运行run_server_http
24 |
25 | 5、选择需要运行的类型:自动化测试或者monkey测试
26 |
27 | *如有任何建议欢迎邮件 h080294@163.com
28 |
29 | 具体的模块介绍:https://www.jianshu.com/p/090c04f3b077
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | # appium_python_android
39 |
--------------------------------------------------------------------------------
/Server/README.md:
--------------------------------------------------------------------------------
1 | 注意:Appium Server端要求单独启动,到时方便做分布式部署
2 | 启动方法:运行run_server.py
3 |
4 | 解决每次都会安装各种APK的问题,
5 |
6 | 文件: /usr/local/lib/node_modules/appium/node_modules/appium-android-driver/lib/driver.js,注释以下几句代码
7 | await this.adb.uninstallApk(this.opts.appPackage);
8 | await helpers.installApkRemotely(this.adb, this.opts);
9 | await helpers.resetApp(this.adb, this.opts.app, this.opts.appPackage, this.opts.fastReset);
10 | await this.checkPackagePresent();
11 |
12 | 文件:/usr/local/lib/node_modules/appium/node_modules/appium-android-driver/build/lib/driver.js 注释以下几句代码
13 | return _regeneratorRuntime.awrap(_androidHelpers2['default'].resetApp(this.adb, this.opts.app, this.opts.appPackage, this.opts.fastReset));
14 | return _regeneratorRuntime.awrap(this.adb.uninstallApk(this.opts.appPackage));
15 | return _regeneratorRuntime.awrap(_androidHelpers2['default'].installApkRemotely(this.adb, this.opts));
16 | return _regeneratorRuntime.awrap(this.checkPackagePresent());
17 |
18 | 文件:/usr/local/lib/node_modules/appium/node_modules/appium-android-driver/lib/android-helpers.js 注释以下几句代码
19 | await adb.install(unicodeIMEPath, false);
20 | await helpers.pushSettingsApp(adb);
21 | await helpers.pushUnlock(adb);
22 |
23 | 文件 /usr/local/lib/node_modules/appium/node_modules/appium-android-driver/build/lib/android-helpers.js 替换以下几句代码
24 | return _regeneratorRuntime.awrap(helpers.initUnicodeKeyboard(adb)) 替换为return context$1$0.abrupt('return', defaultIME);
25 | return _regeneratorRuntime.awrap(helpers.pushSettingsApp(adb)); 替换为return context$1$0.abrupt('return', defaultIME);
26 | return _regeneratorRuntime.awrap(helpers.pushUnlock(adb)); 替换为return context$1$0.abrupt('return', defaultIME);
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/Server/Server.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from common.Log import *
5 | import subprocess
6 | import time
7 | class Server:
8 | def __init__(self, deviceobject):
9 | self.logger = Log.logger
10 | self._deviceobject = deviceobject
11 | self._cmd = "appium -p %s -bp %s -U %s --session-override" % (
12 | self._deviceobject.serverport, self._deviceobject.bootstrapport, self._deviceobject.deviceid)
13 |
14 | def start(self):
15 | self.kill(self._deviceobject.serverport)
16 | time.sleep(3)
17 | info = u"启动设备:%s 对应的Appium Server" % self._deviceobject.devicename
18 | self.logger.info(info)
19 | self.logger.info(self._cmd)
20 | subprocess.call(self._cmd,shell=True)
21 |
22 | def stop(self):
23 | self.kill(self._deviceobject.serverport)
24 |
25 | def kill(self, port):
26 | cmd = "lsof -i:%s|awk 'NR==2{print $2}'" % port
27 | self.logger.info(cmd)
28 | pid = os.popen(cmd).read()
29 | cmd = "kill -9 %s" % pid
30 | os.popen(cmd).read()
31 |
32 | def list_connect_devices(self):
33 | info = u"已连接的设备: %s ------ %s" % (self._deviceobject.deviceid, self._deviceobject.devicename)
34 | self.logger.info(info)
35 |
36 | def list_disconnect_devices(self):
37 | info = u"!!!设备丢失!!!: %s ------ %s" % (self._deviceobject.deviceid, self._deviceobject.devicename)
38 | self.logger.info(info)
39 |
--------------------------------------------------------------------------------
/Server/ServerManager.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from common.Log import *
5 | from Server import *
6 | from common.DeviceManager import *
7 | import threading
8 |
9 | class ServerManager:
10 | def __init__(self):
11 |
12 | self.testdevices = DeviceManager.testdevices
13 | self.disconnectdevices = DeviceManager.disconnectdevices
14 | self.serverobjects = []
15 | self.threads = []
16 | self.logger = Log.logger
17 |
18 | def start_all_server(self):
19 | for deviceid,device in self.testdevices.iteritems():
20 | server = Server(device)
21 | self.serverobjects.append(server)
22 | thread1 = threading.Thread(target=server.start)
23 | thread1.start()
24 |
25 | def stop_all_server(self):
26 | for server in self.serverobjects:
27 | server.stop()
28 |
29 | def list_devices(self):
30 | info = u"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~已连接的设备~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
31 | self.logger.info(info)
32 | for deviceid,device in self.testdevices.iteritems():
33 | server = Server(device)
34 | server.list_connect_devices()
35 | info = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
36 | self.logger.info(info)
37 |
38 | def list_disconnect_devices(self):
39 | info = u"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~丢失的设备~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
40 | self.logger.info(info)
41 | for deviceid, device in self.disconnectdevices.iteritems():
42 | server = Server(device)
43 | server.list_disconnect_devices()
44 | info = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
45 | self.logger.info(info)
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Server/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/Server/__init__.py
--------------------------------------------------------------------------------
/Server/log/README.md:
--------------------------------------------------------------------------------
1 | Server 端日志
--------------------------------------------------------------------------------
/apk/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/apk/__init__.py
--------------------------------------------------------------------------------
/common/ApkBase.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | import os
4 | import subprocess
5 | from math import floor
6 | from common.DataProvider import DataProvider
7 |
8 |
9 | class ApkInfo():
10 |
11 | def __init__(self):
12 | apkpath = DataProvider.niceapk
13 | self.apkpath = apkpath
14 |
15 | def get_apk_size(self):
16 | """
17 | 获取包的大小
18 | """
19 | size = floor(os.path.getsize(self.apkpath) / (1024 * 1000))
20 | return str(size) + "M"
21 |
22 | def get_apk_version(self):
23 | """
24 | 获取版本
25 | """
26 | cmd = "aapt dump badging " + self.apkpath + " | grep versionName"
27 | result = ""
28 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
29 | stderr=subprocess.PIPE,
30 | stdin=subprocess.PIPE, shell=True)
31 | (output, err) = p.communicate()
32 | if output != "":
33 | result = output.split()[3].decode()[12:]
34 | return result
35 |
36 | def get_apk_name(self):
37 | """
38 | 获取应用名
39 | """
40 | cmd = "aapt dump badging " + self.apkpath + " | grep application-label: "
41 | result = ""
42 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
43 | stderr=subprocess.PIPE,
44 | stdin=subprocess.PIPE, shell=True)
45 | (output, err) = p.communicate()
46 | if output != "":
47 | result = output.split()[0].decode()[18:]
48 | return result
49 |
50 | def get_apk_pkg(self):
51 | """
52 | 获取包名
53 | """
54 | cmd = "aapt dump badging " + self.apkpath + " | grep package:"
55 | result = ""
56 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
57 | stderr=subprocess.PIPE,
58 | stdin=subprocess.PIPE, shell=True)
59 | (output, err) = p.communicate()
60 | if output != "":
61 | result = output.split()[1].decode()[6:-1]
62 | return result
63 |
64 | def get_apk_version_code(self):
65 | """
66 | 获取version code
67 | """
68 | cmd = "aapt dump badging " + self.apkpath + " | grep package | awk '{print $3}'"
69 | result = ""
70 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
71 | stderr=subprocess.PIPE,
72 | stdin=subprocess.PIPE, shell=True)
73 | (output, err) = p.communicate()
74 | if output != "":
75 | result = output.strip('\r\n')
76 | return result
77 |
78 | def get_apk_version_name(self):
79 | """
80 | 获取version name
81 | """
82 | cmd = "aapt dump badging " + self.apkpath + " | grep package | awk '{print $4}'"
83 | result = ""
84 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
85 | stderr=subprocess.PIPE,
86 | stdin=subprocess.PIPE, shell=True)
87 | (output, err) = p.communicate()
88 | if output != "":
89 | result = output.strip('\r\n')
90 | return result
91 |
92 |
--------------------------------------------------------------------------------
/common/BaseTestCase.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | import unittest
5 | import time
6 | import os
7 | import traceback
8 | from Log import *
9 |
10 |
11 | class BaseTestCase(unittest.TestCase):
12 | def __init__(self, methodName='runTest', tester=None):
13 | super(BaseTestCase, self).__init__(methodName)
14 | self.tester = tester
15 |
16 | @staticmethod
17 | def parametrize(testcase_klass, tester=None):
18 | testloader = unittest.TestLoader()
19 | testnames = testloader.getTestCaseNames(testcase_klass)
20 | suite = unittest.TestSuite()
21 | for name in testnames:
22 | suite.addTest(testcase_klass(name, tester=tester))
23 | return suite
24 |
--------------------------------------------------------------------------------
/common/DataProvider.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | import sys
4 | import os
5 | from aetypes import template
6 |
7 | import yaml
8 | from common.Log import *
9 | from model.Device import *
10 | from model.User import *
11 |
12 |
13 | class DataProvider(object):
14 | users = []
15 | devices = {}
16 | config = None
17 | niceapk = ""
18 | unlockapk = os.getcwd() + "apk/unlock_apk-debug.apk"
19 | settingapk = os.getcwd() + "apk/settings_apk-debug.apk"
20 | imeapk = os.getcwd() + "apk/UnicodeIME-debug.apk"
21 | testers = {}
22 | starttime = {}
23 | stoptime = {}
24 | devicenamelist = []
25 |
26 | @classmethod
27 | def init_data(cls):
28 | cls.init_config_yaml()
29 | cls.load_devices()
30 | cls.load_users()
31 | cls.load_others_config()
32 | cls.show_devicename_list()
33 |
34 | @classmethod
35 | def init_config_yaml(cls):
36 | filepath = os.path.abspath(os.path.join(os.path.dirname(__file__),"..")) + '/config/config.yaml'
37 | with open(filepath, 'r') as stream:
38 | try:
39 | cls.config = yaml.load(stream)
40 | except yaml.YAMLError as exc:
41 | print 'yaml读取有误'
42 | print exc
43 | finally:
44 | stream.close()
45 |
46 | @classmethod
47 | def load_devices(cls):
48 | cls.devicenamelist = []
49 | for device in cls.config['Devices']:
50 | deviceobject = Device(device['deviceid'])
51 | deviceobject.devicename = device['devicename']
52 | deviceobject.serverport = device['serverport']
53 | deviceobject.bootstrapport = device['bootstrapport']
54 | deviceobject.platformname = device['platformname']
55 | deviceobject.platformversion = device['platformversion']
56 | deviceobject.server = device['server']
57 | cls.devices[deviceobject.deviceid] = deviceobject
58 | cls.devicenamelist.append(device['devicename'])
59 | Log.logger.info(u"配置列表中一共有 %s 台设备" % len(cls.devices))
60 |
61 | @classmethod
62 | def load_users(cls):
63 | for user in cls.config['Users']:
64 | userobject = User(user['uid'])
65 | userobject.username = user['username']
66 | userobject.mobile = user['mobile']
67 | userobject.password = user['password']
68 | cls.users.append(userobject)
69 | Log.logger.info(u"配置列表中一共有 %s 个用户信息" % len(cls.users))
70 |
71 | @classmethod
72 | def load_others_config(cls):
73 | if cls.config['NiceAPK']:
74 | cls.niceapk = cls.config['NiceAPK']
75 | @classmethod
76 | def show_devicename_list(cls):
77 | for i in range(len(cls.devicenamelist)):
78 | if i % 10 == 0:
79 | print cls.devicenamelist[i] + ','
80 | i += 1
81 | else:
82 | print cls.devicenamelist[i] + ',',
83 | i += 1
84 |
85 | if __name__ == "__main__":
86 | DataProvider.init_data()
87 |
--------------------------------------------------------------------------------
/common/DeviceManager.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | import os
4 | import re
5 | from DataProvider import *
6 | from Log import *
7 | import requests
8 |
9 |
10 | class DeviceManager(object):
11 |
12 | # 连接的设备ID
13 | connectdeviceid = []
14 |
15 | # 待测的设备对象
16 | testdevices = {}
17 |
18 | # 已建立服务的设备
19 | serverdevices = {}
20 |
21 | # 设备库中未连接的设备
22 | disconnectdevices = {}
23 |
24 | # 连接设备imei
25 | connectimei = []
26 |
27 | logger = None
28 |
29 | @classmethod
30 | def get_connect_deviceid(cls):
31 | p = os.popen('adb devices')
32 | outstr = p.read()
33 | cls.connectdeviceid = re.findall(r'(\w+)\s+device\s',outstr)
34 | if 0 == len(cls.connectdeviceid):
35 | Log.logger.warn(u'没有adb连接的设备')
36 | else:
37 | return cls.connectdeviceid
38 |
39 | # Server用来获得已链接自己的服务器
40 | @classmethod
41 | def get_test_device(cls):
42 | for deviceid in cls.connectdeviceid:
43 | if DataProvider.devices.has_key(deviceid):
44 | cls.testdevices[deviceid] = DataProvider.devices[deviceid]
45 | else:
46 | Log.logger.warn(u'设备: %s 不在配置列表中' % deviceid)
47 |
48 | if len(cls.testdevices) == 0:
49 | Log.logger.warn(u'没有待测试的设备')
50 |
51 |
52 | # 客户端用来获取server上已经建立好服务的设备
53 | @classmethod
54 | def get_server_test_device(cls):
55 | for deviceid,device in DataProvider.devices.iteritems():
56 | url = "http://%s:%s/wd/hub" % (device.server,device.serverport)
57 | response = None
58 | try:
59 | response = requests.request("get", url)
60 | except requests.RequestException,e:
61 | pass
62 | if response != None:
63 | cls.serverdevices[deviceid] = device
64 | else:
65 | cls.disconnectdevices[deviceid] = device
66 |
67 | @classmethod
68 | def get_connect_device_imei(cls):
69 | for device in cls.connectdeviceid:
70 | cmd = "adb -s %s shell service call iphonesubinfo 1 | awk -F \"'\" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=" % device
71 | p = os.popen(cmd)
72 | outstr = p.read()
73 | print device,
74 | print outstr
75 |
76 | @classmethod
77 | def get_device_info(cls, deviceId):
78 | mode = "ro.product.model"
79 | release = "ro.build.version.release"
80 | getmode = "adb -s %s shell cat /system/build.prop |grep %s" % (deviceId, mode)
81 | getrelease = "adb -s %s shell cat /system/build.prop |grep %s" % (deviceId, release)
82 | p1 = os.popen(getmode)
83 | p2 = os.popen(getrelease)
84 | modename = p1.read()
85 | releasename = p2.read()
86 | print deviceId
87 | print modename, releasename
88 |
89 |
90 | if __name__ == "__main__":
91 | DeviceManager.get_connect_deviceid()
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/common/DriverManager.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | class DriverManager(object):
5 |
6 | drivers = {}
7 |
8 | #退出所有的Driver
9 | @classmethod
10 | def quit_all_driver(cls):
11 | print cls.drivers
12 | for deviceid,driver in cls.drivers.iteritems():
13 | if driver != None:
14 | print driver
15 | driver.quit()
16 |
17 | #根据deviceid退出相应的Driver
18 | @classmethod
19 | def quit_driver(cls,deviceid):
20 | if cls.drivers.has_key(deviceid):
21 | if cls.drivers[deviceid] != None:
22 | cls.drivers[deviceid].quit()
23 |
--------------------------------------------------------------------------------
/common/HttpServerHandler.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python
2 | #-*- coding:utf-8 -*-
3 |
4 | import SimpleHTTPServer
5 | from Log import Log
6 | import urlparse
7 | import threading
8 | import json
9 | import re
10 | import share
11 | from RunTestManager import *
12 |
13 |
14 | class HttpServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
15 |
16 | run_manager = None
17 |
18 | def end_headers(self):
19 | self.send_my_headers()
20 | SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)
21 |
22 | def send_my_headers(self):
23 | self.send_header("Cache-Control", "no-cache, no-store, must-revalidate")
24 | self.send_header("Pragma", "no-cache")
25 | self.send_header("Expires", "0")
26 |
27 | def do_POST(self):
28 | self.logger = Log.logger
29 | self.logger.warning("--------- POST ---------")
30 |
31 | def do_GET(self):
32 | self.logger = Log.logger
33 | self.logger.warning("--------- GET ---------")
34 | self.logger.warning(self.path)
35 | parsedParams = urlparse.urlparse(self.path)
36 | queryParsed = urlparse.parse_qs(parsedParams.query)
37 |
38 | if parsedParams.path == '/run':
39 | self.run(queryParsed)
40 | else:
41 | result_dict = {'code':1001,"data":{"message":"错误的命令"}}
42 | self.set_response(result_dict)
43 |
44 | def run(self, params):
45 | if share.get_if_run() == True:
46 | result_dict = {'code':1002,"data":{"message":"已经有一个任务在执行","taskid":"%s" % share.get_taskid()}}
47 | self.set_response(result_dict)
48 | return
49 | if params.has_key('mode') == False:
50 | result_dict = {'code':1003,"data":{"message":"缺少mode参数"}}
51 | self.set_response(result_dict)
52 | return
53 | elif params['mode'][0] != "monkey" and params['mode'][0] != 'autotest':
54 | self.set_response({'code':1004, "data":{"message":"mode参数错误"}})
55 | return
56 |
57 | try:
58 | set_run_manager(RunTestManager(params['mode'][0]))
59 | self.taskid = get_run_manager().task_id
60 | share.set_taskid(get_run_manager().task_id) #设置全局共享taskid
61 | share.set_if_run(True)
62 | thread = threading.Thread(target=get_run_manager().start_run)
63 | thread.start()
64 | result_dict = {'code':0,"data":{"taskid fuck":"%s" % self.taskid,"message":"开始执行%s任务" % params['mode']}}
65 | self.set_response(result_dict)
66 | except Exception, e:
67 | traceback.print_exc()
68 | get_run_manager().stop_run()
69 |
70 | def set_response(self, text, code=200):
71 | try:
72 | result = json.dumps(text, ensure_ascii=False)
73 | except Exception, e:
74 | traceback.print_exc()
75 | result = text
76 | self.send_response(code)
77 | self.send_header('Content-Type', 'application/json')
78 | self.end_headers()
79 | self.wfile.write(result)
80 |
81 |
82 | def get_run_manager():
83 | return HttpServerHandler.run_manager
84 |
85 |
86 | def set_run_manager(value):
87 | HttpServerHandler.run_manager = value
--------------------------------------------------------------------------------
/common/Log.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | #-*- coding:utf-8 -*-
3 |
4 | import logging
5 | import datetime
6 | import os
7 | import sys
8 | from logging.handlers import RotatingFileHandler
9 | from PublicMethod import *
10 |
11 |
12 | class Log(object):
13 |
14 | logger = None
15 |
16 | @classmethod
17 | def create_log_file(cls):
18 | logfile = '%s/%s.log' % (os.path.abspath('./log'),get_format_currenttime())
19 |
20 | cls.logger = logging.getLogger(__name__)
21 | cls.logger.setLevel(logging.DEBUG)
22 |
23 | # 文件handler
24 | filehandle = RotatingFileHandler(logfile, maxBytes=50*1024*1024, backupCount=5, encoding="UTF-8")
25 | formatter = logging.Formatter('%(asctime)s : %(message)s')
26 | filehandle.setFormatter(formatter)
27 | cls.logger.addHandler(filehandle)
28 |
29 | # 屏幕handler
30 | console = logging.StreamHandler()
31 | formatter = logging.Formatter('%(asctime)s : %(message)s')
32 | console.setFormatter(formatter)
33 | cls.logger.addHandler(console)
34 |
35 | if __name__=='__main__':
36 | Log.create_log_file()
37 | Log.logger.debug('this is a debug msg')
38 | Log.logger.info('this is a info msg')
39 |
--------------------------------------------------------------------------------
/common/MonkeyResultEmail.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | #coding: utf-8
3 |
4 | from email.mime.multipart import MIMEMultipart
5 | from email.mime.text import MIMEText
6 | from email.mime.image import MIMEImage
7 | from model.Tester import *
8 | from email.header import Header
9 | from email import encoders
10 | from email.header import Header
11 | from email.utils import parseaddr, formataddr
12 | import smtplib
13 |
14 |
15 | def _format_addr(s):
16 | name, addr = parseaddr(s)
17 | return formataddr(( \
18 | Header(name, 'utf-8').encode(), \
19 | addr.encode('utf-8') if isinstance(addr, unicode) else addr))
20 |
21 |
22 | def run():
23 | sender = 'xxx@163.com' #发送方
24 | receiver = ['xxx@163.com'] #接收方
25 |
26 | # 发送的邮箱服务地址
27 | smtp = smtplib.SMTP_SSL("smtp.exmail.qq.com", port=465)
28 | username = 'xxx@163.com'
29 | password = 'xxxxxx'
30 |
31 | #邮件对象
32 | msgRoot = MIMEMultipart('related')
33 | msgRoot['From'] = _format_addr(u'autotest<%s>' % sender)
34 | for x in receiver:
35 | msgRoot['to'] = _format_addr(u'<%s>' % x)
36 | msgRoot['Subject'] = '[Monkey]%s' % get_format_currenttime()
37 |
38 | #构造附件,即邮件正文
39 | for listdir in Tester.lis:
40 | att = MIMEText(open('%s' % listdir, 'rb').read(), 'base64', 'utf-8')
41 | att["Content-Type"] = 'application/octet-stream'
42 | att["Content-Disposition"] = 'attachment; filename="%s"' % listdir
43 | msgRoot.attach(att)
44 |
45 | smtp.connect('smtp.exmail.qq.com')
46 | smtp.login(username, password)
47 | smtp.sendmail(sender, receiver, msgRoot.as_string())
48 | smtp.quit()
49 |
50 | if __name__ == '__main__':
51 | run()
--------------------------------------------------------------------------------
/common/MonkeyResultWiki.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # coding: utf-8
3 |
4 | import re
5 | from bs4 import BeautifulSoup
6 | import urllib
7 | import urllib2
8 | import cookielib
9 | from model.Tester import *
10 | from common.PublicMethod import *
11 |
12 |
13 | def login_and_post(loginPage, requestUrl, user, password):
14 | try:
15 | # 设置cookie
16 | cj = cookielib.CookieJar()
17 | opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
18 | opener.addheaders = [('User-agent',
19 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36')]
20 | urllib2.install_opener(opener)
21 |
22 | # 登录
23 | login_data = {
24 | "os_username": user,
25 | "os_password": password,
26 | "os_cookie": "true",
27 | "login": "登录",
28 | "os_destination": ""}
29 | login_data = urllib.urlencode(login_data)
30 | req = urllib2.Request(loginPage, login_data)
31 | conn = urllib2.urlopen(req)
32 |
33 |
34 | # 登录成功后打开指定页面
35 | point_url = urllib2.urlopen(requestUrl).read()
36 | # print point_url
37 |
38 | soup = BeautifulSoup(
39 | point_url, # 文档字符串
40 | 'html.parser', # 解析器
41 | from_encoding='utf-8' # 文档编码
42 | )
43 | token = soup.find_all('meta', id ='atlassian-token')
44 | token_content=token[0].attrs['content']
45 | print token_content #获取token值
46 |
47 | draftId = soup.find_all('input', id='draftId')
48 | draftId_result=draftId[0].attrs['value']
49 | print draftId_result #获取draftId
50 |
51 | entityId = soup.find_all('input', id='entityId')
52 | entityId_result=entityId[0].attrs['value']
53 | print entityId_result #获取entityId
54 |
55 | # 读取monkey结果Summary.txt文件中的内容
56 | for listdir in Tester.lis:
57 | if 'Summary' in listdir:
58 | file = open(listdir, 'rb')
59 | filedata = file.read()
60 | file.close()
61 |
62 | # 向Android Monkey AutoTest Tracking页面提交form表单数据
63 | pagedata={
64 | "atl_token": "%s" % token_content,
65 | "fromPageId": "8770164",
66 | "spaceKey": "ANDROID",
67 | "labelsString":"",
68 | "titleWritten":"false",
69 | "linkCreation":"false",
70 | "title":"%s" % get_format_currenttime(),
71 | "wysiwygContent":"%s" % filedata,
72 | "confirm":"Save",
73 | "parentPageString":"Android Monkey AutoTest Tracking",
74 | "moveHierarchy": "true",
75 | "position":"",
76 | "targetId":"",
77 | "draftId":"%s" % draftId_result,
78 | "entityId":"%s" % entityId_result,
79 | "newSpaceKey":"ANDROID"
80 | }
81 |
82 | postdata = urllib.urlencode(pagedata)
83 | Url='http://wiki.niceprivate.com/pages/docreatepage.action'
84 | req2 = urllib2.Request(url=Url, data=postdata)
85 | # 查看表单提交后返回内容
86 | response = urllib2.urlopen(req2)
87 |
88 | except Exception, e:
89 | print str(e)
90 |
91 |
92 | if __name__ == '__main__':
93 | loginUrl = 'xxxxxxx'
94 | user = 'xxxxxx'
95 | password = 'xxxxxx'
96 | requestUrl = 'xxxxxxx'
97 |
98 | # 登录测试
99 | login_and_post(loginUrl, requestUrl, user, password)
100 |
101 |
102 |
--------------------------------------------------------------------------------
/common/PreProManager.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | from prepro.ASUSZ00APreProcess import *
4 | from prepro.HTCD826wPreProcess import *
5 | from prepro.HUAWEIMT7PreProcess import *
6 | from prepro.HUAWEIVNSAL00PreProcess import *
7 | from prepro.OPPOA33PreProcess import *
8 | from prepro.OPPON5207PreProcess import *
9 | from prepro.OPPOR8700PreProcess import *
10 | from prepro.OPPOR9PreProcess import *
11 | from prepro.OPPOA37PreProcess import *
12 | from prepro.MZM2NotePreProcess import *
13 | from prepro.RedMiNote2PreProcess import *
14 | from prepro.LeX620PreProcess import *
15 | from prepro.MEITU5PreProcess import *
16 | from prepro.OPPOA59PreProcess import *
17 | from prepro.RedMiNote3PreProcess import *
18 | from prepro.RedMiNote4PreProcess import *
19 | from prepro.SumSingS4PreProcess import *
20 | from prepro.XIAOMINOTEPreProcess import *
21 | from prepro.LianXiangK30TPreProcess import *
22 | from prepro.SumSingNote3PreProcess import *
23 | from prepro.XIAOMI5PreProcess import *
24 | from prepro.M57APreProcess import *
25 | from prepro.XIAOMI2PreProcess import *
26 | from prepro.XIAOMI3PreProcess import *
27 | from prepro.HUIWEIP6PreProcess import *
28 | from prepro.MEIZU4PROPreProcess import *
29 | from prepro.M3notePreProcess import *
30 | from prepro.HTCBFPreProcess import *
31 | from prepro.HTCONEPreProcess import *
32 | from prepro.Nexus6PreProcess import *
33 | from prepro.MEITUM4PreProcess import *
34 | from prepro.VIVOX5ProPreProcess import *
35 | from prepro.OPPOR7sPreProcess import *
36 | from prepro.VIVOV3MAXPreProecss import *
37 | from prepro.MZM1notePreProcess import *
38 | from prepro.ONEPlusXPreProcess import *
39 | from prepro.SumSing9152PreProcess import *
40 | from prepro.VivoX7PreProcess import *
41 | from prepro.HuaWeiG9PreProcess import *
42 | from prepro.XIAOMI4PreProcess import *
43 | from prepro.RedMi1sPreProcess import *
44 | from prepro.SumSingNote4PreProcess import *
45 | from prepro.Smartisan705PreProcess import *
46 | from prepro.Smartisan1PreProcess import *
47 | from prepro.Coopad8765PreProcess import *
48 | from prepro.Coopad8729blackPreprocess import *
49 | from prepro.Coopad8729PreProcess import *
50 | from prepro.MX5PreProcess import *
51 | from prepro.HuaWeiJAZZProPrecess import *
52 | from prepro.LianXiang5860PreProcess import *
53 | from prepro.RedMi2APreProcess import *
54 | from prepro.ChuiZi_YQ607PreProcess import *
55 |
56 | class PreProManager(object):
57 |
58 | def __init__(self, tester):
59 | self.tester = tester
60 | self.deviceid = self.tester.device.deviceid
61 |
62 | def device(self):
63 | if self.deviceid == "5HUC9S6599999999":
64 | return OPPOR9PreProcess(self.tester)
65 | elif self.deviceid =="7c404969":
66 | return OPPOA33PreProcess(self.tester)
67 | elif self.deviceid == "G6Q4U4EA99999999":
68 | return OPPOA37PreProcess(self.tester)
69 | elif self.deviceid == "810EBL22MGP3":
70 | return MZM2NotePreProcess(self.tester)
71 | elif self.deviceid == "LJYTZ5D699999999":
72 | return RedMiNote2PreProcess(self.tester)
73 | elif self.deviceid == "LE66A06250102401":
74 | return LeX620PreProcess(self.tester)
75 | elif self.deviceid == "MIAGLMC6A2100083":
76 | return MEITU5PreProcess(self.tester)
77 | elif self.deviceid == "RCKVVCSO99999999":
78 | return OPPOA59PreProcess(self.tester)
79 | elif self.deviceid == "4TEI7DK799999999":
80 | return RedMiNote3PreProcess(self.tester)
81 | elif self.deviceid == "4d00f31dba19a02d":
82 | return SumSingS4PreProcess(self.tester)
83 | elif self.deviceid == "a42516eb":
84 | return XIAOMINOTEPreProcess(self.tester)
85 | elif self.deviceid == "bef9e460":
86 | return LianXiangK30TPreProcess(self.tester)
87 | elif self.deviceid == 'ee72d34d':
88 | return SumSingNote3PreProcess(self.tester)
89 | elif self.deviceid == 'b33aa57c':
90 | return XIAOMI5PreProcess(self.tester)
91 | elif self.deviceid == 'A10ABNN76XMP':
92 | return M57APreProcess(self.tester)
93 | elif self.deviceid == '4c4bb164':
94 | return XIAOMI2PreProcess(self.tester)
95 | elif self.deviceid == '0021119e':
96 | return XIAOMI3PreProcess(self.tester)
97 | elif self.deviceid == '022BTF7N43046595':
98 | return HUAWEIP6PreProcess(self.tester)
99 | elif self.deviceid == '76UBBKR224R8':
100 | return MEIZU4PROPreProcess(self.tester)
101 | elif self.deviceid == '91QEBPL694VC':
102 | return M3notePreProcess(self.tester)
103 | elif self.deviceid == 'HT53WWZ02029':
104 | return HTCBFPreProcess(self.tester)
105 | elif self.deviceid == 'HT53DYJ00008':
106 | return HTCONEPreProcess(self.tester)
107 | elif self.deviceid == 'K21GAMN5A1901310':
108 | return MEITUM4PreProcess(self.tester)
109 | elif self.deviceid == 'ZX1G22HQSB':
110 | return Nexus6PreProcess(self.tester)
111 | elif self.deviceid == 'VCOZHE6L99999999':
112 | return VIVOX5ProPreProcess(self.tester)
113 | elif self.deviceid == 'HEPBPF4D49S4FUGY':
114 | return OPPOR7sPreProcess(self.tester)
115 | elif self.deviceid == '174034d3':
116 | return VIVOV3MAXPreProcess(self.tester)
117 | elif self.deviceid == '91QEBP63ULCD':
118 | return M3notePreProcess(self.tester)
119 | elif self.deviceid == '179323c4':
120 | return Coopad8729PreProcess(self.tester)
121 | elif self.deviceid == '71MBBL622EG3':
122 | return MZM1notePreProcess(self.tester)
123 | elif self.deviceid == '27ba3598':
124 | return ONEPlusXPreProcess(self.tester)
125 | elif self.deviceid == '410ac5dd9036c000':
126 | return SumSing9152PreProcess(self.tester)
127 | elif self.deviceid == '8d994efc':
128 | return VivoX7ProPreProcess(self.tester)
129 | elif self.deviceid == '3DN4C16411014042':
130 | return HuaWeiG9PreProcess(self.tester)
131 | elif self.deviceid == 'CC53DYG03271':
132 | return HTCD826wPreProcess(self.tester)
133 | elif self.deviceid == 'b3e5b28e':
134 | return XIAOMI4PreProcess(self.tester)
135 | elif self.deviceid == 'e80c9403':
136 | return RedMi1sPreProcess(self.tester)
137 | elif self.deviceid == '8526c60c':
138 | return SumSingNote4PreProcess(self.tester)
139 | elif self.deviceid == 'P4M0215418001139':
140 | return HUAWEIMT7PreProcess(self.tester)
141 | elif self.deviceid == 'd9b28b5c':
142 | return Smartisan705Process(self.tester)
143 | elif self.deviceid == 'F8AZFG01U429':
144 | return ASUSZ00APreProcessPreProcess(self.tester)
145 | elif self.deviceid == 'ZLWOUCWKLNT4AMKN':
146 | return RedMiNote4PreProcess(self.tester)
147 | elif self.deviceid == '8c9847a5':
148 | return Smartosan1PreProcess(self.tester)
149 | elif self.deviceid == '54da7023':
150 | return OPPON5207PreProcess(self.tester)
151 | elif self.deviceid == '9418d864':
152 | return OPPOR8700PreProcess(self.tester)
153 | elif self.deviceid == '2a2ac28':
154 | return Coopad8765PreProcess(self.tester)
155 | elif self.deviceid == 'b8939c4':
156 | return Coopad8729blackPreprocess(self.tester)
157 | elif self.deviceid == '179323c4':
158 | return Coopad8729PreProcess(self.tester)
159 | elif self.deviceid == '85UABM7HEBC2':
160 | return MX5PreProcess(self.tester)
161 | elif self.deviceid == 'd0a9661f':
162 | return Smartosan1PreProcess(self.tester)
163 | elif self.deviceid == 'V6V7N14C01000156':
164 | return HuaWeiJAZZProPrecess(self.tester)
165 | elif self.deviceid == 'HGC9GXBJ':
166 | return LianXiang5860PreProcess(self.tester)
167 | elif self.deviceid == '6O5528A28423':
168 | return RedMi2APreProcess(self.tester)
169 | elif self.deviceid == 'e249ecb3':
170 | return ChuiZi_YQ607PreProcess(self.tester)
--------------------------------------------------------------------------------
/common/PublicMethod.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | import datetime
5 | import os
6 | import re
7 |
8 |
9 | def get_format_currenttime():
10 | currenttime = datetime.datetime.now().strftime("%Y_%m_%d_%H:%M:%S")
11 | return currenttime
12 |
13 |
14 | def get_fullfile_from_path(path, ext=None):
15 | allfiles = []
16 | needExtFilter = (ext != None)
17 | for root, dirs, files in os.walk(path):
18 | for filespath in files:
19 | filepath = os.path.join(root, filespath)
20 | extension = os.path.splitext(filepath)[1][1:]
21 | if needExtFilter and extension in ext:
22 | allfiles.append(filepath)
23 | elif not needExtFilter:
24 | allfiles.append(filepath)
25 | return allfiles
26 |
27 |
28 | def get_file_name_from_path(path, ext=None):
29 | allfilenames = []
30 | needExtFilter = (ext != None)
31 | for root, dirs, files in os.walk(path):
32 | for filespath in files:
33 | filename, suffix = os.path.splitext(filespath)
34 | extension = os.path.splitext(filespath)[1][1:]
35 | if needExtFilter and extension in ext:
36 | allfilenames.append(filename)
37 | elif not needExtFilter:
38 | allfilenames.append(filename)
39 | return allfilenames
40 |
41 |
42 | def clean_brackets_from_str(string):
43 | final_string = re.sub(r'[\((][\s\S]*[\))]', "", string)
44 | return final_string
45 |
46 |
47 | def read_file(filename, mode):
48 | f = open(filename, mode) # filename,文件路径、名称,如果有\,注意转义或者开头加r,mode读取的模式,r读取,w写入,,
49 | read = f.read() # 获取内容并储存在变量里
50 | print read
51 | f.close() # 关闭文件,节省内存
52 |
53 |
--------------------------------------------------------------------------------
/common/RunTestManager.py:
--------------------------------------------------------------------------------
1 | #usr/bin/python
2 | #-*- coding:utf-8 -*-
3 |
4 | from appium import webdriver
5 | import MonkeyResultEmail
6 | import share
7 | from common.DeviceManager import *
8 | from common.PreProManager import *
9 | from common.TestCaseManager import *
10 | from common.TheTestResult import *
11 | import MonkeyResultWiki
12 | import traceback
13 |
14 |
15 | class RunTestManager(object):
16 |
17 | def __init__(self, mode):
18 | self.count_testcases = 0
19 | self.task_id = int(time.time())
20 | self.logger = Log.logger
21 | self.mode = mode
22 |
23 | def start_run(self):
24 | try:
25 | self.logger.debug('Start run %s...' % self.mode)
26 | if self.mode == "autotest":
27 | TheTestResult.create_result_folder()
28 |
29 | if self.mode == "monkey":
30 | Tester.is_exit_monkeyresultfile()
31 | Tester.create_monkey_result()
32 |
33 | Log.logger.info(u"开始执行任务...")
34 | self.start_run_test()
35 |
36 | if self.mode == "autotest":
37 | Log.logger.debug(u'开始生成测试报告...')
38 | TheTestResult.generate_html_testresult()
39 |
40 | if self.mode == "monkey":
41 | #读取本次monkey结果文件夹下的所有log
42 | Tester.open_filelist()
43 | Tester.read_log()
44 | time.sleep(10)
45 | MonkeyResultWiki.login_and_post("参数")
46 | MonkeyResultEmail.run()
47 |
48 | Log.logger.info(u"完成测试并退出所有Driver")
49 | # DriverManager.quit_all_driver()
50 | self.stop_run()
51 | except Exception, e:
52 | traceback.print_exc()
53 | self.stop_run()
54 |
55 | def stop_run(self):
56 | share.set_if_run(False)
57 |
58 | def run(self, tester):
59 | try:
60 | DataProvider.starttime[tester.device.deviceid] = get_format_currenttime()
61 | tester.show_relationship()
62 | # 开始设备预处理流程
63 | if PreProManager(tester).device().pre_process():
64 | if self.mode == "monkey":
65 | Log.logger.info(u"设备:%s ---开始执行monkey---" % tester.device.devicename)
66 | suite = TestCaseManager(tester).monkey_android()
67 | Log.logger.info(u"设备:%s ---monkey执行结束---" % tester.device.devicename)
68 |
69 | elif self.mode == "autotest":
70 | tester.clean_mp4_file() #清理sd卡DCIM文件夹中的mp4文件
71 | Log.logger.info(u"设备:%s ---开始执行autotest---" % tester.device.devicename)
72 | tester.pic_data_prepare() #判断手机是否有autotest图库
73 | tester.video_data_prepare() # 判断手机是否有auto_video视频
74 | Log.logger.info(u"设备:%s 开始Load测试用例..." % tester.device.devicename)
75 | suite = TestCaseManager(tester).compatibility_testsuite()
76 | #suite = TestCaseManager(tester).signal_case_suit(test_show_pub_video)
77 | Log.logger.info(u"设备:%s 测试用例Load完成" % tester.device.devicename)
78 | Log.logger.info(u"设备:%s 开始执行测试用例..." % tester.device.devicename)
79 | unittest.TextTestRunner(verbosity=2, resultclass=TheTestResult).run(suite)
80 | Log.logger.info(u"设备:%s 测试用例执行完成" % tester.device.devicename)
81 | else:
82 | Log.logger.info(u"设备:%s 预处理流程失败,终止相应任务" % tester.device.devicename)
83 |
84 | DataProvider.stoptime[tester.device.deviceid] = get_format_currenttime()
85 |
86 | except Exception,e:
87 | Log.logger.info(u"设备:%s 出现异常" % tester.device.devicename)
88 | traceback.print_exc()
89 |
90 | def init_tester_data(self, device, which_user):
91 | try:
92 | desired_caps = {}
93 | desired_caps['platformName'] = device.platformname
94 | desired_caps['platformVersion'] = device.platformversion
95 | desired_caps['deviceName'] = device.devicename
96 | desired_caps['unicodeKeyboard'] = "true"
97 | desired_caps['resetKeyboard'] = 'true'
98 | desired_caps['autoLaunch'] = "false"
99 | desired_caps['appPackage'] = 'com.nice.main'
100 | desired_caps['appActivity'] = 'com.nice.main.activities.MainActivity_'
101 | desired_caps['udid'] = device.deviceid
102 | desired_caps['newCommandTimeout'] = "3000"
103 | desired_caps['unicodeKeyboard'] = True
104 | desired_caps['resetKeyboard'] = True
105 | url = "http://%s:%s/wd/hub" % (device.server, device.serverport)
106 | driver = webdriver.Remote(url, desired_caps)
107 |
108 | if self.mode=="autotest":
109 | # 创建每个设备的截图文件夹
110 | folderpath = '%s/%s' % (TheTestResult.testresultpath, device.devicename)
111 | os.mkdir(folderpath)
112 |
113 | testerobject = Tester(driver)
114 | testerobject.device = device
115 | testerobject.user = DataProvider.users[which_user]
116 | testerobject.logger = Log.logger
117 | if self.mode=="autotest":
118 | testerobject.screenshot_path = folderpath
119 |
120 | DriverManager.drivers[device.deviceid] = driver
121 | return testerobject
122 | except Exception,e:
123 | Log.logger.info(u"设备:%s 出现异常" % device.devicename)
124 | traceback.print_exc()
125 |
126 | def start_run_test(self):
127 | which_user = 0
128 | threads = []
129 | for deviceid, device in DeviceManager.serverdevices.iteritems():
130 | testerobject = self.init_tester_data(device, which_user)
131 | DataProvider.testers[device.deviceid] = testerobject
132 | try:
133 | thread = threading.Thread(target=self.run, args=(testerobject,))
134 | thread.start()
135 | which_user = which_user + 1
136 | threads.append(thread)
137 | except Exception, e:
138 | traceback.print_exc()
139 | DataProvider.testers[deviceid].driver.quit()
140 |
141 | for thread in threads:
142 | thread.join()
--------------------------------------------------------------------------------
/common/TestCaseManager.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | from BaseTestCase import *
4 | from model.Device import *
5 |
6 |
7 | class TestCaseManager(object):
8 |
9 | def __init__(self, tester):
10 | self.compatibility_suite = unittest.TestSuite()
11 | self.testcase_class = []
12 | self.load_case()
13 | self.tester = tester
14 |
15 | def load_case(self):
16 | testcase_array = []
17 | testsuits = unittest.defaultTestLoader.discover('testcase/', pattern='test*.py')
18 | for testsuite in testsuits:
19 | for suite in testsuite._tests:
20 | for test in suite:
21 | testcase_array.append(test.__class__)
22 | self.testcase_class = sorted(set(testcase_array), key=testcase_array.index)
23 |
24 | # 兼容性测试用例
25 | def compatibility_testsuite(self):
26 | for testcase in self.testcase_class:
27 | self.compatibility_suite.addTest(BaseTestCase.parametrize(testcase, tester=self.tester))
28 | return self.compatibility_suite
29 |
30 | #monkey自动化
31 | def monkey_android(self):
32 | self.tester.run_monkey(200,1000)
33 |
34 | # 功能性测试用例
35 | def functional_testsuite(self):
36 | pass
37 |
38 | def signal_case_suit(self, test_myclass):
39 | suite = unittest.TestSuite()
40 | suite.addTest(BaseTestCase.parametrize(test_myclass, tester=self.tester))
41 | return suite
42 |
--------------------------------------------------------------------------------
/common/TheTestResult.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | import re
4 | import sys
5 |
6 | from common.ApkBase import ApkInfo
7 |
8 | reload(sys)
9 | sys.setdefaultencoding('utf-8')
10 | import unittest
11 | from pyh import *
12 | import collections
13 | from datetime import datetime
14 | import traceback
15 | from DriverManager import *
16 | from DataProvider import *
17 |
18 |
19 | class TheTestResult(unittest.TestResult):
20 |
21 | detailresults = {} #{"5HUC9S6599999999":{},"":{}}
22 | totalresults = {}
23 | device = {}
24 | testresultpath = ""
25 | filecss = ""
26 | filejs = ""
27 |
28 | def __init__(self, stream=None, descriptions=None, verbosity=None):
29 | unittest.TestResult.__init__(self, stream=None, descriptions=None, verbosity=None)
30 | self.logger = Log.logger
31 | self._testcasedict = collections.OrderedDict()
32 | self.if_write_starttime = False
33 |
34 | def startTest(self, test):
35 | self.tester = test.tester
36 | self.deviceid = self.tester.device.deviceid
37 | testcase_starttime = get_format_currenttime()
38 | self.logger.debug(u'设备:%s Start Run %s' % (self.tester.device.devicename, test))
39 | print test.id()
40 |
41 | #初始化每个设备总结果的数据结构
42 | if self.__class__.totalresults.has_key(self.deviceid):
43 | pass
44 | else:
45 | self.__class__.totalresults[self.deviceid] = collections.OrderedDict()
46 | self.__class__.totalresults[self.deviceid]['totalrun'] = 0
47 | self.__class__.totalresults[self.deviceid]['startime'] = 0
48 | self.__class__.totalresults[self.deviceid]['stoptime'] = 0
49 | self.__class__.totalresults[self.deviceid]['errortestcase'] = 0
50 | self.__class__.totalresults[self.deviceid]['failtestcase'] = 0
51 | self.__class__.totalresults[self.deviceid]['skiptestcase'] = 0
52 | self.__class__.totalresults[self.deviceid]['successtestcase'] = 0
53 |
54 | #总用例数
55 | self.__class__.totalresults[self.deviceid]['totalrun'] = self.__class__.totalresults[self.deviceid]['totalrun'] + 1
56 |
57 | #开始时间
58 | if self.if_write_starttime:
59 | pass
60 | else:
61 | self.__class__.totalresults[self.deviceid]['starttime'] = testcase_starttime
62 | self.if_write_starttime = True
63 |
64 | #每个设备的详细执行结果
65 | self._testcasedict[test] = collections.OrderedDict()
66 | if self.__class__.detailresults.has_key(self.deviceid):
67 | pass
68 | else:
69 | self.__class__.device[self.deviceid] = self.tester.device
70 | self.__class__.detailresults[self.deviceid] = self._testcasedict
71 | self.__class__.detailresults[self.deviceid][test]['startime'] = testcase_starttime
72 |
73 |
74 | def stopTest(self, test):
75 | testcase_stoptime = get_format_currenttime()
76 | self.logger.debug(u'设备:%s Stop Run %s' % (self.tester.device.devicename, test))
77 | self.__class__.detailresults[self.deviceid][test]['stoptime'] = testcase_stoptime
78 | testcase_consumingtime = self.__class__.get_time_consuming(self.__class__.detailresults[self.deviceid][test]['startime']
79 | , self.__class__.detailresults[self.deviceid][test]['stoptime'])
80 | self.__class__.detailresults[self.deviceid][test]['consumingtime'] = testcase_consumingtime
81 | self.__class__.totalresults[self.deviceid]['stoptime'] = testcase_stoptime
82 |
83 |
84 | def startTestRun(self):
85 | # self.logger.debug('测试开始...')
86 | pass
87 |
88 | def stopTestRun(self):
89 | # self.logger.debug('测试完成...')
90 | pass
91 |
92 | def addError(self, test, err):
93 | info = '************ - %s -!(Error) ***************' % self.tester.device.devicename
94 | self.logger.warning(info)
95 | #traceback.print_tb(err[2])
96 | traceback.print_exc()
97 | info = 'Error device:%s Run TestCase %s, Error info:%s' % (self.tester.device.devicename, test, traceback.format_exception(err[0], err[1], err[2]))
98 | self.logger.error(info)
99 | info = '************************************************'
100 | self.logger.warning(info)
101 |
102 | # 错误截图
103 | mytest = str(test)
104 | simplename = clean_brackets_from_str(mytest).replace(' ', '')
105 | myscr = "Error_%s" % simplename
106 | self.tester.screenshot2(myscr)
107 |
108 | # 错误日志
109 | list = traceback.format_exception(err[0], err[1], err[2])
110 | list_err = [] # 列表包含要输出的错误日志信息
111 | list_err.append(list[-1])
112 | list_err.append(list[2])
113 |
114 | if self.__class__.totalresults.has_key(self.deviceid):
115 | self.__class__.totalresults[self.deviceid]['errortestcase'] = self.__class__.totalresults[self.deviceid]['errortestcase'] + 1
116 | else:
117 | self.__class__.totalresults[self.deviceid]['errortestcase'] = 0
118 |
119 | try:
120 | self.__class__.detailresults[self.deviceid][test]['result'] = 'Error'
121 | self.__class__.detailresults[self.deviceid][test]['reason'] = list_err
122 | except Exception, e:
123 | info = Exception, ":", e
124 | self.logger.error(info)
125 |
126 | def addFailure(self, test, err):
127 | info = '************ - %s -!(Fail) ***************' % self.tester.device.devicename
128 | self.logger.warning(info)
129 | info = 'Fail device:%s Run TestCase %s, Fail info:%s' % (self.tester.device.devicename, test, err[1].message)
130 | self.logger.warning(info)
131 | info = '***********************************************'
132 | self.logger.warning(info)
133 |
134 | # 失败截图
135 | mytest = str(test)
136 | simplename = clean_brackets_from_str(mytest).replace(' ', '')
137 | myscr = "Failure_%s" % simplename
138 | self.tester.screenshot2(myscr)
139 |
140 | # 失败日志
141 | list = traceback.format_exception(err[0], err[1], err[2])
142 | list_fail = [] # 列表包含要输出的错误日志信息
143 | list_fail.append(list[-1])
144 | list_fail.append(list[2])
145 |
146 | self.__class__.totalresults[self.deviceid]['failtestcase'] = self.__class__.totalresults[self.deviceid]['failtestcase'] + 1
147 |
148 | self.__class__.detailresults[self.deviceid][test]['result'] = 'Fail'
149 | self.__class__.detailresults[self.deviceid][test]['reason'] = list_fail
150 |
151 | def addSuccess(self, test):
152 | self.__class__.totalresults[self.deviceid]['successtestcase'] = self.__class__.totalresults[self.deviceid]['successtestcase'] + 1
153 |
154 | self.__class__.detailresults[self.deviceid][test]['result'] = 'Success'
155 | self.__class__.detailresults[self.deviceid][test]['reason'] = u'无'
156 |
157 | def addSkip(self, test, reason):
158 | info = '→_→Skip Run TestCase %s, Skip reason:%s' % (test ,reason)
159 | self.logger.debug(info)
160 | self.__class__.totalresults[self.deviceid]['skiptestcase'] = self.__class__.totalresults[self.deviceid]['skiptestcase'] + 1
161 |
162 | self.__class__.detailresults[self.deviceid][test]['result'] = 'Skip'
163 | self.__class__.detailresults[self.deviceid][test]['reason'] = reason
164 |
165 | @classmethod
166 | def get_time_consuming(cls, starttime, endtime):
167 | starttime = datetime.datetime.strptime(starttime, "%Y_%m_%d_%H:%M:%S")
168 | endtime = datetime.datetime.strptime(endtime, "%Y_%m_%d_%H:%M:%S")
169 | timeconsuming = endtime - starttime
170 |
171 | if timeconsuming.seconds <= 0:
172 | timestr = '<1秒'
173 | else:
174 | timestr = '%s 秒' % timeconsuming.seconds
175 | return timestr
176 |
177 | @classmethod
178 | def create_result_folder(cls):
179 | cls.testresultpath = os.getcwd()+'/testresult/%s' % get_format_currenttime()
180 | os.mkdir(cls.testresultpath)
181 |
182 | # css文件路径
183 | filecss = os.getcwd()+'/testresult/result.css'
184 | # js文件路径
185 | filejs = os.getcwd()+'/testresult/result.js'
186 | # js文件路径
187 | sorttablejs = os.getcwd()+'/testresult/sorttable.js'
188 |
189 | @classmethod
190 | def generate_html_testresult(cls):
191 | page = PyH('测试报告')
192 | result_title = "nice Auto Test Report"
193 |
194 | # 增加css样式及js脚本
195 | page.addCSS(cls.filecss)
196 | page.addJS(cls.filejs)
197 | page.addJS(cls.sorttablejs)
198 | homediv = page << div(id='nice_report', cl='nice_header_passed')
199 | reporttitle = homediv << div(result_title, id='title')
200 |
201 | # 获取apk信息
202 | apk_name = ApkInfo().get_apk_pkg()
203 | apk_version_name = ApkInfo().get_apk_version_name()
204 | apk_version_code = ApkInfo().get_apk_version_code()
205 |
206 | # 展示apk相关信息
207 | reportsummary = homediv << div(id='summary')
208 | reportsummary << p(apk_name)
209 | reportsummary << p(apk_version_code)
210 | reportsummary << p(apk_version_name)
211 |
212 | tabdiv = page << div(id="Tab1")
213 | menuboxdiv = tabdiv << div(cl="Menubox")
214 | contentdiv = tabdiv << div(cl="Contentbox")
215 |
216 | tabul = menuboxdiv << ul()
217 | index = 1
218 | size = len(cls.detailresults)
219 | for deviceid, testresult in cls.detailresults.iteritems():
220 | tabstr = "setTab('one',%s, %s)" % (index, size)
221 | liid = "one%s" % index
222 | if index == 1:
223 | tabul << li(cls.device[deviceid].devicename, id=liid, onmouseover=tabstr, cl="hover")
224 | else:
225 | tabul << li(cls.device[deviceid].devicename, id=liid, onmouseover=tabstr)
226 |
227 | content_div_id = "con_one_%s" % index
228 | if index == 1:
229 | detaildiv = contentdiv << div(id=content_div_id, cl="hover")
230 | else:
231 | detaildiv = contentdiv << div(id=content_div_id, style="display:none")
232 |
233 | totaldiv = detaildiv << div(id='Total')
234 | totallabel = totaldiv << p('设备总结果:',align="left")
235 | totalresulttable = totaldiv << table(cl='totalResult', border="1", cellpadding="15")
236 | # totalresulttable.attributes['class'] = 'totalResult'
237 | result_title_tr = totalresulttable << tr()
238 | result_value_tr = totalresulttable << tr()
239 | ordertitle = collections.OrderedDict()
240 | timeconsuming = cls.get_time_consuming(cls.totalresults[deviceid]['starttime'], cls.totalresults[deviceid]['stoptime'])
241 | ordertitle[u'开始时间'] = DataProvider.starttime[deviceid]
242 | try:
243 | ordertitle[u'结束时间'] = DataProvider.stoptime[deviceid]
244 | except:
245 | ordertitle[u'结束时间'] = ordertitle[u'开始时间']
246 | Log.logger.debug('%s stoptime: connect error, use default time instead' % cls.device[deviceid].devicename)
247 |
248 | ordertitle[u'总耗时'] = timeconsuming
249 | ordertitle[u'总用例数'] = cls.totalresults[deviceid]['totalrun']
250 | ordertitle[u'成功用例数'] = cls.totalresults[deviceid]['successtestcase']
251 | ordertitle[u'失败用例数'] = cls.totalresults[deviceid]['failtestcase']
252 | ordertitle[u'错误用例数'] = cls.totalresults[deviceid]['errortestcase']
253 | ordertitle[u'跳过用例数'] = cls.totalresults[deviceid]['skiptestcase']
254 |
255 | for title, value in ordertitle.iteritems():
256 | result_title_tr << td(title)
257 | temp = result_value_tr << td(value)
258 | temp.attributes['class'] = title
259 |
260 | detaillabel = detaildiv << p('详细执行结果:',align="left")
261 | detail_table_title = (u'测试用例', u'开始时间', u'结束时间', u'耗时', u'测试结果', u'原因')
262 | detailresulttable = detaildiv << table(cl='sortable', width="100%", border="1", cellpadding="2", cellspacing="1", style="table-layout:fixed")
263 | detail_title_tr = detailresulttable << tr()
264 | for title in detail_table_title:
265 | detail_title_tr << td(title)
266 | for key, values in cls.detailresults[deviceid].iteritems():
267 | testcasetr = detailresulttable << tr()
268 | mykey = str(key)
269 | final_key = clean_brackets_from_str(mykey)
270 | testcasetr << td(final_key, align='left',width="100%",style="word-break:break-all")
271 | testcasetr << td(values['startime'])
272 | testcasetr << td(values['stoptime'])
273 | testcasetr << td(values['consumingtime'])
274 | try:
275 | testcasetr << td(values['result'])
276 | except:
277 | testcasetr << td('device connect error')
278 | Log.logger.debug('%s result: device connect error, use default values instead' % cls.device[deviceid].devicename)
279 | try:
280 | testcasetr << td(values['reason'], width="100%", style="word-break:break-all")
281 | except:
282 | testcasetr << td('session error')
283 | Log.logger.debug('%s reason: device connect error, use default values instead' % cls.device[deviceid].devicename)
284 |
285 | # 截图展示
286 | # 创建新div标签,并赋予id
287 | screencaplable = detaildiv << div(id='screencap')
288 |
289 | # 添加说明
290 | screencapdiv = detaildiv << p('截图验证:', align="left")
291 |
292 | # 获取截图文件名及绝对路径
293 | screecap_path = "%s/%s/" % (cls.testresultpath, cls.device[deviceid].devicename)
294 | screencap_table_title = get_file_name_from_path(screecap_path, 'png')
295 | screencap_img_src = get_fullfile_from_path(screecap_path, 'png')
296 |
297 | # 创建table
298 | screencapresulttable = screencapdiv << table(width="auto", border="1", cellpadding="2", cellspacing="1",
299 | style="table-layout:fixed")
300 |
301 | # 描述'title'
302 | screencap_title_tr = screencapresulttable << tr()
303 | # 描述'内容'
304 | screencap = screencapresulttable << tr()
305 |
306 | # 循环写入截图名及对应截图
307 | for title in screencap_table_title:
308 | screencap_title_tr << td(title)
309 | for path in screencap_img_src:
310 | screencap << td("
" % (path, title))
311 |
312 | # 视频展示
313 | # 创建新div标签,并赋予id
314 | screenrecordlable = detaildiv << div(id='screenrecord')
315 | screenrecorddiv = detaildiv << p('视频验证:', align="left")
316 |
317 | # 获取视频名字及绝对路径
318 | screerecord_path = "%s/%s/" % (cls.testresultpath, cls.device[deviceid].devicename)
319 | screenrecord_table_title = get_file_name_from_path(screerecord_path, 'mp4')
320 | screenrecord_video_src = get_fullfile_from_path(screerecord_path, 'mp4')
321 |
322 | # 创建table
323 | screenrecordresulttable = screenrecorddiv << table(width="auto", border="1", cellpadding="2", cellspacing="1",
324 | style="table-layout:fixed")
325 | # 描述'title'
326 | screenrecord_title_tr = screenrecordresulttable << tr()
327 | # 描述'内容'
328 | screenrecord = screenrecordresulttable << tr()
329 |
330 | # 循环写入截图名及对应截图
331 | for title_video in screenrecord_table_title:
332 | screenrecord_title_tr << td(title_video)
333 | for path_video in screenrecord_video_src:
334 | screenrecord << td("" % path_video)
336 |
337 | # 添加错误截图信息
338 | errorlable = detaildiv << div(id='errorrecord')
339 | errordiv = detaildiv << p('错误截图:', align="left")
340 |
341 | error_path = "%s/%s/" % (cls.testresultpath, cls.device[deviceid].devicename)
342 | error_table_title = get_file_name_from_path(error_path, 'jpg')
343 | error_src = get_fullfile_from_path(screerecord_path, 'jpg')
344 |
345 | # 创建table
346 | errorresulttable = errordiv << table(width="auto", border="1", cellpadding="2",
347 | cellspacing="1",
348 | style="table-layout:fixed")
349 |
350 | error_title = errorresulttable << tr()
351 | error_valus = errorresulttable << tr()
352 |
353 | # 循环写入截图名及对应截图
354 | for title_error in error_table_title:
355 | error_title << td(title_error)
356 | for path_error in error_src:
357 | error_valus << td("
" % (path_error, title))
358 |
359 |
360 | # 循环添加各个设备的tab
361 | index = index + 1
362 |
363 | #生成测试结果Html文件
364 | htmltestresultfile = '%s/%s.html' % (cls.testresultpath, get_format_currenttime())
365 | try:
366 | page.printOut(htmltestresultfile)
367 | except IOError:
368 | Log.logger.error('file %s not exist' % htmltestresultfile)
369 | DriverManager.quit_all_driver()
370 |
371 | else:
372 | Log.logger.debug(u'测试报告创建成功,路径:%s' % htmltestresultfile)
373 |
374 |
375 | if __name__ == '__main__':
376 | TheTestResult().generate_html_testresult()
377 |
--------------------------------------------------------------------------------
/common/__init__.py:
--------------------------------------------------------------------------------
1 | __author__ = 'John_Hao'
2 |
--------------------------------------------------------------------------------
/common/share.py:
--------------------------------------------------------------------------------
1 | # usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | import Log
4 |
5 | class global_var:
6 |
7 | run_mode = 'autotest' #monkey
8 |
9 | if_run = False # 当时是否有运行的任务
10 |
11 | task_id = 0 # 当前的任务id
12 |
13 | def set_run_mode(value):
14 | global_var.run_mode = value
15 |
16 |
17 | def get_run_mode():
18 | return global_var.run_mode
19 |
20 |
21 | def set_if_run(value):
22 | global_var.if_run = value
23 |
24 |
25 | def get_if_run():
26 | return global_var.if_run
27 |
28 |
29 | def set_taskid(value):
30 | global_var.task_id = value
31 |
32 |
33 | def get_taskid():
34 | return global_var.task_id
35 |
36 |
--------------------------------------------------------------------------------
/config/__init__.py:
--------------------------------------------------------------------------------
1 | __author__ = 'John_Hao'
--------------------------------------------------------------------------------
/config/config.yaml:
--------------------------------------------------------------------------------
1 | NiceAPK: /Users/xxxxx/nice.apk # 测试包的路径
2 |
3 | Devices:
4 | - deviceid: 5HUC9S6599999999 # 设备识别adb devices的值
5 | devicename: OPPO_R9M # 设备的名称,用于区分
6 | serverport: 4723 # -p Appium的主要端口,设备之间不能重复
7 | bootstrapport: 4823 # -bp Appium bootstrap端口,设备之间不能重复
8 | platformname: Android # desired_caps
9 | platformversion: 5.1 # desired_caps
10 | server: 127.0.0.1 # 地址
11 |
12 | - deviceid: 7c404969
13 | devicename: OPPO_A33
14 | serverport: 4724
15 | bootstrapport: 4824
16 | platformname: Android
17 | platformversion: 5.1.1
18 | server: 127.0.0.1
19 |
20 | - deviceid: G6Q4U4EA99999999
21 | devicename: OPPO_A37M
22 | serverport: 4725
23 | bootstrapport: 4825
24 | platformname: Android
25 | platformversion: 5.1
26 | server: 127.0.0.1
27 |
28 | Users:
29 | - uid: 12345678
30 | username: test01
31 | mobile: 33333333333
32 | password: 333333
33 |
34 | - uid: 12345678
35 | username: test02
36 | mobile: 44444444444
37 | password: 444444
--------------------------------------------------------------------------------
/getverifycode.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # 用于获取手机登陆的验证码,这里只是示例,相关地址已经隐去
3 |
4 | #手机号
5 | MOBILE=$1
6 |
7 | #token
8 | TOKEN='xxxxxxxxxxxxxxxxxxxxxx'
9 |
10 | CODE=`curl -s "http://xxxxxx?token=$TOKEN&mobile=$MOBILE" | awk -F ',' '{print $9;}' | awk -F ':' '{print $3;}' | awk -F '}' '{print $1;}'`
11 |
12 | echo $CODE
13 |
14 |
--------------------------------------------------------------------------------
/log/README.md:
--------------------------------------------------------------------------------
1 | 脚本端日志
--------------------------------------------------------------------------------
/model/Device.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | #-*- coding:utf-8 -*-
3 |
4 |
5 | class Device(object):
6 |
7 | def __init__(self, deviceid):
8 | self._deviceid = deviceid
9 | self._devicename = ""
10 | self._platformversion = ""
11 | self._platformname = ""
12 | self._bootstrapport = ""
13 | self._serverport = ""
14 | self._server = ""
15 |
16 | @property
17 | def deviceid(self):
18 | return self._deviceid
19 |
20 | @deviceid.setter
21 | def deviceid(self, value):
22 | self._deviceid = value
23 |
24 | @property
25 | def devicename(self):
26 | return self._devicename
27 |
28 | @devicename.setter
29 | def devicename(self, value):
30 | self._devicename = value
31 |
32 | @property
33 | def platformversion(self):
34 | return self._platformversion
35 |
36 | @platformversion.setter
37 | def platformversion(self, value):
38 | self._platformversion = value
39 |
40 | @property
41 | def platformname(self):
42 | return self._platformname
43 |
44 | @platformname.setter
45 | def platformname(self, value):
46 | self._platformname = value
47 |
48 | @property
49 | def bootstrapport(self):
50 | return self._bootstrapport
51 |
52 | @bootstrapport.setter
53 | def bootstrapport(self, value):
54 | self._bootstrapport = value
55 |
56 | @property
57 | def serverport(self):
58 | return self._serverport
59 |
60 | @serverport.setter
61 | def serverport(self, value):
62 | self._serverport = value
63 |
64 | @property
65 | def server(self):
66 | return self._server
67 |
68 | @server.setter
69 | def server(self, value):
70 | self._server = value
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/model/User.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 |
5 | class User(object):
6 |
7 | def __init__(self,uid):
8 | self._uid = uid
9 | self.username = ""
10 | self._mobile = ""
11 | self._password = ""
12 |
13 | @property
14 | def username(self):
15 | return self.username
16 |
17 | @username.setter
18 | def username(self,value):
19 | self._username = value
20 |
21 | @property
22 | def uid(self):
23 | return self._uid
24 |
25 | @uid.setter
26 | def uid(self,value):
27 | self._uid = value
28 |
29 | @property
30 | def mobile(self):
31 | return self._mobile
32 |
33 | @mobile.setter
34 | def mobile(self,value):
35 | self._mobile = value
36 |
37 | @property
38 | def password(self):
39 | return self._password
40 |
41 | @password.setter
42 | def password(self,value):
43 | self._password = value
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/model/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/model/__init__.py
--------------------------------------------------------------------------------
/prepro/ASUSZ00APreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class ASUSZ00APreProcessPreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self, tester):
9 | super(ASUSZ00APreProcessPreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 |
21 | #GPS权限
22 | element = self.tester.find_element_by_id('android:id/button1')
23 | if element != None:
24 | self.tester.tap_screen(155, 1065)
25 | self.action.tap(element).perform()
26 |
27 | except Exception, e:
28 | traceback.print_exc()
29 | DriverManager.quit_driver(self.tester.device.deviceid)
30 |
31 | def login_success_process(self):
32 | try:
33 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
34 |
35 | #联系人权限
36 | element = self.tester.find_element_by_id("android:id/button1")
37 | if element != None:
38 | self.tester.tap_screen(191, 1063)
39 | self.action.tap(element).perform()
40 |
41 | except Exception, e:
42 | traceback.print_exc()
43 | DriverManager.quit_driver(self.tester.device.deviceid)
44 |
45 | def get_permission_process(self):
46 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
47 | try:
48 | #打开取景框
49 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
50 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
51 |
52 | #相机权限
53 | element = self.tester.find_element_by_id("android:id/button1")
54 | if element != None:
55 | self.tester.tap_screen(129, 1010)
56 | self.action.tap(element).perform()
57 |
58 | #录音权限
59 | element = self.tester.find_element_by_id("android:id/button1")
60 | if element != None:
61 | self.tester.tap_screen(129, 1010)
62 | self.action.tap(element).perform()
63 |
64 | # 退出取景框,回到发现页面
65 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
66 |
67 | except Exception, e:
68 | traceback.print_exc()
69 | DriverManager.quit_driver(self.tester.device.deviceid)
70 |
--------------------------------------------------------------------------------
/prepro/BaseDevicePreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from common.DataProvider import *
5 | from common.Log import *
6 | import threading
7 | import traceback
8 | from common.DriverManager import *
9 | from appium.webdriver.common.touch_action import TouchAction
10 | import time
11 | from appium.webdriver.webelement import WebElement
12 | from selenium.webdriver.support.ui import WebDriverWait
13 | from selenium.webdriver.support import expected_conditions as EC
14 | from selenium.webdriver.common.by import By
15 | from selenium.common.exceptions import TimeoutException
16 | from model.Tester import *
17 | import subprocess
18 |
19 |
20 | class BaseDevicePreProcess(object):
21 |
22 | def __init__(self, tester):
23 | self.tester = tester
24 | self.driver = self.tester.driver
25 | self.action = TouchAction(self.driver)
26 | self.user = self.tester.user
27 |
28 | # 开始预处理流程
29 | def pre_process(self):
30 | Log.logger.info(u"设备:%s 开始预处理流程..." % self.tester.device.devicename)
31 | driver = self.tester.driver
32 | try:
33 | if driver.is_app_installed('com.nice.main'):
34 | Log.logger.info(u"设备:%s 卸载老的nice包" % self.tester.device.devicename)
35 | driver.remove_app('com.nice.main')
36 | Log.logger.info(u"设备:%s 开始安装测试的nice包" % self.tester.device.devicename)
37 | thread = threading.Thread(target=self.install_process)
38 | thread.start()
39 | self.install_app()
40 | thread.join()
41 | Log.logger.info(u"设备:%s 启动成功" % self.tester.device.devicename)
42 | self.login_process()
43 | Log.logger.info(u"设备:%s 登录成功" % self.tester.device.devicename)
44 | self.login_success_process()
45 | time.sleep(10)
46 | self.get_permission_process()
47 | time.sleep(3)
48 | self.tester.clean_mp4_file() #预处理时清除sd的mp4文件
49 | Log.logger.info(u"设备:%s 预处理成功,开始执行测试用例" % self.tester.device.devicename)
50 | except Exception, e:
51 | Log.logger.info(u"设备:%s 出现异常!" % self.tester.device.devicename)
52 | traceback.print_exc()
53 | DriverManager.quit_driver(self.tester.device.deviceid)
54 | return False
55 | return True
56 |
57 | # 安装流程
58 | def install_app(self):
59 | self.driver.install_app(DataProvider.niceapk)
60 |
61 | # 版本升级
62 | def upgrade_app(self):
63 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid, DataProvider.nicelatestapk)
64 | subprocess.call(cmd, shell=True)
65 |
66 | time.sleep(5)
67 | self.driver.launch_app()
68 |
69 | self.tester.start_screen_record(u'直播礼物开屏')
70 | time.sleep(10)
71 | self.tester.stop_screen_record(u'直播礼物开屏')
72 |
73 | # 该流程包括处理安装及启动过程中的各种弹窗,一直到可以点击login按钮
74 | def install_process(self):
75 | pass
76 |
77 | # 该流程包括点击login按钮到达登录页面,并登录
78 | def login_process(self):
79 | Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
80 | try:
81 | # 新老注册流程的登录按钮使用的是同一个resource_id,对登录按钮不用做特殊判断
82 |
83 | #先获得注册页面的login按钮对象
84 | register_login_element = self.tester.find_element_by_id('com.nice.main:id/login')
85 |
86 | #点击登录
87 | self.action.tap(register_login_element).perform()
88 |
89 | time.sleep(2)
90 |
91 | login_phone_number_element = self.tester.find_element_by_id('com.nice.main:id/phone_number',2)
92 | while login_phone_number_element == None:
93 | self.action.tap(register_login_element).perform()
94 | time.sleep(2)
95 | login_phone_number_element = self.tester.find_element_by_id('com.nice.main:id/phone_number',2)
96 |
97 | #输入账号密码
98 | login_phone_number_element.send_keys(self.user.mobile)
99 | login_password = self.tester.find_element_by_id('com.nice.main:id/password')
100 | self.action.tap(login_password).perform()
101 | login_password.send_keys(self.user.password)
102 |
103 | #判断直到登录成功
104 | login_element = self.tester.find_element_by_id('com.nice.main:id/login')
105 | self.action.tap(login_element).perform()
106 |
107 | time.sleep(2)
108 |
109 | self.tester.screenshot(u"登录成功")
110 | except Exception,e:
111 | raise
112 |
113 | # 该流程包括登录成功后,对各种自动弹出对话框进行处理
114 | def login_success_process(self):
115 | pass
116 |
117 | # 对所有需要的权限进行处理,例如:相机、录音
118 | def get_permission_process(self):
119 | pass
120 |
121 | def check_user_profile_pic(self):
122 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnTabProfile')
123 | self.tester.find_element_by_id_and_tap('com.nice.main:id/img_profile_avatar')
124 | time.sleep(3)
125 | if self.tester.is_element_exist('编辑头像'):
126 | print '该用户未添加头像'
127 | self.tester.find_element_by_id_and_tap('com.nice.main:id/img_publish_photo')
128 | time.sleep(3)
129 | if self.tester.is_element_exist('com.nice.main:id/image'):
130 | self.tester.find_element_by_uiautomator_and_tap('new UiSelector().resourceId(\"com.nice.main:id/image\").index(0)')
131 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_action_btn')
132 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_action_btn')
133 | time.sleep(5) # 上传头像到【我】页面
134 | else:
135 | Log.logger.info(u'上传头像失败')
136 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
137 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
138 | else:
139 | print '该用户已添加头像'
140 | self.tester.find_element_by_id_and_tap('com.nice.main:id/profile_black')
141 |
142 | # 创建autotest文件夹并生成测试图片
143 | def data_prepare(self):
144 | Log.logger.info(u"设备:%s 检查文件开始" % self.tester.device.devicename)
145 | if self.tester.is_autotest_exit():
146 | time.sleep(1)
147 | else:
148 | Log.logger.info(u"设备:%s 写入测试文件" % self.tester.device.devicename)
149 | self.tester.pull_file_to_device()
150 | time.sleep(10)
151 | self.tester.refresh_test_pic()
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
--------------------------------------------------------------------------------
/prepro/ChuiZi_YQ607PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class ChuiZi_YQ607PreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(ChuiZi_YQ607PreProcess, self).__init__(tester)
12 |
13 | def install_app(self):
14 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
15 | subprocess.call(cmd,shell=True)
16 |
17 |
18 | def install_process(self):
19 | try:
20 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
21 |
22 | #启动app
23 | while self.driver.is_app_installed("com.nice.main") == False:
24 | time.sleep(2)
25 | self.driver.launch_app()
26 |
27 | #获取位置信息
28 | time.sleep(5)
29 | self.tester.find_element_by_id_and_tap('android:id/button1')
30 |
31 | except Exception, e:
32 | traceback.print_exc()
33 | DriverManager.quit_driver(self.tester.device.deviceid)
34 | # 该流程包括点击login按钮到达登录页面,并登录
35 |
36 | def login_process(self):
37 | Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
38 | try:
39 | # 新老注册流程的登录按钮使用的是同一个resource_id,对登录按钮不用做特殊判断
40 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
41 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
42 | self.tester.find_element_by_id_and_tap('com.nice.main:id/password')
43 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
44 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
45 |
46 | time.sleep(1)
47 | self.tester.screenshot(u"登录成功")
48 | except Exception, e:
49 | raise
50 | def login_success_process(self):
51 | try:
52 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
53 |
54 | element = self.tester.find_element_by_id("android:id/button1")
55 | if element != None:
56 | self.action.tap(element).perform()
57 |
58 | except Exception, e:
59 | traceback.print_exc()
60 | DriverManager.quit_driver(self.tester.device.deviceid)
61 |
62 | def get_permission_process(self):
63 | try:
64 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
65 |
66 | #打开取景窗
67 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
68 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
69 |
70 | time.sleep(3)
71 | # 权限
72 | self.tester.find_element_by_id_and_tap('android:id/button1')
73 |
74 | # 权限
75 | self.tester.find_element_by_id_and_tap('android:id/button1')
76 |
77 | #关闭取景框
78 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
79 |
80 | except Exception, e:
81 | traceback.print_exc()
82 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/Coopad8729PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class Coopad8729PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(Coopad8729PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 |
21 | #处理获取地理位置弹框
22 | element = self.tester.find_element_by_id("com.yulong.android.seccenter:id/alertdlg_allowed",20)
23 | if element != None:
24 | self.action.tap(element).perform()
25 |
26 | except Exception, e:
27 | Log.logger.info(u"设备:%s 没有找到GPS弹窗" % self.tester.device.devicename)
28 |
29 | def login_success_process(self):
30 | try:
31 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
32 |
33 | #获取联系人权限
34 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
35 |
36 | except Exception, e:
37 | Log.logger.info(u"设备:%s 没有找到联系人弹窗" % self.tester.device.devicename)
38 |
39 | def get_permission_process(self):
40 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
41 | try:
42 |
43 | #打开取景框
44 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
45 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
46 | #摄像头权限
47 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
48 |
49 | #录音权限
50 | self.tester.find_element_by_id_and_tap('com.nice.main:id/gallery_tv')
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
52 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
53 |
54 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
55 |
56 | except Exception, e:
57 | traceback.print_exc()
58 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/Coopad8729blackPreprocess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class Coopad8729blackPreprocess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(Coopad8729blackPreprocess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 |
21 | #处理获取地理位置弹框
22 | element = self.tester.find_element_by_id("com.yulong.android.seccenter:id/alertdlg_allowed",20)
23 | if element != None:
24 | self.action.tap(element).perform()
25 |
26 | except Exception, e:
27 | traceback.print_exc()
28 | DriverManager.quit_driver(self.tester.device.deviceid)
29 |
30 | def login_success_process(self):
31 | try:
32 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
33 |
34 | #获取联系人权限
35 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
36 |
37 | except Exception, e:
38 | traceback.print_exc()
39 | DriverManager.quit_driver(self.tester.device.deviceid)
40 |
41 | def get_permission_process(self):
42 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
43 | try:
44 | #打开取景框
45 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
46 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
47 | #摄像头权限
48 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
49 |
50 | #录音权限
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/gallery_tv')
52 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
53 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
54 |
55 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
56 |
57 | except Exception, e:
58 | traceback.print_exc()
59 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/Coopad8765PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class Coopad8765PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(Coopad8765PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 |
21 | #处理获取地理位置弹框
22 | element = self.tester.find_element_by_id("com.yulong.android.security:id/button3",20)
23 | if element != None:
24 | self.action.tap(element).perform()
25 |
26 | except Exception, e:
27 | traceback.print_exc()
28 | DriverManager.quit_driver(self.tester.device.deviceid)
29 |
30 | def login_success_process(self):
31 | try:
32 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
33 |
34 | #获取联系人权限
35 | element = self.tester.find_element_by_id("com.yulong.android.security:id/button3",20)
36 | if element != None:
37 | self.action.tap(element).perform()
38 |
39 | except Exception, e:
40 | traceback.print_exc()
41 | DriverManager.quit_driver(self.tester.device.deviceid)
42 |
43 | def get_permission_process(self):
44 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
45 | try:
46 | #打开取景框
47 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
48 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
49 | #摄像头权限
50 | self.tester.find_element_by_id_and_tap('com.yulong.android.security:id/button3')
51 |
52 | #录音权限
53 | self.tester.find_element_by_id_and_tap('com.nice.main:id/gallery_tv')
54 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
55 | self.tester.find_element_by_id_and_tap('com.yulong.android.security:id/button3')
56 |
57 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
58 |
59 | except Exception, e:
60 | traceback.print_exc()
61 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/Coopad9729blackPreprocess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class Coopad9729blackPreprocess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(Coopad9729blackPreprocess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 |
21 | #处理获取地理位置弹框
22 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
23 |
24 | except Exception, e:
25 | traceback.print_exc()
26 | DriverManager.quit_driver(self.tester.device.deviceid)
27 |
28 | def login_success_process(self):
29 | try:
30 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
31 |
32 | #获取联系人权限
33 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
34 |
35 | except Exception, e:
36 | traceback.print_exc()
37 | DriverManager.quit_driver(self.tester.device.deviceid)
38 |
39 | def get_permission_process(self):
40 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
41 | try:
42 | #打开取景框
43 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
44 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
45 |
46 | #视频权限
47 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
48 | #录音权限
49 | self.tester.find_element_by_id_and_tap('com.yulong.android.seccenter:id/alertdlg_allowed')
50 |
51 | self.tester.press_keycode(4)
52 |
53 | except Exception, e:
54 | traceback.print_exc()
55 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/HTCBFPreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class HTCBFPreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(HTCBFPreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 | except Exception, e:
21 | traceback.print_exc()
22 | DriverManager.quit_driver(self.tester.device.deviceid)
23 |
24 | def login_process(self):
25 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
26 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
27 |
28 | self.tester.find_element_by_id_and_tap('com.nice.main:id/password')
29 |
30 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
31 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
32 |
33 | def login_success_process(self):
34 | try:
35 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
36 |
37 | except Exception, e:
38 | traceback.print_exc()
39 | DriverManager.quit_driver(self.tester.device.deviceid)
40 |
41 | def get_permission_process(self):
42 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
43 | try:
44 | #打开取景框
45 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
46 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
47 |
48 | # 退出取景框,回到发现页面
49 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
50 | except Exception, e:
51 | traceback.print_exc()
52 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/HTCD826wPreProcess.py:
--------------------------------------------------------------------------------
1 | #coding=utf-8
2 | from BaseDevicePreProcess import *
3 |
4 | class HTCD826wPreProcess (BaseDevicePreProcess):
5 |
6 | def __init__(self, tester):
7 | super(HTCD826wPreProcess, self).__init__(tester)
8 |
9 | def install_process(self):
10 | try:
11 | Log.logger.info(u"设备:%s 启动app并处理安装" % self.tester.device.devicename)
12 |
13 | while self.tester.is_element_exist('com.htc:id/primary')==False:
14 | time.sleep(1)
15 |
16 | time.sleep(2)
17 | self.tester.press_keycode(4)
18 |
19 | while self.driver.is_app_installed("com.nice.main") == False:
20 | time.sleep(2)
21 |
22 | self.driver.launch_app()
23 | except Exception, e:
24 | traceback.print_exc()
25 | DriverManager.quit_driver(self.tester.device.deviceid)
26 |
27 | def login_process(self):
28 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
29 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
30 | self.tester.find_element_by_id_and_tap('com.nice.main:id/password')
31 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
32 | self.tester.press_keycode(4)
33 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
34 |
35 | def login_success_process(self):
36 | Log.logger.info(u"设备:%s 登录成功后,无需处理" % self.tester.device.devicename)
37 |
38 | def get_permission_process(self):
39 | Log.logger.info(u"设备:%s 无需处理" % self.tester.device.devicename)
40 |
41 |
42 |
--------------------------------------------------------------------------------
/prepro/HTCONEPreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class HTCONEPreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(HTCONEPreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 | except Exception, e:
21 | traceback.print_exc()
22 | DriverManager.quit_driver(self.tester.device.deviceid)
23 |
24 | def login_process(self):
25 |
26 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
27 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
28 |
29 | self.tester.find_element_by_id_and_tap('com.nice.main:id/password')
30 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
31 | self.tester.press_keycode(4)
32 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
33 |
34 | def login_success_process(self):
35 | try:
36 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
37 |
38 |
39 | except Exception, e:
40 | traceback.print_exc()
41 | DriverManager.quit_driver(self.tester.device.deviceid)
42 |
43 | def get_permission_process(self):
44 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
45 | try:
46 | #打开取景框
47 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
48 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
49 |
50 | # 退出取景框,回到发现页面
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
52 | except Exception, e:
53 | traceback.print_exc()
54 | DriverManager.quit_driver(self.tester.device.deviceid)
55 |
--------------------------------------------------------------------------------
/prepro/HUAWEIMT7PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | from prepro.HuaWeiG9PreProcess import *
6 |
7 | class HUAWEIMT7PreProcess (HuaWeiG9PreProcess):
8 |
9 | def __init__(self, tester):
10 | super(HUAWEIMT7PreProcess, self).__init__(tester)
11 |
--------------------------------------------------------------------------------
/prepro/HUAWEIVNSAL00PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 |
7 | class HUAWEIVNSAL00PreProcess (BaseDevicePreProcess):
8 |
9 | def __init__(self, tester):
10 | super(HUAWEIVNSAL00PreProcess, self).__init__(tester)
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 处理安装提示" % self.tester.device.devicename)
15 |
16 | # self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/decide_to_continue')
17 | # self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/goinstall')
18 |
19 | while self.driver.is_app_installed("com.nice.main") == False:
20 | time.sleep(2)
21 |
22 | self.driver.launch_app()
23 |
24 | # 已安装应用列表权限
25 | self.tester.find_element_by_id_and_tap('com.huawei.systemmanager:id/btn_allow')
26 |
27 | except Exception, e:
28 | traceback.print_exc()
29 | DriverManager.quit_driver(self.tester.device.deviceid)
30 |
31 | def login_success_process(self):
32 | try:
33 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
34 |
35 | # 权限申请
36 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
37 | time.sleep(1)
38 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
39 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok')
40 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
41 |
42 | Log.logger.info(u"设备:%s 没有成功授权通讯录" % self.tester.device.devicename)
43 |
44 | except Exception, e:
45 | traceback.print_exc()
46 | DriverManager.quit_driver(self.tester.device.deviceid)
47 |
48 | def get_permission_process(self):
49 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
50 | try:
51 | #打开取景框
52 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
53 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
54 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
55 | if self.tester.is_element_exist('com.huawei.systemmanager:id/btn_allow'):
56 | self.tester.tap_screen(730, 1170)
57 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
58 | time.sleep(1)
59 |
60 | except Exception, e:
61 | traceback.print_exc()
62 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/HUIWEIP6PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class HUAWEIP6PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(HUAWEIP6PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 |
21 | #获取定位权限
22 | self.tester.find_element_by_id_and_tap('com.huawei.systemmanager:id/btn_allow')
23 |
24 | except Exception, e:
25 | traceback.print_exc()
26 | DriverManager.quit_driver(self.tester.device.deviceid)
27 |
28 | def login_success_process(self):
29 | try:
30 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
31 |
32 | #授权通讯录
33 | self.tester.find_element_by_id_and_tap('com.huawei.systemmanager:id/btn_allow')
34 |
35 | except Exception, e:
36 | traceback.print_exc()
37 | DriverManager.quit_driver(self.tester.device.deviceid)
38 |
39 | def get_permission_process(self):
40 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
41 | try:
42 | #打开取景框
43 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
44 |
45 | #切换到拍摄tab
46 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
47 |
48 | self.tester.press_keycode(4)
49 |
50 | time.sleep(1)
51 |
52 | except Exception, e:
53 | traceback.print_exc()
54 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/HuaWeiG9PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | from model import Tester
6 |
7 | class HuaWeiG9PreProcess (BaseDevicePreProcess):
8 |
9 | def __init__(self,tester):
10 | super(HuaWeiG9PreProcess, self).__init__(tester)
11 |
12 | def install_app(self):
13 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid, DataProvider.niceapk)
14 | subprocess.call(cmd, shell=True)
15 |
16 | # 开始预处理流程
17 | def pre_process(self):
18 | Log.logger.info(u"设备:%s 开始预处理流程..." % self.tester.device.devicename)
19 | driver = self.tester.driver
20 | try:
21 | if driver.is_app_installed('com.nice.main'):
22 | Log.logger.info(u"设备:%s 卸载老的nice包" % self.tester.device.devicename)
23 | driver.remove_app('com.nice.main')
24 |
25 | if self.tester.is_element_exist('android:id/button1',30):
26 | self.tester.find_element_by_id_and_tap('android:id/button1')
27 |
28 | Log.logger.info(u"设备:%s 开始安装测试的nice包" % self.tester.device.devicename)
29 | thread = threading.Thread(target=self.install_process)
30 | thread.start()
31 | self.install_app()
32 | thread.join()
33 | Log.logger.info(u"设备:%s 启动成功" % self.tester.device.devicename)
34 | self.login_process()
35 | Log.logger.info(u"设备:%s 登录成功" % self.tester.device.devicename)
36 | self.login_success_process()
37 | self.get_permission_process()
38 | time.sleep(3)
39 | self.tester.clean_mp4_file() # 预处理时清除sd的mp4文件
40 | Log.logger.info(u"设备:%s 预处理成功,开始执行测试用例" % self.tester.device.devicename)
41 | except Exception, e:
42 | traceback.print_exc()
43 | DriverManager.quit_driver(self.tester.device.deviceid)
44 | return False
45 | return True
46 |
47 | def install_process(self):
48 | try:
49 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
50 |
51 | if self.tester.is_element_exist('com.android.packageinstaller:id/decide_to_continue',10) == True:
52 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/decide_to_continue')
53 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/goinstall')
54 | elif self.tester.is_element_exist('com.android.packageinstaller:id/ok_button',10) == True:
55 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/ok_button')
56 | else :
57 | print 'error!'
58 | except Exception, e:
59 | traceback.print_exc()
60 | DriverManager.quit_driver(self.tester.device.deviceid)
61 | # 该流程包括点击login按钮到达登录页面,并登录
62 | finally:
63 | while self.driver.is_app_installed("com.nice.main") == False:
64 | time.sleep(2)
65 |
66 | self.driver.launch_app()
67 |
68 | # 获取定位权限
69 | self.tester.find_element_by_id_and_tap('com.huawei.systemmanager:id/btn_allow')
70 |
71 | def login_process(self):
72 | Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
73 | try:
74 | # 新老注册流程的登录按钮使用的是同一个resource_id,对登录按钮不用做特殊判断
75 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
76 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
77 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
78 |
79 | self.tester.press_keycode(4)
80 |
81 | time.sleep(1)
82 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
83 |
84 | time.sleep(1)
85 | self.tester.screenshot(u"登录成功")
86 | except Exception, e:
87 | raise
88 |
89 | def login_success_process(self):
90 | try:
91 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
92 |
93 | #授权sd卡
94 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/do_not_ask_checkbox')
95 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
96 |
97 | #授权位置信息
98 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/do_not_ask_checkbox')
99 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
100 |
101 | #授权通讯录
102 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok')
103 |
104 | time.sleep(5)
105 | if self.tester.is_element_exist('com.android.packageinstaller:id/permission_allow_button'):
106 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/do_not_ask_checkbox')
107 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
108 |
109 | time.sleep(5)
110 | if self.tester.is_element_exist('com.nice.main:id/btn_know'):
111 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_know')
112 |
113 | except Exception, e:
114 | traceback.print_exc()
115 | DriverManager.quit_driver(self.tester.device.deviceid)
116 |
117 | def get_permission_process(self):
118 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
119 | try:
120 | #打开取景框
121 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
122 |
123 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/do_not_ask_checkbox')
124 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
125 |
126 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/do_not_ask_checkbox')
127 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
128 |
129 |
130 | # 切换到拍摄tab
131 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
132 |
133 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
134 | time.sleep(1)
135 |
136 | except Exception, e:
137 | traceback.print_exc()
138 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/HuaWeiJAZZProPrecess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | from model import Tester
6 | from prepro.HuaWeiG9PreProcess import *
7 | from prepro.HUAWEIMT7PreProcess import *
8 |
9 | class HuaWeiJAZZProPrecess(HuaWeiG9PreProcess):
10 |
11 | def __init__(self,tester):
12 | super(HuaWeiJAZZProPrecess, self).__init__(tester)
13 |
--------------------------------------------------------------------------------
/prepro/LeX620PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class LeX620PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(LeX620PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 | except Exception, e:
21 | traceback.print_exc()
22 | DriverManager.quit_driver(self.tester.device.deviceid)
23 |
24 | def login_success_process(self):
25 | try:
26 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
27 |
28 | #权限管理弹框
29 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
30 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
31 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
32 |
33 | #授权通讯录弹框
34 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok')
35 |
36 | #通讯录权限申请弹框
37 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
38 |
39 | time.sleep(3)
40 | element = self.tester.find_element_by_id("com.nice.main:id/btn_know")
41 | if element != None:
42 | self.action.tap(element).perform()
43 |
44 | except Exception, e:
45 | traceback.print_exc()
46 | DriverManager.quit_driver(self.tester.device.deviceid)
47 |
48 | def get_permission_process(self):
49 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
50 | try:
51 | #打开取景框
52 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
53 |
54 | # 摄像头权限
55 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
56 |
57 | # 录音权限
58 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
59 |
60 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
61 |
62 |
63 | # 退出取景框,回到发现页面
64 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
65 | except Exception, e:
66 | traceback.print_exc()
67 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/LianXiang5860PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class LianXiang5860PreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(LianXiang5860PreProcess, self).__init__(tester)
12 |
13 | #魅族情况太特殊,安装都得继承然后单独处理,弹出的adb安装权限直接阻塞了Server运行
14 | def install_app(self):
15 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
16 | subprocess.call(cmd,shell=True)
17 |
18 |
19 | def install_process(self):
20 | try:
21 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
22 |
23 | #启动app
24 | while self.driver.is_app_installed("com.nice.main") == False:
25 | time.sleep(2)
26 | self.driver.launch_app()
27 |
28 | #GPS权限
29 | self.tester.find_element_by_id_and_tap('com.mediatek.security:id/checkbox')
30 | self.tester.find_element_by_id_and_tap('android:id/button1')
31 |
32 | except Exception, e:
33 | traceback.print_exc()
34 | DriverManager.quit_driver(self.tester.device.deviceid)
35 | # 该流程包括点击login按钮到达登录页面,并登录
36 |
37 | def login_process(self):
38 | Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
39 | try:
40 | # 新老注册流程的登录按钮使用的是同一个resource_id,对登录按钮不用做特殊判断
41 |
42 | # 先获得注册页面的login按钮对象
43 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
44 | time.sleep(5)
45 |
46 | while self.tester.is_element_exist(u'已有账号登录'):
47 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
48 | time.sleep(2)
49 |
50 | #输入账号
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/phone_number')
52 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number',self.user.mobile)
53 |
54 | # 输入密码
55 | self.tester.find_element_by_id_and_tap('com.nice.main:id/password')
56 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password',self.user.password)
57 |
58 | #登录
59 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
60 |
61 | # 判断直到登录成功
62 | time.sleep(5)
63 | self.tester.screenshot(u"登录成功")
64 |
65 | except Exception, e:
66 | raise
67 |
68 | def login_success_process(self):
69 | try:
70 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
71 |
72 | self.tester.find_element_by_id_and_tap('com.mediatek.security:id/checkbox')
73 | self.tester.find_element_by_id_and_tap('android:id/button1')
74 |
75 | except Exception, e:
76 | traceback.print_exc()
77 | DriverManager.quit_driver(self.tester.device.deviceid)
78 |
79 | def get_permission_process(self):
80 | try:
81 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
82 |
83 | #打开取景窗
84 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
85 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
86 |
87 | #摄像头权限
88 | self.tester.find_element_by_id_and_tap('com.mediatek.security:id/checkbox')
89 | self.tester.find_element_by_id_and_tap('android:id/button1')
90 |
91 | #录音权限
92 | self.tester.find_element_by_id_and_tap('com.mediatek.security:id/checkbox')
93 | self.tester.find_element_by_id_and_tap('android:id/button1')
94 |
95 | #关闭取景框
96 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
97 |
98 | except Exception, e:
99 | traceback.print_exc()
100 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/LianXiangK30TPreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | from appium.webdriver.webelement import WebElement
6 | import subprocess
7 |
8 | class LianXiangK30TPreProcess(BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(LianXiangK30TPreProcess, self).__init__(tester)
12 |
13 | # def install_app(self):
14 | # Log.logger.info(u"设备:%s 安装时弹出获取权限弹框" % self.tester.device.devicename)
15 | # try:
16 | #
17 | # except:
18 | # traceback.print_exc()
19 |
20 | def install_process(self):
21 | try:
22 | Log.logger.info(u"设备:%s 处理安装中各种弹窗" % self.tester.device.devicename)
23 |
24 | self.tester.find_element_by_uiautomator_and_tap(
25 | 'new UiSelector().resourceId(\"com.lenovo.safecenter:id/btn_install\").textContains(\"确定\")')
26 |
27 | # 启动app
28 | while self.driver.is_app_installed("com.nice.main") == False:
29 | time.sleep(2)
30 | self.driver.launch_app()
31 |
32 | except Exception, e:
33 | traceback.print_exc()
34 | DriverManager.quit_driver(self.tester.device.deviceid)
35 |
36 | def login_success_process(self):
37 | try:
38 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
39 |
40 | except Exception, e:
41 | traceback.print_exc()
42 | DriverManager.quit_driver(self.tester.device.deviceid)
43 |
44 | def get_permission_process(self):
45 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
46 | try:
47 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
48 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
49 |
50 | #关闭取景框
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
52 |
53 | except Exception, e:
54 | traceback.print_exc()
55 | DriverManager.quit_driver(self.tester.device.deviceid)
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/prepro/M3notePreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class M3notePreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(M3notePreProcess, self).__init__(tester)
12 |
13 | #魅族情况太特殊,安装都得继承然后单独处理,弹出的adb安装权限直接阻塞了Server运行
14 | def install_app(self):
15 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
16 | subprocess.call(cmd,shell=True)
17 |
18 |
19 | def install_process(self):
20 |
21 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
22 | try:
23 | #adb
24 | element = self.tester.find_element_by_id("android:id/button1",20)
25 | if element != None:
26 | self.action.tap(element).perform()
27 |
28 | # 启动app
29 | while self.driver.is_app_installed("com.nice.main") == False:
30 | time.sleep(2)
31 | self.driver.launch_app()
32 |
33 | # nice获取手机GPS权限
34 | element = self.tester.find_element_by_id("android:id/button1",20)
35 | if element != None:
36 | self.action.tap(element).perform()
37 |
38 | # nice获取手机识别码权限
39 | element = self.tester.find_element_by_id("android:id/button1",10)
40 | if element != None:
41 | self.action.tap(element).perform()
42 |
43 | except Exception, e:
44 | traceback.print_exc()
45 | DriverManager.quit_driver(self.tester.device.deviceid)
46 |
47 | def login_process(self):
48 | Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
49 | try:
50 | # 新老注册流程的登录按钮使用的是同一个resource_id,对登录按钮不用做特殊判断
51 |
52 | #先获得注册页面的login按钮对象
53 | register_login_element = self.tester.find_element_by_id('com.nice.main:id/login')
54 |
55 | #点击登录
56 | self.action.tap(register_login_element).perform()
57 |
58 | time.sleep(2)
59 |
60 | login_phone_number_element = self.tester.find_element_by_id('com.nice.main:id/phone_number',2)
61 | while login_phone_number_element == None:
62 | self.action.tap(register_login_element).perform()
63 | time.sleep(2)
64 | login_phone_number_element = self.tester.find_element_by_id('com.nice.main:id/phone_number',2)
65 |
66 | #输入账号密码
67 | login_phone_number_element.send_keys(self.user.mobile)
68 | login_password = self.tester.find_element_by_id('com.nice.main:id/password')
69 | self.action.tap(login_password).perform()
70 | login_password.send_keys(self.user.password)
71 |
72 | #判断直到登录成功
73 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
74 | time.sleep(5)
75 | self.tester.screenshot(u"登录成功")
76 | except Exception,e:
77 | raise
78 |
79 | def login_success_process(self):
80 | try:
81 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
82 |
83 | #联系人权限
84 | self.tester.find_element_by_id_and_tap('android:id/button1')
85 |
86 | except Exception, e:
87 | traceback.print_exc()
88 | DriverManager.quit_driver(self.tester.device.deviceid)
89 |
90 | def get_permission_process(self):
91 | try:
92 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
93 |
94 | #打开取景窗
95 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
96 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
97 |
98 | #通讯录权限
99 | self.tester.find_element_by_id_and_tap('android:id/button1')
100 | # 录音权限
101 | time.sleep(2)
102 | self.tester.find_element_by_id_and_tap('android:id/button1')
103 |
104 | #关闭取景框
105 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
106 |
107 | except Exception, e:
108 | traceback.print_exc()
109 | DriverManager.quit_driver(self.tester.device.deviceid)
110 |
--------------------------------------------------------------------------------
/prepro/M57APreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class M57APreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(M57APreProcess, self).__init__(tester)
12 |
13 | #魅族情况太特殊,安装都得继承然后单独处理,弹出的adb安装权限直接阻塞了Server运行
14 | def install_app(self):
15 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
16 | subprocess.call(cmd,shell=True)
17 |
18 |
19 | def install_process(self):
20 | try:
21 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
22 |
23 | #adb安装权限
24 | self.tester.find_element_by_id_and_tap('android:id/button1')
25 |
26 | #启动app
27 | while self.driver.is_app_installed("com.nice.main") == False:
28 | time.sleep(2)
29 | self.driver.launch_app()
30 |
31 | #GPS权限
32 | #self.tester.find_element_by_id_and_tap('android:id/button1')
33 |
34 | except Exception, e:
35 | traceback.print_exc()
36 | DriverManager.quit_driver(self.tester.device.deviceid)
37 |
38 | def login_success_process(self):
39 | try:
40 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
41 |
42 | #联系人权限
43 | #self.tester.find_element_by_id_and_tap('android:id/button1')
44 |
45 | except Exception, e:
46 | traceback.print_exc()
47 | DriverManager.quit_driver(self.tester.device.deviceid)
48 |
49 | def get_permission_process(self):
50 | try:
51 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
52 |
53 | #打开取景窗
54 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
55 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
56 |
57 | #录音权限
58 | #self.tester.find_element_by_id_and_tap('android:id/button1')
59 |
60 | #关闭取景框
61 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
62 |
63 | except Exception, e:
64 | traceback.print_exc()
65 | DriverManager.quit_driver(self.tester.device.deviceid)
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/prepro/MEITU5PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class MEITU5PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(MEITU5PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 | except Exception, e:
21 | traceback.print_exc()
22 | DriverManager.quit_driver(self.tester.device.deviceid)
23 |
24 | def login_success_process(self):
25 | try:
26 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
27 |
28 | #权限管理弹框
29 | # self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
30 | # self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
31 | # self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
32 |
33 | #授权通讯录弹框
34 | #self.tester.find_element_by_id_and_tap('com.nice.main:id/txt_time')
35 |
36 | #通讯录权限申请弹框
37 | self.tester.find_element_by_id_and_tap('com.mediatek.security:id/mts_button1')
38 | except Exception, e:
39 | traceback.print_exc()
40 | DriverManager.quit_driver(self.tester.device.deviceid)
41 |
42 | def get_permission_process(self):
43 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
44 | try:
45 | #打开取景框
46 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
47 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
48 |
49 | # 摄像头权限
50 | self.tester.find_element_by_id_and_tap('com.mediatek.security:id/mts_button1')
51 |
52 | # 退出取景框,回到发现页面
53 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
54 | except Exception, e:
55 | traceback.print_exc()
56 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/MEITUM4PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class MEITUM4PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(MEITUM4PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 |
21 | time.sleep(7)
22 |
23 | # 获取允许弹框的坐标并点击
24 | print '干掉允许按钮,程序往下继续执行'
25 | self.driver.swipe(488, 710, 488, 710, 5)
26 |
27 | except Exception, e:
28 | Log.logger.info(u"设备:%s 发生错误" % self.tester.device.devicename)
29 | traceback.print_exc()
30 | DriverManager.quit_driver(self.tester.device.deviceid)
31 |
32 | def login_success_process(self):
33 | try:
34 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
35 |
36 | time.sleep(4)
37 | print '允许授权通讯录权限'
38 | self.driver.swipe(493,705,493,705,5)
39 |
40 | except Exception, e:
41 | Log.logger.info(u"设备:%s 发生错误" % self.tester.device.devicename)
42 | traceback.print_exc()
43 | DriverManager.quit_driver(self.tester.device.deviceid)
44 |
45 | def get_permission_process(self):
46 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
47 | try:
48 | #打开取景框
49 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
50 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
51 |
52 | #摄像头权限
53 | time.sleep(2)
54 | print '授权摄像头权限'
55 | self.driver.swipe(500,721,500,721,5)
56 |
57 | # 录音权限
58 | time.sleep(6)
59 | print '授权录音权限'
60 | self.driver.swipe(490,722,490,722,5)
61 |
62 | time.sleep(1)
63 | # 退出取景框,回到发现页面
64 | if self.tester.is_element_exist('com.nice.main:id/titlebar_return',3):
65 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
66 | else:
67 | self.tester.back_to_feed()
68 | except Exception, e:
69 | Log.logger.info(u"设备:%s 发生错误" % self.tester.device.devicename)
70 | traceback.print_exc()
71 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/MEIZU4PROPreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class MEIZU4PROPreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(MEIZU4PROPreProcess, self).__init__(tester)
12 |
13 | #魅族情况太特殊,安装都得继承然后单独处理,弹出的adb安装权限直接阻塞了Server运行
14 | def install_app(self):
15 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
16 | subprocess.call(cmd,shell=True)
17 |
18 |
19 | def install_process(self):
20 | try:
21 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
22 |
23 | #adb
24 | element = self.tester.find_element_by_id("android:id/button1",20)
25 | if element != None:
26 | self.action.tap(element).perform()
27 |
28 | #启动app
29 | while self.driver.is_app_installed("com.nice.main") == False:
30 | time.sleep(2)
31 | self.driver.launch_app()
32 |
33 | #GPS权限
34 | self.tester.find_element_by_id_and_tap('android:id/button1')
35 |
36 | except Exception, e:
37 | traceback.print_exc()
38 | DriverManager.quit_driver(self.tester.device.deviceid)
39 |
40 |
41 | def login_success_process(self):
42 | try:
43 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
44 |
45 | #联系人权限
46 | self.tester.find_element_by_id_and_tap('android:id/button1')
47 |
48 | except Exception, e:
49 | traceback.print_exc()
50 | DriverManager.quit_driver(self.tester.device.deviceid)
51 |
52 | def get_permission_process(self):
53 | try:
54 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
55 |
56 | #打开取景窗
57 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
58 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
59 |
60 | #摄像头权限
61 | self.tester.find_element_by_id_and_tap('android:id/button1')
62 |
63 | element = self.tester.find_element_by_id("android:id/button1")
64 | if element != None:
65 | self.action.tap(element).perform()
66 |
67 | #关闭取景框
68 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
69 |
70 | except Exception, e:
71 | traceback.print_exc()
72 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/MX5PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class MX5PreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(MX5PreProcess, self).__init__(tester)
12 |
13 | #魅族情况太特殊,安装都得继承然后单独处理,弹出的adb安装权限直接阻塞了Server运行
14 | def install_app(self):
15 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
16 | subprocess.call(cmd,shell=True)
17 |
18 | def install_process(self):
19 | try:
20 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
21 |
22 | #adb
23 | element = self.tester.find_element_by_id("android:id/button1",20)
24 | if element != None:
25 | self.action.tap(element).perform()
26 |
27 | #启动app
28 | while self.driver.is_app_installed("com.nice.main") == False:
29 | time.sleep(2)
30 | self.driver.launch_app()
31 |
32 | #GPS权限
33 | self.tester.find_element_by_id_and_tap('android:id/button1')
34 |
35 | except Exception, e:
36 | traceback.print_exc()
37 | DriverManager.quit_driver(self.tester.device.deviceid)
38 |
39 | def login_success_process(self):
40 | try:
41 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
42 |
43 | #联系人权限
44 | self.tester.find_element_by_id_and_tap('android:id/button1')
45 |
46 | except Exception, e:
47 | traceback.print_exc()
48 | DriverManager.quit_driver(self.tester.device.deviceid)
49 |
50 | def get_permission_process(self):
51 | try:
52 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
53 |
54 | #打开取景窗
55 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
56 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
57 |
58 | #摄像头权限
59 | self.tester.find_element_by_id_and_tap('android:id/button1')
60 |
61 | element = self.tester.find_element_by_id("android:id/button1")
62 | if element != None:
63 | self.action.tap(element).perform()
64 |
65 | #关闭取景框
66 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
67 |
68 | except Exception, e:
69 | traceback.print_exc()
70 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/MZM1notePreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class MZM1notePreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(MZM1notePreProcess, self).__init__(tester)
12 |
13 | #魅族情况太特殊,安装都得继承然后单独处理,弹出的adb安装权限直接阻塞了Server运行
14 | def install_app(self):
15 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
16 | subprocess.call(cmd,shell=True)
17 |
18 |
19 | def install_process(self):
20 | try:
21 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
22 |
23 | #adb
24 | element = self.tester.find_element_by_id("android:id/button1",20)
25 | if element != None:
26 | self.action.tap(element).perform()
27 |
28 | #启动app
29 | while self.driver.is_app_installed("com.nice.main") == False:
30 | time.sleep(2)
31 | self.driver.launch_app()
32 |
33 | # nice获取手机GPS权限
34 | self.tester.find_element_by_id_and_tap('android:id/button1')
35 |
36 | # nice获取手机识别码权限
37 | time.sleep(2)
38 | element = self.tester.find_element_by_id("android:id/button1")
39 | if element != None:
40 | self.action.tap(element).perform()
41 |
42 | except Exception, e:
43 | traceback.print_exc()
44 | DriverManager.quit_driver(self.tester.device.deviceid)
45 |
46 | def login_success_process(self):
47 | try:
48 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
49 |
50 | #联系人权限
51 | self.tester.find_element_by_id_and_tap('android:id/button1')
52 |
53 | except Exception, e:
54 | traceback.print_exc()
55 | DriverManager.quit_driver(self.tester.device.deviceid)
56 |
57 | def get_permission_process(self):
58 | try:
59 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
60 |
61 | #打开取景窗
62 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
63 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
64 |
65 | #拍照和录像权限
66 | self.tester.find_element_by_id_and_tap('android:id/button1')
67 |
68 | #录音权限
69 | self.tester.find_element_by_id_and_tap('android:id/button1')
70 |
71 | #关闭取景框
72 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
73 |
74 | except Exception, e:
75 | traceback.print_exc()
76 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/MZM2NotePreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class MZM2NotePreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(MZM2NotePreProcess, self).__init__(tester)
12 |
13 | #魅族情况太特殊,安装都得继承然后单独处理,弹出的adb安装权限直接阻塞了Server运行
14 | def install_app(self):
15 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
16 | subprocess.call(cmd,shell=True)
17 |
18 | def install_process(self):
19 | try:
20 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
21 |
22 | element = self.tester.find_element_by_id('android:id/button1',20)
23 | if element != None:
24 | self.action.tap(element).perform()
25 |
26 | #启动app
27 | while self.driver.is_app_installed("com.nice.main") == False:
28 | time.sleep(2)
29 | self.driver.launch_app()
30 |
31 | # nice获取手机GPS权限
32 | self.tester.find_element_by_id_and_tap('android:id/button1')
33 |
34 | # nice获取手机识别码权限
35 | time.sleep(1)
36 |
37 | element = self.tester.find_element_by_id('android:id/button1',20)
38 | if element != None:
39 | self.action.tap(element).perform()
40 |
41 | except Exception, e:
42 | traceback.print_exc()
43 | DriverManager.quit_driver(self.tester.device.deviceid)
44 |
45 | def login_success_process(self):
46 | try:
47 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
48 |
49 | #联系人权限
50 | self.tester.find_element_by_id_and_tap('android:id/button1')
51 |
52 | except Exception, e:
53 | traceback.print_exc()
54 | DriverManager.quit_driver(self.tester.device.deviceid)
55 |
56 | def get_permission_process(self):
57 | try:
58 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
59 |
60 | #打开取景窗
61 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
62 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
63 |
64 | #录音权限
65 | self.tester.find_element_by_id_and_tap('android:id/button1')
66 |
67 | # 视频权限
68 | self.tester.find_element_by_id_and_tap('android:id/button1')
69 |
70 | #关闭取景框
71 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
72 |
73 | except Exception, e:
74 | traceback.print_exc()
75 | DriverManager.quit_driver(self.tester.device.deviceid)
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/prepro/Nexus6PreProcess.py:
--------------------------------------------------------------------------------
1 | #coding=utf-8
2 | from BaseDevicePreProcess import *
3 |
4 |
5 | class Nexus6PreProcess(BaseDevicePreProcess):
6 |
7 | def __init__(self, tester):
8 | super(Nexus6PreProcess, self).__init__(tester)
9 |
10 | def install_process(self):
11 | try:
12 | Log.logger.info(u"设备:%s 启动app" % self.tester.device.devicename)
13 |
14 | while self.driver.is_app_installed("com.nice.main") == False:
15 | time.sleep(2)
16 |
17 | self.driver.launch_app()
18 | except Exception, e:
19 | traceback.print_exc()
20 | DriverManager.quit_driver(self.tester.device.deviceid)
21 |
22 | def login_success_process(self):
23 | try:
24 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
25 |
26 | # 第一次登陆需要三个授权:位置信息,访问照片和文件,拨打电话和管理通话
27 | for i in range(0, 3):
28 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
29 | time.sleep(1)
30 |
31 | # nice的授权通讯录弹窗
32 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok') #无法点击控件
33 | time.sleep(2)
34 | self.tester.tap_screen(700, 1660)
35 |
36 | # 系统的授权弹窗
37 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
38 |
39 | except Exception, e:
40 | traceback.print_exc()
41 | DriverManager.quit_driver(self.tester.device.deviceid)
42 |
43 | def get_permission_process(self):
44 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
45 | try:
46 |
47 | #self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
48 |
49 | #打开取景框
50 | time.sleep(10)
51 | self.tester.tap_screen(745, 2300)
52 |
53 | # 拍照和录制视频权限
54 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
55 |
56 | # 录制音频权限
57 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
58 |
59 | # 切换到拍摄页面
60 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
61 |
62 | # 退出取景框,回到发现页面
63 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
64 |
65 | time.sleep(10)
66 | if self.tester.is_element_exist(u'你关注人的故事和直播'):
67 | # 处理语言问题
68 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnTabProfile')
69 | while self.tester.is_element_exist('com.nice.main:id/layout_profile_setting') == False:
70 | self.tester.swipe_down()
71 | self.tester.find_element_by_id_and_tap('com.nice.main:id/layout_profile_setting')
72 | self.tester.find_element_by_id_and_tap('com.nice.main:id/layout_setting_common')
73 | self.tester.find_element_by_id_and_tap('com.nice.main:id/layout_setting_language')
74 | time.sleep(3)
75 |
76 | # 简体中文语言
77 | if self.tester.is_element_exist(u'简体中文'):
78 | self.tester.back_to_feed()
79 | else:
80 | self.tester.find_element_by_id_and_tap('com.nice.main:id/layout_setting_language')
81 | time.sleep(2)
82 | self.tester.find_element_by_xpath_and_tap('//android.widget.TextView[2]')
83 | self.tester.back_to_feed()
84 | else:
85 | print 'nexus6目前是简体中文'
86 |
87 | except Exception, e:
88 | traceback.print_exc()
89 | DriverManager.quit_driver(self.tester.device.deviceid)
90 |
91 |
--------------------------------------------------------------------------------
/prepro/ONEPlusXPreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class ONEPlusXPreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(ONEPlusXPreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 | except Exception, e:
21 | traceback.print_exc()
22 | DriverManager.quit_driver(self.tester.device.deviceid)
23 |
24 | def login_success_process(self):
25 | pass
26 |
27 | def get_permission_process(self):
28 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
29 | try:
30 | #打开取景框
31 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
32 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
33 |
34 | # 退出取景框,回到发现页面
35 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
36 | except Exception, e:
37 | traceback.print_exc()
38 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/OPPOA33PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class OPPOA33PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(OPPOA33PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
21 | self.tester.find_element_by_id_and_tap('android:id/button1')
22 |
23 | except Exception, e:
24 | traceback.print_exc()
25 | DriverManager.quit_driver(self.tester.device.deviceid)
26 |
27 | def login_success_process(self):
28 | try:
29 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
30 | self.tester.find_element_by_id_and_tap('android:id/button1')
31 |
32 | except Exception, e:
33 | traceback.print_exc()
34 | DriverManager.quit_driver(self.tester.device.deviceid)
35 |
36 | def get_permission_process(self):
37 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
38 | try:
39 | #打开取景框
40 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
41 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
42 |
43 | # 摄像头权限
44 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
45 | self.tester.find_element_by_id_and_tap('android:id/button1')
46 |
47 | # 录音权限
48 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
49 | self.tester.find_element_by_id_and_tap('android:id/button1')
50 |
51 | #退出取景框,回到发现页面
52 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
53 |
54 | except Exception, e:
55 | traceback.print_exc()
56 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/OPPOA37PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from OPPOR9PreProcess import *
5 |
6 | #处理过程跟OPPOR9一样,所以直接继承OPPOR9处理类
7 | class OPPOA37PreProcess (OPPOR9PreProcess):
8 |
9 | def __init__(self,tester):
10 | super(OPPOA37PreProcess, self).__init__(tester)
11 |
12 |
--------------------------------------------------------------------------------
/prepro/OPPOA59PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class OPPOA59PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(OPPOA59PreProcess, self).__init__(tester)
10 |
11 | def install_app(self):
12 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
13 | subprocess.call(cmd,shell=True)
14 |
15 | def install_process(self):
16 | Log.logger.info(u"设备:%s 处理安装中各种弹窗" % self.tester.device.devicename)
17 | try:
18 | time.sleep(5)
19 | if self.tester.is_element_exist(u'静默安装拦截',10):
20 | self.tester.find_element_by_id_and_tap('com.kingroot.kinguser:id/checkbox_remember')
21 | self.tester.find_element_by_id_and_tap('com.kingroot.kinguser:id/button_right')
22 |
23 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/btn_allow_once',60)
24 | except TimeoutException,e:
25 | traceback.print_exc()
26 | finally:
27 | try:
28 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/bottom_button_two')
29 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/bottom_button_two')
30 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
31 | self.tester.find_element_by_id_and_tap('android:id/button1')
32 | except Exception, e:
33 | traceback.print_exc()
34 | DriverManager.quit_driver(self.tester.device.deviceid)
35 |
36 | def login_success_process(self):
37 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
38 | try:
39 | self.tester.find_element_by_id_and_tap('android:id/button1')
40 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_cancel')
41 | except Exception, e:
42 | traceback.print_exc()
43 | DriverManager.quit_driver(self.tester.device.deviceid)
44 |
45 | def get_permission_process(self):
46 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
47 | try:
48 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
49 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
50 |
51 | #摄像机权限
52 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
53 | self.tester.find_element_by_id_and_tap('android:id/button1')
54 |
55 | #录音权限
56 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
57 | self.tester.find_element_by_id_and_tap('android:id/button1')
58 |
59 | #关闭取景框
60 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
61 |
62 | except Exception, e:
63 | traceback.print_exc()
64 | DriverManager.quit_driver(self.tester.device.deviceid)
65 |
--------------------------------------------------------------------------------
/prepro/OPPON5207PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class OPPON5207PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(OPPON5207PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
21 | self.tester.find_element_by_id_and_tap('android:id/button1')
22 |
23 | except Exception, e:
24 | traceback.print_exc()
25 | DriverManager.quit_driver(self.tester.device.deviceid)
26 |
27 | def login_success_process(self):
28 | try:
29 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
30 | self.tester.find_element_by_id_and_tap('android:id/button1')
31 |
32 | except Exception, e:
33 | traceback.print_exc()
34 | DriverManager.quit_driver(self.tester.device.deviceid)
35 |
36 | def get_permission_process(self):
37 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
38 | try:
39 | #打开取景框
40 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
41 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
42 |
43 | # 摄像头权限
44 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
45 | self.tester.find_element_by_id_and_tap('android:id/button1')
46 |
47 | # 录音权限
48 | element = self.tester.find_element_by_id("oppo:id/remember_cb")
49 | if element != None:
50 | self.action.tap(element).perform()
51 | self.tester.find_element_by_id_and_tap('android:id/button1')
52 |
53 | #退出取景框,回到发现页面
54 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
55 |
56 | except Exception, e:
57 | traceback.print_exc()
58 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/OPPOR7sPreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class OPPOR7sPreProcess(BaseDevicePreProcess):
7 |
8 | def __init__(self, tester):
9 | super(OPPOR7sPreProcess, self).__init__(tester)
10 |
11 | # 无法获取空间信息,使用坐标点击
12 | def install_process(self):
13 | Log.logger.info(u"设备:%s 处理安装中各种弹窗" % self.tester.device.devicename)
14 |
15 | try:
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 | self.driver.launch_app()
19 | # 点击弹窗不再提醒GPS允许
20 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
21 | time.sleep(2)
22 | # 点击GPS允许
23 | self.tester.find_element_by_id_and_tap('android:id/button1')
24 | except TimeoutException, e:
25 | traceback.print_exc()
26 | DriverManager.quit_driver(self.tester.device.deviceid)
27 |
28 | def login_success_process(self):
29 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
30 | try:
31 | self.tester.find_element_by_id_and_tap('android:id/button1')
32 | except Exception, e:
33 | traceback.print_exc()
34 | DriverManager.quit_driver(self.tester.device.deviceid)
35 |
36 | def get_permission_process(self):
37 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
38 | try:
39 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
40 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
41 |
42 | #摄像机权限
43 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
44 | self.tester.find_element_by_id_and_tap('android:id/button1')
45 |
46 | #录音权限
47 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
48 | self.tester.find_element_by_id_and_tap('android:id/button1')
49 |
50 | #关闭取景框
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
52 |
53 | except Exception, e:
54 | traceback.print_exc()
55 | DriverManager.quit_driver(self.tester.device.deviceid)
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/prepro/OPPOR8700PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class OPPOR8700PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(OPPOR8700PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | while self.driver.is_app_installed("com.nice.main") == False:
17 | time.sleep(2)
18 |
19 | self.driver.launch_app()
20 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
21 | self.tester.find_element_by_id_and_tap('android:id/button1')
22 |
23 | except Exception, e:
24 | traceback.print_exc()
25 | DriverManager.quit_driver(self.tester.device.deviceid)
26 |
27 | def login_success_process(self):
28 | try:
29 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
30 | try:
31 | self.tester.find_element_by_id_and_tap('android:id/button1')
32 | except:
33 | print 'err'
34 | except Exception, e:
35 | traceback.print_exc()
36 | DriverManager.quit_driver(self.tester.device.deviceid)
37 |
38 | def get_permission_process(self):
39 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
40 | try:
41 | #打开取景框
42 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
43 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
44 |
45 | # 摄像头权限
46 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
47 | self.tester.find_element_by_id_and_tap('android:id/button1')
48 |
49 | # 录音权限
50 | # 录音权限
51 | element = self.tester.find_element_by_id("oppo:id/remember_cb")
52 | if element != None:
53 | self.action.tap(element).perform()
54 | self.tester.find_element_by_id_and_tap('android:id/button1')
55 |
56 | #退出取景框,回到发现页面
57 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
58 |
59 | except Exception, e:
60 | traceback.print_exc()
61 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/OPPOR9PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class OPPOR9PreProcess(BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(OPPOR9PreProcess, self).__init__(tester)
10 |
11 | def install_process(self):
12 | Log.logger.info(u"设备:%s 处理安装中各种弹窗" % self.tester.device.devicename)
13 | try:
14 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/btn_allow_once',60)
15 | except TimeoutException,e:
16 | traceback.print_exc()
17 | finally:
18 | try:
19 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/bottom_button_two')
20 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/bottom_button_two')
21 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
22 | self.tester.find_element_by_id_and_tap('android:id/button1')
23 | except Exception, e:
24 | traceback.print_exc()
25 | DriverManager.quit_driver(self.tester.device.deviceid)
26 |
27 | def login_success_process(self):
28 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
29 | try:
30 | self.tester.find_element_by_id_and_tap('android:id/button1')
31 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_cancel')
32 | except Exception, e:
33 | traceback.print_exc()
34 | DriverManager.quit_driver(self.tester.device.deviceid)
35 |
36 | def get_permission_process(self):
37 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
38 | try:
39 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
40 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
41 |
42 | #摄像机权限
43 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
44 | self.tester.find_element_by_id_and_tap('android:id/button1')
45 |
46 | #录音权限
47 | self.tester.find_element_by_id_and_tap('oppo:id/remember_cb')
48 | self.tester.find_element_by_id_and_tap('android:id/button1')
49 |
50 | #关闭取景框
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
52 |
53 | except Exception, e:
54 | traceback.print_exc()
55 | DriverManager.quit_driver(self.tester.device.deviceid)
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/prepro/RedMi1sPreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class RedMi1sPreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(RedMi1sPreProcess, self).__init__(tester)
10 |
11 | def install_process(self):
12 | try:
13 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
14 |
15 | element = self.tester.find_element_by_id("com.kingroot.kinguser:id/checkbox_remember",20)
16 | if element != None:
17 | self.action.tap(element).perform()
18 | self.tester.find_element_by_id_and_tap('com.kingroot.kinguser:id/button_right')
19 |
20 |
21 | element = self.tester.find_element_by_id("com.android.packageinstaller:id/ok_button",60)
22 | if element != None:
23 | self.action.tap(element).perform()
24 |
25 | while self.driver.is_app_installed("com.nice.main") == False:
26 | time.sleep(2)
27 |
28 | self.driver.launch_app()
29 |
30 | except Exception, e:
31 | traceback.print_exc()
32 | DriverManager.quit_driver(self.tester.device.deviceid)
33 |
34 | def login_success_process(self):
35 | try:
36 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
37 | # #联系人权限
38 | # self.tester.find_element_by_id_and_tap('com.lbe.security.miui:id/accept')
39 | except Exception,e:
40 | traceback.print_exc()
41 | DriverManager.quit_driver(self.tester.device.deviceid)
42 |
43 | def get_permission_process(self):
44 | try:
45 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
46 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
47 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
48 |
49 | # #录音权限
50 | # self.tester.find_element_by_id_and_tap('com.lbe.security.miui:id/accept')
51 |
52 | #关闭取景框
53 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
54 |
55 | except Exception, e:
56 | traceback.print_exc()
57 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/RedMi2APreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class RedMi2APreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(RedMi2APreProcess, self).__init__(tester)
10 |
11 | def install_app(self):
12 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid, DataProvider.niceapk)
13 | subprocess.call(cmd, shell=True)
14 |
15 | def install_process(self):
16 | try:
17 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
18 |
19 | time.sleep(5)
20 | self.tester.find_element_by_id_and_tap('com.miui.securitycenter:id/do_not_ask_checkbox')
21 | self.tester.find_element_by_id_and_tap('android:id/button2')
22 |
23 | while self.driver.is_app_installed("com.nice.main") == False:
24 | time.sleep(2)
25 |
26 | self.driver.launch_app()
27 |
28 | except Exception, e:
29 | traceback.print_exc()
30 | DriverManager.quit_driver(self.tester.device.deviceid)
31 |
32 | def login_success_process(self):
33 | try:
34 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
35 | # #联系人权限
36 | self.tester.find_element_by_id_and_tap('android:id/button1')
37 | except Exception,e:
38 | traceback.print_exc()
39 | DriverManager.quit_driver(self.tester.device.deviceid)
40 |
41 | def get_permission_process(self):
42 | try:
43 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
44 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
45 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
46 |
47 | #录音权限
48 | self.tester.find_element_by_id_and_tap('android:id/button1')
49 |
50 | #关闭取景框
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
52 |
53 | except Exception, e:
54 | traceback.print_exc()
55 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/RedMiNote2PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class RedMiNote2PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(RedMiNote2PreProcess, self).__init__(tester)
10 |
11 | def install_process(self):
12 | try:
13 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
14 |
15 | while self.driver.is_app_installed("com.nice.main") == False:
16 | time.sleep(2)
17 | self.driver.launch_app()
18 |
19 | except Exception, e:
20 | traceback.print_exc()
21 | DriverManager.quit_driver(self.tester.device.deviceid)
22 |
23 | def login_success_process(self):
24 | try:
25 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
26 | #联系人权限
27 | self.tester.find_element_by_id_and_tap('com.lbe.security.miui:id/accept')
28 | except Exception,e:
29 | traceback.print_exc()
30 | DriverManager.quit_driver(self.tester.device.deviceid)
31 |
32 | def get_permission_process(self):
33 | try:
34 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
35 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
36 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
37 |
38 | #录音权限
39 | self.tester.find_element_by_id_and_tap('com.lbe.security.miui:id/accept')
40 |
41 | #关闭取景框
42 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
43 |
44 | except Exception, e:
45 | traceback.print_exc()
46 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/RedMiNote3PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from RedMiNote2PreProcess import *
5 |
6 | #处理过程跟红米note2一样
7 | class RedMiNote3PreProcess (RedMiNote2PreProcess):
8 |
9 | def __init__(self,tester):
10 | super(RedMiNote3PreProcess, self).__init__(tester)
11 |
12 |
--------------------------------------------------------------------------------
/prepro/RedMiNote4PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class RedMiNote4PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(RedMiNote4PreProcess, self).__init__(tester)
10 |
11 | def install_app(self):
12 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid, DataProvider.niceapk)
13 | subprocess.call(cmd,shell=True)
14 |
15 | def install_process(self):
16 | try:
17 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
18 |
19 | self.tester.find_element_by_id_and_tap('com.miui.securitycenter:id/do_not_ask_checkbox')
20 | self.tester.find_element_by_id_and_tap('android:id/button2')
21 |
22 | while self.driver.is_app_installed("com.nice.main") == False:
23 | time.sleep(2)
24 | self.driver.launch_app()
25 |
26 | except Exception, e:
27 | traceback.print_exc()
28 | DriverManager.quit_driver(self.tester.device.deviceid)
29 |
30 | def login_success_process(self):
31 | try:
32 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
33 |
34 | for i in range(0, 3):
35 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
36 | time.sleep(1)
37 |
38 | # nice的授权通讯录弹窗
39 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok') #无法点击控件
40 | time.sleep(2)
41 | # self.tester.tap_screen(555, 1360)
42 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok')
43 |
44 | # 系统的授权弹窗
45 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
46 |
47 | except Exception,e:
48 | traceback.print_exc()
49 | DriverManager.quit_driver(self.tester.device.deviceid)
50 |
51 | def get_permission_process(self):
52 | try:
53 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
54 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
55 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
56 |
57 | #录音权限
58 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
59 | time.sleep(1)
60 | #视频权限
61 | self.tester.find_element_by_id_and_tap('com.android.packageinstaller:id/permission_allow_button')
62 |
63 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
64 | #关闭取景框
65 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
66 |
67 | except Exception, e:
68 | traceback.print_exc()
69 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/Smartisan1PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 | import subprocess
6 | from common.DataProvider import *
7 |
8 | class Smartosan1PreProcess (BaseDevicePreProcess):
9 |
10 | def __init__(self,tester):
11 | super(Smartosan1PreProcess, self).__init__(tester)
12 |
13 | #魅族情况太特殊,安装都得继承然后单独处理,弹出的adb安装权限直接阻塞了Server运行
14 | def install_app(self):
15 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
16 | subprocess.call(cmd,shell=True)
17 |
18 |
19 | def install_process(self):
20 | try:
21 | Log.logger.info(u"设备:%s 安装app并处理GPS弹窗" % self.tester.device.devicename)
22 |
23 | #adb安装权限
24 | self.tester.find_element_by_id_and_tap('android:id/button1')
25 |
26 | #启动app
27 | while self.driver.is_app_installed("com.nice.main") == False:
28 | time.sleep(2)
29 | self.driver.launch_app()
30 |
31 | # #获取位置信息
32 | # time.sleep(5)
33 | # self.tester.find_element_by_id_and_tap('android:id/button1')
34 |
35 | except Exception, e:
36 | traceback.print_exc()
37 | DriverManager.quit_driver(self.tester.device.deviceid)
38 | # 该流程包括点击login按钮到达登录页面,并登录
39 |
40 | def login_process(self):
41 | Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
42 | try:
43 | # 新老注册流程的登录按钮使用的是同一个resource_id,对登录按钮不用做特殊判断
44 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
45 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
46 | self.tester.find_element_by_id_and_tap('com.nice.main:id/password')
47 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
48 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
49 |
50 | time.sleep(1)
51 | self.tester.screenshot(u"登录成功")
52 | except Exception, e:
53 | raise
54 | def login_success_process(self):
55 | try:
56 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
57 |
58 | element = self.tester.find_element_by_id("android:id/button1")
59 | if element != None:
60 | self.action.tap(element).perform()
61 |
62 | except Exception, e:
63 | traceback.print_exc()
64 | DriverManager.quit_driver(self.tester.device.deviceid)
65 |
66 | def get_permission_process(self):
67 | try:
68 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
69 |
70 | #打开取景窗
71 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
72 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
73 |
74 | time.sleep(3)
75 | # 权限
76 | self.tester.find_element_by_id_and_tap('android:id/button1')
77 |
78 | # 权限
79 | self.tester.find_element_by_id_and_tap('android:id/button1')
80 |
81 | #关闭取景框
82 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
83 |
84 | except Exception, e:
85 | traceback.print_exc()
86 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/Smartisan705PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | #!usr/bin/python
5 | # -*- coding:utf-8 -*-
6 |
7 | from BaseDevicePreProcess import *
8 |
9 | class Smartisan705Process (BaseDevicePreProcess):
10 |
11 | def __init__(self,tester):
12 | super(Smartisan705Process, self).__init__(tester)
13 |
14 |
15 | def install_process(self):
16 | try:
17 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
18 |
19 | while self.driver.is_app_installed("com.nice.main") == False:
20 | time.sleep(2)
21 |
22 | self.driver.launch_app()
23 | except Exception, e:
24 | traceback.print_exc()
25 | DriverManager.quit_driver(self.tester.device.deviceid)
26 |
27 | def login_success_process(self):
28 | try:
29 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
30 |
31 | except Exception, e:
32 | traceback.print_exc()
33 | DriverManager.quit_driver(self.tester.device.deviceid)
34 |
35 | def get_permission_process(self):
36 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
37 | try:
38 | #打开取景框
39 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
40 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
41 |
42 | time.sleep(3)
43 | # 权限
44 | self.tester.find_element_by_id_and_tap('android:id/button1')
45 |
46 | # 权限
47 | self.tester.find_element_by_id_and_tap('android:id/button1')
48 |
49 | # 退出取景框,回到发现页面
50 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
51 | except Exception, e:
52 | traceback.print_exc()
53 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/SumSing9152PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class SumSing9152PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(SumSing9152PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 | while self.driver.is_app_installed("com.nice.main") == False:
16 | time.sleep(2)
17 |
18 | self.driver.launch_app()
19 |
20 |
21 | #self.tester.find_element_by_uiautomator_and_tap(u'new UiSelector().textContains(\"允许\").fromParent(new UiSelector().className(\"android.widget.Button\"))')
22 |
23 | except Exception, e:
24 | traceback.print_exc()
25 | DriverManager.quit_driver(self.tester.device.deviceid)
26 |
27 | def login_success_process(self):
28 | try:
29 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
30 |
31 | # self.tester.find_element_by_uiautomator_and_tap(
32 | # u'new UiSelector().textContains(\"允许\").fromParent(new UiSelector().className(\"android.widget.Button\"))')
33 |
34 | except Exception, e:
35 | traceback.print_exc()
36 | DriverManager.quit_driver(self.tester.device.deviceid)
37 |
38 | def get_permission_process(self):
39 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
40 | try:
41 | # 打开取景框
42 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
43 |
44 | # 切换到拍摄tab
45 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
46 |
47 | self.tester.press_keycode(4)
48 |
49 | time.sleep(1)
50 | except Exception, e:
51 | traceback.print_exc()
52 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/SumSingNote3PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class SumSingNote3PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(SumSingNote3PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 | while self.driver.is_app_installed("com.nice.main") == False:
16 | time.sleep(2)
17 |
18 | #点击确认应用程序许可按钮
19 | self.tester.find_element_by_id_and_tap('com.android.settings:id/button')
20 |
21 | self.driver.launch_app()
22 |
23 | except Exception, e:
24 | traceback.print_exc()
25 | DriverManager.quit_driver(self.tester.device.deviceid)
26 |
27 | def login_success_process(self):
28 | try:
29 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
30 |
31 | except Exception, e:
32 | traceback.print_exc()
33 | DriverManager.quit_driver(self.tester.device.deviceid)
34 |
35 | def get_permission_process(self):
36 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
37 | try:
38 | #打开取景框
39 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
40 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
41 |
42 | # 退出取景框,回到发现页面
43 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
44 | except Exception, e:
45 | traceback.print_exc()
46 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/SumSingNote4PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from SumSingNote3PreProcess import *
5 |
6 | #处理过程跟三星note3一样,所以直接继承三星note3处理类
7 | class SumSingNote4PreProcess (SumSingNote3PreProcess):
8 |
9 | def __init__(self,tester):
10 | super(SumSingNote4PreProcess, self).__init__(tester)
11 |
12 | def login_process(self):
13 | Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
14 | try:
15 | # 新老注册流程的登录按钮使用的是同一个resource_id,对登录按钮不用做特殊判断
16 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
17 |
18 | time.sleep(3)
19 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
20 |
21 | time.sleep(3)
22 | self.tester.find_element_by_id_and_tap('com.nice.main:id/password')
23 | self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
24 | time.sleep(3)
25 | self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
26 |
27 | while self.tester.is_element_exist(u'手机号位数不对'):
28 | self.tester.find_element_by_id('com.nice.main:id/phone_number')
29 |
30 | except Exception,e:
31 | raise
--------------------------------------------------------------------------------
/prepro/SumSingS4PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from BaseDevicePreProcess import *
5 |
6 | class SumSingS4PreProcess (BaseDevicePreProcess):
7 |
8 | def __init__(self,tester):
9 | super(SumSingS4PreProcess, self).__init__(tester)
10 |
11 |
12 | def install_process(self):
13 | try:
14 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
15 |
16 | time.sleep(5)
17 | if self.tester.is_element_exist(u'静默安装拦截', 10):
18 | self.tester.find_element_by_id_and_tap('com.kingroot.kinguser:id/checkbox_remember')
19 | self.tester.find_element_by_id_and_tap('com.kingroot.kinguser:id/button_right')
20 |
21 | while self.driver.is_app_installed("com.nice.main") == False:
22 | time.sleep(2)
23 |
24 | #点击确认应用程序许可按钮
25 | self.tester.find_element_by_id_and_tap('com.android.settings:id/button')
26 |
27 | self.driver.launch_app()
28 |
29 | except Exception, e:
30 | traceback.print_exc()
31 | DriverManager.quit_driver(self.tester.device.deviceid)
32 |
33 | def login_success_process(self):
34 | try:
35 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
36 |
37 | except Exception, e:
38 | traceback.print_exc()
39 | DriverManager.quit_driver(self.tester.device.deviceid)
40 |
41 | def get_permission_process(self):
42 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
43 | try:
44 | #打开取景框
45 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
46 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
47 |
48 | # 退出取景框,回到发现页面
49 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
50 | except Exception, e:
51 | traceback.print_exc()
52 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/VIVOV3MAXPreProecss.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | import subprocess
4 |
5 | from BaseDevicePreProcess import *
6 |
7 | class VIVOV3MAXPreProcess(BaseDevicePreProcess):
8 |
9 | def __init__(self,tester):
10 | super(VIVOV3MAXPreProcess, self).__init__(tester)
11 |
12 | def install_app(self):
13 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid, DataProvider.niceapk)
14 | subprocess.call(cmd, shell=True)
15 | time.sleep(3)
16 |
17 |
18 | def install_process(self):
19 | try:
20 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
21 |
22 | # self.tester.find_element_by_uiautomator_and_tap("android:id/button1")
23 | time.sleep(7)
24 | self.tester.tap_screen(340, 1215)
25 |
26 | # self.tester.find_element_by_uiautomator_and_tap("vivo:id/vivo_adb_install_ok_button")
27 | time.sleep(7)
28 | self.tester.tap_screen(303, 1846)
29 |
30 | while self.driver.is_app_installed("com.nice.main") == False:
31 | time.sleep(2)
32 |
33 | self.driver.launch_app()
34 |
35 |
36 | #GPS权限
37 | # self.tester.find_element_by_uiautomator_and_tap("android:id/button1")
38 | time.sleep(7)
39 | self.tester.tap_screen(324, 1240)
40 |
41 | except Exception, e:
42 | traceback.print_exc()
43 | DriverManager.quit_driver(self.tester.device.deviceid)
44 |
45 | def login_success_process(self):
46 | try:
47 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
48 | #联系人权限
49 | time.sleep(7)
50 | self.tester.tap_screen(320, 1244)
51 |
52 | self.tester.find_element_by_id_and_tap('android:id/button1')
53 |
54 | except Exception,e:
55 | traceback.print_exc()
56 | DriverManager.quit_driver(self.tester.device.deviceid)
57 |
58 | def get_permission_process(self):
59 | try:
60 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
61 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
62 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
63 |
64 | #相机权限
65 | self.tester.find_element_by_uiautomator_and_tap("android:id/button1")
66 |
67 | #录音权限
68 | self.tester.find_element_by_uiautomator_and_tap("android:id/button1")
69 |
70 | #关闭取景框
71 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
72 |
73 | except Exception, e:
74 | traceback.print_exc()
75 | DriverManager.quit_driver(self.tester.device.deviceid)
--------------------------------------------------------------------------------
/prepro/VIVOX5ProPreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | import subprocess
4 |
5 | from BaseDevicePreProcess import *
6 |
7 | class VIVOX5ProPreProcess(BaseDevicePreProcess):
8 |
9 | def __init__(self, tester):
10 | super(VIVOX5ProPreProcess, self).__init__(tester)
11 |
12 | def install_app(self):
13 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid, DataProvider.niceapk)
14 | subprocess.call(cmd, shell=True)
15 | time.sleep(3)
16 |
17 | def install_process(self):
18 | Log.logger.info(u"设备:%s 处理安装中各种弹窗" % self.tester.device.devicename)
19 |
20 | try:
21 | # 点击安装时adb授权提示
22 | self.tester.find_element_by_id_and_tap('vivo:id/vivo_adb_install_ok_button')
23 |
24 | while self.driver.is_app_installed("com.nice.main") == False:
25 | time.sleep(2)
26 |
27 | # 启动APP
28 | self.driver.launch_app()
29 |
30 | # GPS权限
31 | # self.tester.find_element_by_uiautomator_and_tap("android:id/button1") #奇怪的弹窗,无法正常点击,用坐标代替
32 | time.sleep(3)
33 | self.tester.tap_screen(287, 1250)
34 |
35 | except Exception, e:
36 | traceback.print_exc()
37 | DriverManager.quit_driver(self.tester.device.deviceid)
38 |
39 | def login_success_process(self):
40 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
41 | try:
42 | self.tester.find_element_by_id_and_tap('android:id/button1')
43 | except Exception, e:
44 | traceback.print_exc()
45 | DriverManager.quit_driver(self.tester.device.deviceid)
46 |
47 | def get_permission_process(self):
48 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
49 | try:
50 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
51 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
52 |
53 | #摄像机权限
54 | self.tester.find_element_by_id_and_tap('android:id/button1')
55 |
56 | #录音权限
57 | self.tester.find_element_by_id_and_tap('android:id/button1')
58 |
59 | #关闭取景框
60 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
61 |
62 | except Exception, e:
63 | traceback.print_exc()
64 | DriverManager.quit_driver(self.tester.device.deviceid)
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/prepro/VivoX7PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 | import subprocess
4 |
5 | from BaseDevicePreProcess import *
6 |
7 | class VivoX7ProPreProcess(BaseDevicePreProcess):
8 |
9 | def __init__(self, tester):
10 | super(VivoX7ProPreProcess, self).__init__(tester)
11 |
12 | def install_app(self):
13 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid, DataProvider.niceapk)
14 | subprocess.call(cmd, shell=True)
15 | time.sleep(3)
16 |
17 | def install_process(self):
18 | Log.logger.info(u"设备:%s 处理安装中各种弹窗" % self.tester.device.devicename)
19 |
20 | try:
21 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
22 | time.sleep(7)
23 | self.tester.tap_screen(306, 1228)
24 |
25 | time.sleep(7)
26 | self.tester.tap_screen(260, 1855)
27 |
28 | while self.driver.is_app_installed("com.nice.main") == False:
29 | time.sleep(2)
30 |
31 | # 启动APP
32 | self.driver.launch_app()
33 |
34 | # GPS权限
35 | time.sleep(7)
36 | self.tester.tap_screen(284, 1290)
37 |
38 | except Exception, e:
39 | traceback.print_exc()
40 | DriverManager.quit_driver(self.tester.device.deviceid)
41 |
42 | # 该流程包括点击login按钮到达登录页面,并登录
43 |
44 | def login_success_process(self):
45 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
46 | try:
47 | # 联系人权限
48 | time.sleep(7)
49 | self.tester.tap_screen(316, 1315)
50 |
51 | except Exception, e:
52 | traceback.print_exc()
53 | DriverManager.quit_driver(self.tester.device.deviceid)
54 |
55 | def get_permission_process(self):
56 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
57 | try:
58 | # 打开取景框
59 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
60 |
61 | # 切换到拍摄tab
62 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
63 |
64 | #摄像机权限
65 | self.tester.find_element_by_id_and_tap('android:id/button1')
66 |
67 | #录音权限
68 | self.tester.find_element_by_id_and_tap('android:id/button1')
69 |
70 | #关闭取景框
71 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
72 |
73 | except Exception, e:
74 | traceback.print_exc()
75 | DriverManager.quit_driver(self.tester.device.deviceid)
76 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/prepro/XIAOMI2PreProcess.py:
--------------------------------------------------------------------------------
1 | #coding=utf-8
2 | from BaseDevicePreProcess import *
3 |
4 |
5 | class XIAOMI2PreProcess (BaseDevicePreProcess):
6 |
7 | def __init__(self,tester):
8 | super(XIAOMI2PreProcess, self).__init__(tester)
9 |
10 | def install_process(self):
11 | try:
12 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
13 |
14 | while self.driver.is_app_installed("com.nice.main") == False:
15 | time.sleep(2)
16 |
17 | self.driver.launch_app()
18 | except Exception, e:
19 | traceback.print_exc()
20 | DriverManager.quit_driver(self.tester.device.deviceid)
21 |
22 | def login_success_process(self):
23 | try:
24 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
25 |
26 |
27 | #授权通讯录弹框
28 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok')
29 |
30 | #授权联系人权限
31 | self.tester.find_element_by_id_and_tap('android:id/button1')
32 |
33 | except Exception, e:
34 | traceback.print_exc()
35 | DriverManager.quit_driver(self.tester.device.deviceid)
36 |
37 | def get_permission_process(self):
38 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
39 | try:
40 | #打开取景框
41 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
42 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
43 |
44 | element = self.tester.find_element_by_id("android:id/button1")
45 | if element != None:
46 | self.action.tap(element).perform()
47 |
48 | element = self.tester.find_element_by_id("android:id/button1",20)
49 | if element != None:
50 | self.action.tap(element).perform()
51 |
52 | # 退出取景框,回到发现页面
53 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
54 |
55 | except Exception, e:
56 | traceback.print_exc()
57 | DriverManager.quit_driver(self.tester.device.deviceid)
58 |
59 |
--------------------------------------------------------------------------------
/prepro/XIAOMI3PreProcess.py:
--------------------------------------------------------------------------------
1 | #coding=utf-8
2 | from BaseDevicePreProcess import *
3 |
4 |
5 | class XIAOMI3PreProcess (BaseDevicePreProcess):
6 |
7 | def __init__(self,tester):
8 | super(XIAOMI3PreProcess, self).__init__(tester)
9 |
10 | def install_process(self):
11 | try:
12 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
13 |
14 | while self.driver.is_app_installed("com.nice.main") == False:
15 | time.sleep(2)
16 |
17 | self.driver.launch_app()
18 | except Exception, e:
19 | traceback.print_exc()
20 | DriverManager.quit_driver(self.tester.device.deviceid)
21 |
22 | # def login_process(self):
23 | # Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
24 | # try:
25 | # # 新老注册流程的登录按钮使用的是同一个resource_id,对登录按钮不用做特殊判断
26 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
27 | #
28 | # while self.tester.is_element_exist('com.nice.main:id/phone_number') == False:
29 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
30 | # time.sleep(2)
31 | #
32 | # self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
33 | # self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
34 | #
35 | # while self.tester.is_element_exist('com.nice.main:id/login'):
36 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
37 | # time.sleep(1)
38 | #
39 | # self.tester.screenshot(u"登录成功")
40 | # except Exception,e:
41 | # raise
42 |
43 | def login_success_process(self):
44 | try:
45 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
46 |
47 |
48 | #授权通讯录弹框
49 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok')
50 |
51 | #授权联系人权限
52 | self.tester.find_element_by_id_and_tap('android:id/button1')
53 |
54 | except Exception, e:
55 | traceback.print_exc()
56 | DriverManager.quit_driver(self.tester.device.deviceid)
57 |
58 | def get_permission_process(self):
59 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
60 | try:
61 | #打开取景框
62 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
63 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
64 |
65 | element = self.tester.find_element_by_id("android:id/button1")
66 | if element != None:
67 | self.action.tap(element).perform()
68 |
69 | element = self.tester.find_element_by_id("android:id/button1",20)
70 | if element != None:
71 | self.action.tap(element).perform()
72 |
73 | # 退出取景框,回到发现页面
74 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
75 |
76 | except Exception, e:
77 | traceback.print_exc()
78 | DriverManager.quit_driver(self.tester.device.deviceid)
79 |
80 |
--------------------------------------------------------------------------------
/prepro/XIAOMI4PreProcess.py:
--------------------------------------------------------------------------------
1 | #coding=utf-8
2 | from BaseDevicePreProcess import *
3 |
4 | class XIAOMI4PreProcess (BaseDevicePreProcess):
5 |
6 | def __init__(self,tester):
7 | super(XIAOMI4PreProcess, self).__init__(tester)
8 |
9 | def install_app(self):
10 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid, DataProvider.niceapk)
11 | subprocess.call(cmd,shell=True)
12 |
13 | def install_process(self):
14 | try:
15 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
16 |
17 | time.sleep(3)
18 | self.tester.find_element_by_id_and_tap('com.miui.securitycenter:id/do_not_ask_checkbox')
19 |
20 | self.tester.find_element_by_id_and_tap('android:id/button2')
21 |
22 | while self.driver.is_app_installed("com.nice.main") == False:
23 | time.sleep(2)
24 |
25 | self.driver.launch_app()
26 |
27 | except Exception, e:
28 | traceback.print_exc()
29 | DriverManager.quit_driver(self.tester.device.deviceid)
30 |
31 | # def login_process(self):
32 | # Log.logger.info(u"设备:%s 开始登录,使用账号:%s" % (self.tester.device.devicename, self.tester.user.mobile))
33 | # try:
34 | #
35 | #
36 | # # self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
37 | # time.sleep(10)
38 | # self.tester.find_element_by_id_and_send_keys('com.nice.main:id/phone_number', self.user.mobile)
39 | # self.tester.find_element_by_id_and_send_keys('com.nice.main:id/password', self.user.password)
40 | # self.tester.find_element_by_id_and_tap('com.nice.main:id/login')
41 | #
42 | # time.sleep(3)
43 | #
44 | # self.tester.longin_with_verifycode()
45 | # self.tester.screenshot(u"登录成功")
46 | # except Exception,e:
47 | # raise
48 | #
49 |
50 | def login_success_process(self):
51 | try:
52 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
53 |
54 | # 授权通讯录弹框
55 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok')
56 |
57 | #授权联系人权限
58 | self.tester.find_element_by_id_and_tap('android:id/button1')
59 |
60 | time.sleep(5)
61 | if self.tester.is_element_exist('com.nice.main:id/btn_know'):
62 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_know')
63 |
64 | except Exception, e:
65 | traceback.print_exc()
66 | DriverManager.quit_driver(self.tester.device.deviceid)
67 |
68 | def get_permission_process(self):
69 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
70 | try:
71 | #打开取景框
72 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
73 |
74 |
75 | # 摄像头权限
76 | self.tester.find_element_by_id_and_tap('android:id/button1')
77 |
78 | # 录音权限
79 | self.tester.find_element_by_id_and_tap('android:id/button1')
80 |
81 | self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
82 |
83 | # 退出取景框,回到发现页面
84 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_return')
85 | except Exception, e:
86 | traceback.print_exc()
87 | DriverManager.quit_driver(self.tester.device.deviceid)
88 |
89 |
--------------------------------------------------------------------------------
/prepro/XIAOMI5PreProcess.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from XIAOMINOTEPreProcess import *
5 |
6 |
7 | class XIAOMI5PreProcess (XIAOMINOTEPreProcess):
8 |
9 | def __init__(self,tester):
10 | super(XIAOMI5PreProcess, self).__init__(tester)
11 |
--------------------------------------------------------------------------------
/prepro/XIAOMINOTEPreProcess.py:
--------------------------------------------------------------------------------
1 | #coding=utf-8
2 | from BaseDevicePreProcess import *
3 |
4 |
5 | class XIAOMINOTEPreProcess (BaseDevicePreProcess):
6 |
7 | def __init__(self,tester):
8 | super(XIAOMINOTEPreProcess, self).__init__(tester)
9 |
10 | def install_app(self):
11 | cmd = "adb -s %s install -r %s" % (self.tester.device.deviceid,DataProvider.niceapk)
12 | subprocess.call(cmd,shell=True)
13 |
14 |
15 | # if self.tester.is_element_exist('android:id/button2',5):
16 | # self.tester.find_element_by_id_and_tap('android:id/button2')
17 | # else:
18 | # pass
19 |
20 | def install_process(self):
21 | Log.logger.info(u"设备:%s 启动app并处理GPS弹窗" % self.tester.device.devicename)
22 |
23 | self.tester.find_element_by_id_and_tap('android:id/button2')
24 | try:
25 |
26 | while self.driver.is_app_installed("com.nice.main") == False:
27 | time.sleep(2)
28 |
29 | self.driver.launch_app()
30 | #self.tester.find_element_by_id_and_tap('android:id/button2')
31 | except Exception, e:
32 | traceback.print_exc()
33 | DriverManager.quit_driver(self.tester.device.deviceid)
34 |
35 | def login_success_process(self):
36 | try:
37 | Log.logger.info(u"设备:%s 登录成功后,处理各种自动弹窗" % self.tester.device.devicename)
38 |
39 |
40 | #授权通讯录弹框
41 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btn_ok')
42 |
43 | #授权联系人权限
44 | self.tester.find_element_by_id_and_tap('android:id/button1')
45 |
46 | except Exception, e:
47 | traceback.print_exc()
48 | DriverManager.quit_driver(self.tester.device.deviceid)
49 |
50 | def get_permission_process(self):
51 | Log.logger.info(u"设备:%s 获取相机及录音权限" % self.tester.device.devicename)
52 | try:
53 | #打开取景框
54 | self.tester.find_element_by_id_and_tap('com.nice.main:id/btnCamera')
55 | #self.tester.find_element_by_id_and_tap('com.nice.main:id/camera_tv')
56 |
57 | # 摄像头权限
58 | self.tester.find_element_by_id_and_tap('android:id/button1')
59 |
60 | # 录音权限
61 | self.tester.find_element_by_id_and_tap('android:id/button1')
62 |
63 | # 退出取景框,回到发现页面
64 | self.tester.find_element_by_id_and_tap('com.nice.main:id/titlebar_close')
65 | except Exception, e:
66 | traceback.print_exc()
67 | DriverManager.quit_driver(self.tester.device.deviceid)
68 |
69 |
--------------------------------------------------------------------------------
/prepro/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/prepro/__init__.py
--------------------------------------------------------------------------------
/res/README.md:
--------------------------------------------------------------------------------
1 | 发图的测试图片,在预处理中拷贝至设备
--------------------------------------------------------------------------------
/res/autotest/0806EF9802963A8512369373AE9E32EC.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/0806EF9802963A8512369373AE9E32EC.jpg
--------------------------------------------------------------------------------
/res/autotest/098C1191F2E2A94756CD49A75ABE763B.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/098C1191F2E2A94756CD49A75ABE763B.jpg
--------------------------------------------------------------------------------
/res/autotest/4CA22076BFAFA339C697CA0D0E1975B2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/4CA22076BFAFA339C697CA0D0E1975B2.jpg
--------------------------------------------------------------------------------
/res/autotest/5343D94B01E7B43516E8841A87482454.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/5343D94B01E7B43516E8841A87482454.jpg
--------------------------------------------------------------------------------
/res/autotest/5A70EE0CE05BDDCC290C8674C70C62C3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/5A70EE0CE05BDDCC290C8674C70C62C3.jpg
--------------------------------------------------------------------------------
/res/autotest/7F0FFD3206D307DFA463D3E69A4690A2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/7F0FFD3206D307DFA463D3E69A4690A2.jpg
--------------------------------------------------------------------------------
/res/autotest/B1758FB83C0834B7A4F490B1D8A34A12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/B1758FB83C0834B7A4F490B1D8A34A12.jpg
--------------------------------------------------------------------------------
/res/autotest/CEDF4620EAA3DC538A1F9F964B40DE4C.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/CEDF4620EAA3DC538A1F9F964B40DE4C.jpg
--------------------------------------------------------------------------------
/res/autotest/DCDF783DE47BF56CB43153DF81E90B62.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/res/autotest/DCDF783DE47BF56CB43153DF81E90B62.jpg
--------------------------------------------------------------------------------
/run_mode_autotest.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | import requests
5 |
6 | def main():
7 | url = 'http://127.0.0.1:8886/run?mode=autotest'
8 | response = requests.get(url)
9 | resjson = response.json()
10 | print resjson
11 |
12 | if __name__ == '__main__':
13 | main()
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/run_mode_monkey.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | import requests
5 |
6 | def main():
7 | url = 'http://127.0.0.1:8886/run?mode=monkey'
8 | response = requests.get(url)
9 | resjson = response.json()
10 | print resjson
11 |
12 | if __name__ == '__main__':
13 | main()
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/run_server_appium.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from common.DeviceManager import *
5 | from common.Log import *
6 | from common.DataProvider import *
7 | import sys
8 | import os
9 | from Server.ServerManager import ServerManager
10 |
11 | def run():
12 | # 初始化日志配置
13 | Log.create_log_file()
14 |
15 | Log.logger.info(u"加载设备及用户配置信息")
16 | DataProvider.init_data()
17 |
18 | Log.logger.info(u"获得ADB连接的设备")
19 | DeviceManager.get_connect_deviceid()
20 |
21 | if 0 == len(DeviceManager.connectdeviceid):
22 | Log.logger.info(u"没有连接的设备")
23 | sys.exit()
24 | else:
25 | Log.logger.info(u"当前已连接设备数: %s" % len(DeviceManager.connectdeviceid))
26 |
27 | Log.logger.info(u"获得待测试的设备")
28 | DeviceManager.get_test_device()
29 | DeviceManager.get_server_test_device()
30 |
31 | servermanager = ServerManager()
32 | servermanager.list_devices()
33 |
34 | if len(DeviceManager.disconnectdevices) > 0:
35 | Log.logger.info(u"丢失备数: %s" % len(DeviceManager.disconnectdevices))
36 |
37 | servermanager.list_disconnect_devices()
38 | servermanager.start_all_server()
39 |
40 | if __name__ == "__main__":
41 | run()
--------------------------------------------------------------------------------
/run_server_http.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | from common.HttpServerHandler import *
5 | from SocketServer import ThreadingTCPServer
6 | from common.Log import *
7 | from Server.Server import *
8 |
9 | def kill_server(port):
10 | cmd = "lsof -i:%s|awk 'NR==2{print $2}'" % port
11 | pid = os.popen(cmd).read()
12 | cmd = "kill -9 %s" % pid
13 | os.popen(cmd).read()
14 |
15 |
16 | def start_server():
17 | myport = 8886
18 | kill_server(myport)
19 | host = "127.0.0.1"
20 | port = myport
21 | addr = (host, port)
22 | Log.logger.debug('Start Server...')
23 | server = ThreadingTCPServer(addr, HttpServerHandler)
24 | server.serve_forever()
25 |
26 |
27 | def main(args=None):
28 | # 初始化日志配置
29 | Log.create_log_file()
30 |
31 | Log.logger.info(u"加载设备及用户配置信息")
32 | DataProvider.init_data()
33 |
34 | Log.logger.info(u"获得服务器上待测试的设备")
35 | DeviceManager.get_server_test_device()
36 |
37 | if len(DeviceManager.serverdevices) == 0:
38 | Log.logger.info(u"服务器上没有可以测试的设备")
39 | sys.exit()
40 | else:
41 | for deviceid, device in DeviceManager.serverdevices.items():
42 | server = Server(device)
43 | server.list_connect_devices()
44 |
45 | start_server()
46 |
47 | if __name__ == '__main__':
48 | main()
49 |
--------------------------------------------------------------------------------
/stopAll.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import os
3 |
4 | def stopAppium():
5 | r = os.popen("ps -ef | grep appium")
6 | info = r.readlines()
7 | for line in info: # 按行遍历
8 | eachline = line.split()
9 | appium_pid = eachline[1]
10 | action = os.popen("kill " + appium_pid)
11 | print("kill" + appium_pid)
12 |
13 | def kill_server(port):
14 | cmd = "lsof -i:%s|awk 'NR==2{print $2}'" % port
15 | pid = os.popen(cmd).read()
16 | cmd = "kill -9 %s" % pid
17 | os.popen(cmd).read()
18 |
19 | stopAppium()
20 | kill_server(8886)
21 |
22 |
--------------------------------------------------------------------------------
/testcase/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/h080294/appium_python_android/452cc8d17363d8e46f98c59c91a128e7a5c60489/testcase/__init__.py
--------------------------------------------------------------------------------
/testcase/test_just_try.py:
--------------------------------------------------------------------------------
1 | #!usr/bin/python
2 | # -*- coding:utf-8 -*-
3 |
4 | import sys
5 |
6 | from common.ApkBase import ApkInfo
7 | from model.Teststeps import *
8 |
9 | sys.path.append('..')
10 | from common.BaseTestCase import *
11 |
12 |
13 | class test_longpress(BaseTestCase):
14 |
15 | @classmethod
16 | def setUpClass(cls):
17 | pass
18 |
19 | def setUp(self):
20 | pass
21 |
22 | def test_longpress_0(self):
23 | print "美颜"
24 |
25 | def test_longpress_1(self):
26 | time.sleep(5)
27 | self.tester.back_to_feed()
28 | print "返回feed"
29 |
30 | # 主动skip case
31 | def test_longpress_2(self):
32 | time.sleep(1)
33 | self.skipTest("hahha")
34 |
35 | # 主动fail case
36 | def test_longpress_3(self):
37 | time.sleep(1)
38 | self.fail("manual")
39 |
40 | def test_longpress_4(self):
41 | time.sleep(1)
42 | print "End 4 ~~~~~"
43 |
44 | def tearDown(self):
45 | pass
46 |
47 | # 请reset到feed页面
48 | @classmethod
49 | def tearDownClass(cls):
50 | pass
51 |
--------------------------------------------------------------------------------
/testresult/README.md:
--------------------------------------------------------------------------------
1 | 测试结果存放
--------------------------------------------------------------------------------
/testresult/result.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/testresult/result.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------