import os
import re
import subprocess
import sys
import uiautomator2 as u2
import time
from pandas.tests.io.excel.test_xlrd import xlrd, xlwt
from xlutils.copy import copy
def set_up():
d = u2.connect(device)
time.sleep(1)
d.screen_on()
d.shell('input keyevent 82')
d.shell('input keyevent 3')
def exists(path):
is_exists = os.path.exists(path)
if is_exists:
return True
else:
os.mkdir(path)
# 创建结果文件夹
def create_xls(xls_name):
# 结果文件夹
exists(os.path.join(os.getcwd(), 'Result'))
result_dir = os.path.join(os.getcwd(), 'Result')
# print(result_dir)
# 判断目标结果excel文件是否存在,若无创建新文件
result_path = os.path.join(result_dir, xls_name)
if not os.path.exists(result_path):
# 创建xls表格
workbook = xlwt.Workbook(encoding='utf-8')
# 创建一个worksheet
worksheet = workbook.add_sheet('result')
worksheet.col(0).width = 40 * 300 # Set the column width
worksheet.col(1).width = 40 * 200 # Set the column width
worksheet.col(2).width = 40 * 200 # Set the column width
worksheet.col(3).width = 40 * 200 # Set the column width
# 写入excel
# 参数对应 行, 列, 值
worksheet.write(0, 0, 'country')
worksheet.write(0, 1, 'camera_info')
worksheet.write(0, 2, 'storage_used')
worksheet.write(0, 3, 'result')
# worksheet.write(0, 3, 'rate')
workbook.save(result_path)
else:
pass
return result_path
def write_excel_xls_append(path, country=[], camera_info=[], storage_used=[], result=[]):
global worksheet
workbook = xlrd.open_workbook(path, formatting_info=True)
try:
worksheet = workbook.sheet_by_name('result')
except:
print('xls文件sheet名称错误,默认名称是result,请检查')
# 在写入之前需要获取已经写入的行数
old_nrows = worksheet.nrows
# print(old_nrows)
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个表格
# 开始进行写操作
new_worksheet.write(old_nrows + 1, 0, country)
new_worksheet.write(old_nrows + 1, 1, camera_info)
new_worksheet.write(old_nrows + 1, 2, storage_used)
new_worksheet.write(old_nrows + 1, 3, result)
new_workbook.save(path)
# 到设置里面的平板信息
def open_to_the_camera():
for i in range(5):
d.app_start('com.android.settings')
time.sleep(1)
if d(resourceId='android:id/button2').wait(timeout=3):
d(resourceId='android:id/button2').click()
time.sleep(4)
d(scrollable=True).fling.toEnd()
time.sleep(1)
d.dump_hierarchy()
try:
d.xpath(
'//*[@resource->'
'9]/android.widget.ImageView[1]').click()
time.sleep(1)
d.xpath(
'//*[@resource->'
'1]/android.widget.LinearLayout[1]/android.widget.ImageView[1]').click()
time.sleep(4)
d(scrollable=True).fling.toEnd()
time.sleep(1)
break
except:
print('未能找到设置里面System的xpath,再次执行该操作')
continue
# 到设置里面的存储界面
def open_to_the_storage():
os.system('adb -s %s shell input keyevent 82' % device)
os.system('adb -s %s shell input keyevent 82' % device)
for i in range(5):
try:
d.app_start('com.android.settings')
time.sleep(4)
d(scrollable=True).fling.toEnd()
time.sleep(1)
d.dump_hierarchy()
d.xpath(
'//*[@resource->'
'7]/android.widget.ImageView[1]').click()
time.sleep(2)
break
except:
print('未能找到设置里面Storage的xpath,再次执行该操作')
continue
# 获取camera里面的信息并判断
def camera_text():
d.dump_hierarchy()
for i in range(5):
for j in range(5):
if not d.xpath('//*[@resource->'
'9]/android.widget.RelativeLayout[1]/android.widget.TextView[2]').exists:
time.sleep(2)
else:
break
try:
for i in d.xpath(
'//*[@resource->'
'9]/android.widget.RelativeLayout[1]/android.widget.TextView[2]').all():
text = i.text
print(text)
# 正则表达式 排除里面没有特殊字符+- 只有8和5
result_1 = re.findall('[+,-,=,*,#,@,!,$,%,^,~,(,),`]', text)
if len(result_1) != 0:
print('有特殊字符')
result = 'False'
return text, result
else:
result = re.findall(
'([+,-,=,*,#,@,!,$,%,^,~,(,),.`,/]*d+[+,-,=,*,#,@,!,$,%,^,~,(,),.`,/]*)+',
text)
print('Camera_text', result)
if len(result) != 2:
print("数字不是默认的2个数字")
result = 'False'
return text, result
for i in range(len(result)):
if '8' != result[i] and '13' != result[i]:
# print('Camera_text', result)
print("数字不是默认值")
result = 'False'
return text, result
else:
result = "True"
return text, result
except:
print('读取Camera信息失败,再次操作')
continue
# 获取stroage里面的信息并判断
def storage_text():
for i in range(5):
try:
d.dump_hierarchy()
for i in range(10):
if d.xpath('//*[@resource->'
'1]/android.widget.LinearLayout[1]/android.widget.TextView[1]').exists:
break
else:
time.sleep(2)
for i in d.xpath(
'//*[@resource->'
'1]/android.widget.LinearLayout[1]/android.widget.TextView[1]').all():
text_use = i.text
print('已经使用', text_use)
for i in d.xpath(
'//*[@resource->'
'1]/android.widget.LinearLayout[1]/android.widget.TextView[2]').all():
text = i.text
print('内存', text)
shuzi = re.findall('d+', str(text))
# print(shuzi)
result = ""
if "64" in shuzi:
info = d.xpath(
'//*[@resource->).info
result_use = info["contentDescription"]
print(result_use)
# print(result_use)
if '31' not in result_use:
print('存储空间使用不是默认的值31%')
result = "False"
else:
result = "True"
elif "128" in shuzi:
info = d.xpath(
'//*[@resource->).info
# print(info)
result_use = info["contentDescription"]
print(result_use)
if '16' not in result_use:
print('存储空间使用不是默认的值16%')
result = "False"
else:
result = "True"
else:
info = d.xpath(
'//*[@resource->).info
info = dict(info)
result_use = info["contentDescription"]
print(result_use)
# 阿拉伯语无法数字判断 默认都false
# result_use = re.findall('w[\%]+', str(info))
# result_use = "".join(result_use).encode("gbk", 'ignore').decode("gbk", "ignore")
result = "False"
# print('阿拉博语言存储空间:', info["contentDescription"])
# if '16%' and '31%' not in result_use:
# print(result_use, '存储空间使用不是默认的值16%/31%')
result_use = ''.join(str(s) for s in result_use)
return result_use, result
except:
print('读取storage信息失败')
continue
# 进入工厂模式
def enter_factory():
d = u2.connect(device)
os.system('adb -s %s shell input keyevent 82' % device)
os.system('adb -s %s shell input keyevent 82' % device)
for i in range(5):
try:
d.app_start('com.android.settings')
time.sleep(4)
d.xpath(
'//*[@resource->).click()
time.sleep(2)
d.send_keys('####6030#')
for i in range(5):
if d(text='AE United Arab Emirates').exists:
time.sleep(1)
break
else:
time.sleep(2)
break
except:
print('进入工厂模式失败')
continue
# 切换国家码
def change_code_list(start, end):
d.dump_hierarchy()
if d(className='android.widget.RadioButton', index=start).exists and d(className='android.widget.RadioButton',
index=end).exists:
d(className='android.widget.RadioButton', index=start).click()
country = d(className='android.widget.RadioButton', index=start).info["text"]
time.sleep(1)
if d(resourceId='com.lenovo.EngineeringCode:id/ok').exists:
d(resourceId='com.lenovo.EngineeringCode:id/ok').click()
time.sleep(1)
if d(resourceId='android:id/button1').wait(timeout=2):
d(resourceId='android:id/button1').click()
time.sleep(260)
for i in range(5):
try:
# 等待恢复出厂设置
os.system("adb -s %s root" % device)
os.system("adb -s %s remount" % device)
os.system("adb -s %s shell settings put secure user_setup_complete 1" % device)
os.system("adb -s %s shell settings put global device_provisioned 1" % device)
os.system("adb -s %s reboot" % device)
time.sleep(85) # 重启
os.system('adb -s %s shell input keyevent 82' % device)
os.system('adb -s %s shell input keyevent 82' % device)
os.system('adb -s %s shell input keyevent 82' % device)
os.system('adb -s %s shell input keyevent 82' % device)
os.system('adb -s %s shell settings put system screen_off_timeout 600000' % device)
os.system('adb -s %s shell settings put system screen_off_timeout 600000' % device)
os.system('adb -s %s shell input keyevent 3' % device)
os.system('adb -s %s shell input keyevent 3' % device)
set_up()
break
except:
print('开机失败重新再次尝试')
continue
print(country)
main()
try:
write_excel_xls_append(path=result_path, country=country, camera_info=camera_info,
storage_used=storage_used, result=result)
except:
print('请勿在执行过程中打开结果文件')
def main():
global camera_info, storage_used, result
open_to_the_camera()
time.sleep(2)
result_1 = camera_text()
time.sleep(2)
open_to_the_storage()
time.sleep(4)
result_2 = storage_text()
result_3 = result_1 + result_2
# print(result_3)
# print(result_3)
# 结果默认为True 有一个错误即为错
result = "True"
for i in range(len(result_3)):
if "False" in result_3[i]:
result = "False"
elif "/" in result_3[i]:
camera_info = result_3[i]
elif "%" in result_3[i]:
storage_used = result_3[i]
# 排除没有百分比的特殊情况
if "%" not in result_2:
storage_used = result_2
# print(storage_used)
for m in range(len(storage_used)):
if storage_used[m] != 'True' and storage_used[m] != 'False':
storage_used = storage_used[m]
break
# 排除没有/ 的情况
if "/" not in result_1:
camera_info = result_1
# print(camera_info)
for m in range(len(camera_info)):
if camera_info[m] != 'True' and camera_info[m] != 'False':
camera_info = camera_info[m]
# print(camera_info)
break
return camera_info, storage_used, result
# 选择设备的id
def device_input():
device_id = input('请输入需要进行操作的设备id:')
return device_id
if __name__ == '__main__':
result_path = create_xls("CheckInDifferentCountry.xls")
device = device_input()
d = u2.connect(device)
time.sleep(1)
code_1 = 1
code_2 = 15
code_3 = 30
code_4 = 45
code_5 = 59
# AR -> EC Ecuador
for i in range(14):
enter_factory()
while True:
if d(text='AE United Arab Emirates').exists and d(text='EC Ecuador').exists:
if code_1 < 15:
change_code_list(code_1, 15)
code_1 += 1
break
else:
os.system('adb -s %s shell input swipe 798 327 781 248' % device)
print('第一页国家码结束')
# EE -> IT Italy
for i in range(14):
enter_factory()
while True:
if d(text='EC Ecuador').exists and d(text='IT Italy').exists:
if code_2 < 30:
change_code_list(code_2, 30)
code_2 += 1
break
else:
os.system('adb -s %s shell input swipe 798 327 781 248' % device)
print('第二页国家码结束')
# Japan -> PT Portugal
for i in range(14):
enter_factory()
while True:
if d(text='IT Italy').exists and d(text='PT Portugal').exists:
if code_3 < 45:
change_code_list(code_3, 45)
code_3 += 1
break
else:
os.system('adb -s %s shell input swipe 798 327 781 248' % device)
print('第三页国家码结束')
# RO Romanial-> US United States of America
for i in range(14):
enter_factory()
while True: # ZA South Africa
if d(text='PT Portugal').exists and d(text='US United States of America').exists:
if code_4 < 60:
change_code_list(code_4, 60)
code_4 += 1
break
else:
os.system('adb -s %s shell input swipe 798 327 781 248' % device)
# 点击最后二个国家码
for i in range(2):
enter_factory()
while True:
if d(text='ZA South Africa').exists and d(text='VN Vietnam').exists:
change_code_list(code_5, 61)
code_5 += 1
break
else:
os.system('adb -s %s shell input swipe 798 327 781 248' % device)
# 点击第一个阿拉伯
enter_factory()
if d(text='AE United Arab Emirates').exists:
change_code_list(0, 60)
print('第四页国家码结束')