python + uiautomator2编译平板语言工具并切换打包exe可执行文件(下)

简介: python + uiautomator2编译平板语言工具并切换打包exe可执行文件(下)

获取设备的SN号

通过获取设备的SN号连接设备

import os
class adbDevices():
    def __init__(self):
        pass
    def readSN(self):
        text = os.popen("adb devices | findstr /v List").read()
        Sn = text.split('d')[0].split()[0]
        return Sn


主流程代码

import time
import datetime
from language_draft_exe.commonFiles.readSerialNumber import adbDevices
from language_draft_exe.commonFiles.readExcelFile import RWExcel
from language_draft_exe.commonFiles.writeExcel import Write_excel
import uiautomator2 as u2
class readWarningTest():
    def __init__(self):
        pass
    def connect(self):
        # 连接手机
        print("---------------正在获取设备的SN号----------------")
        SN = adbDevices().readSN()  # 获取涉笔的SN号
        print("------------------获取成功,设备的SN号为:" + SN + "----------------------")
        time.sleep(5)
        print("---------------------------正在连接设备---------------------")
        self.d = u2.connect(SN)  # HA12FYBL\HA12G0GW\HA169RPZ填入设备的SN号即可
        self.sizeTuple = self.d.window_size()
        print("--------------------设备连接成功,先回到主页面-----------------")
        #self.d.press('home')
        #print("回到主页面成功,正在把屏幕调到自然方向")
        #time.sleep(3)
        #self.d.set_orientation("n")  # or "natural"
        #print("屏幕调整完成,正在启动应用")
    def readWarning(self,Changelanguage):
        """
        :param Changelanguage: 需要切换的语言
        :return: 返回切换语言之后的warningtext
        """
        self.d.press('home')
        print("-------------------回到主界面成功,正在启动应用!-----------------")
        time.sleep(3)
        self.d.implicitly_wait(20)
        #启动应用
        self.d.app_start("com.android.settings")
        print("---------------------应用启动成功---------------------")
        #创建session连接对象,建议与设置应用的绑定连接
        s = self.d.session('com.android.settings',attach=True)
        time.sleep(3)
        #获取设备的尺寸
        print(self.d.window_size())
        x = self.sizeTuple[0]
        y = self.sizeTuple[1]
        print("屏幕的宽为:"+str(x) +",屏幕的高为:"+str(y)) #获取屏幕的宽高
        #1.进入设置之后,划动屏幕找到System
        time.sleep(3)
        print("---------------------开始滑屏--------------------")
        self.d.swipe(x/5 * 4,y/5 * 4,x/5*4,y/5*1,1,50)
        self.d.swipe(x/5 * 4,y/5 * 4,x/5*4,y/5*1,1,50)
        print("---------------------滑屏结束-----------------------")
        self.d.implicitly_wait(5)
        #2.通过class和下标点击系统(开发者模式)
        self.d(className = 'android.widget.LinearLayout',index = '18').click()
        time.sleep(1)
        #3.点击语言和输入法
        self.d(className = 'android.widget.LinearLayout',index = '1').click()
        time.sleep(2)
        #4.点击语言
        self.d(className = 'android.widget.RelativeLayout',index = '1').click()
        time.sleep(2)
        #5.点击添加语言(此时页面仅可存在一个语言,其他语言需提前删除)(需判断目前显示的语言是否和要搜索的一致)
        self.d(resourceId = 'com.android.settings:id/add_language').click()
        #6.点击搜索
        self.d(resourceId = 'android:id/locale_search_menu').click()
        #7.输入需要更换的语言(此时要注意一个语言下面还有分支的情况)
        # Changelanguage = 'Čeština'  #Suomi Akan
        time.sleep(3)
        #7.1 单语言切换
        if "/" not in Changelanguage:
            self.d(resourceId = 'android:id/search_src_text').send_keys(Changelanguage)
            self.d.implicitly_wait(5)
            #8.1选择更换的语言,text要是选择的语言,有的语言会有推荐语言列表
            self.d(resourceId = 'android:id/locale').click()
        time.sleep(1)
        #7.2 多语言切换(英语有很多页,需要滑动的,分开操作)
        if "/" in Changelanguage:
            Changelanguage = Changelanguage.replace("/","-")
            print("含有/符号的value:{}".format(Changelanguage))  # 把含有/的value打印出来
            multilingual = Changelanguage.split("-")  # 分割好的语言放在这个里面
            print("--------------------------------")
            print("分割的", multilingual)
            hostLanguage = multilingual[0]   #获取多语言的主语言
            secondLanguage = multilingual[1]  #获取多语言的子语言
            time.sleep(3)
            if multilingual[0] == "English":
                self.d(resourceId='android:id/search_src_text').send_keys(hostLanguage)
                self.d.implicitly_wait(5)
                # 8.1点击主语言进入次语言的选择界面
                self.d(resourceId='android:id/locale',text = hostLanguage ).click()
                time.sleep(2)
                #寻找子语言,如果子语言不存在,则滚动屏幕,直到找到子语言,找到子语言则跳出循环,进行后面的操作
                flag = True
                while flag:
                    # 判断元素是否存在
                    time.sleep(5)
                    judgeElement = self.d(resourceId='android:id/locale', text=secondLanguage).exists
                    if judgeElement:
                        print("---------------次语言查找成功----------------")
                        self.d(resourceId='android:id/locale', text=secondLanguage).click()
                        flag = False
                    else:
                        x = self.sizeTuple[0]   #获取屏幕的宽
                        y = self.sizeTuple[1]   #获取屏幕的高
                        print("--------------滑屏寻找元素--------------")
                        # 1.进入设置之后,划动屏幕找到System
                        self.d.swipe(x / 5 * 4, y / 5 * 4, x / 5 * 4, y / 5 * 3, 1, 50)
                        self.d.swipe(x / 5 * 4, y / 5 * 4, x / 5 * 4, y / 5 * 3, 1, 50)
                #d(resourceId = 'android:id/locale',text = secondLanguage).click()
            else:   #不是英语的其他多语言
                self.d(resourceId='android:id/search_src_text').send_keys(hostLanguage)
                self.d.implicitly_wait(5)
                # 8.1点击主语言进入次语言的选择界面
                self.d(resourceId='android:id/locale', text = hostLanguage).click()
                time.sleep(2)
                self.d(resourceId='android:id/locale', text=secondLanguage).click()
        time.sleep(2)
        print("准备点击小点")
        #9.选择右上角的三个小点,remove
        self.d(className = 'android.widget.ImageButton',index='1').click()
        print("点好了")
        #10.点击移除(把选择之前的语言移除掉)
        self.d(resourceId = 'android:id/content').click()
        time.sleep(3)
        #11.勾选之前的语言(也就是第一个),这样把第一个删除之后,现在的语言就是需要更换的语言
        self.d(className = 'android.widget.RelativeLayout',index = '0').click() #点击第一个语言
        self.d(className = 'android.widget.TextView',index = '0').click() #点击删除
        #12.由于点击第一个删除会触发系统提示弹窗,则勾选ok就好
        self.d(resourceId = 'android:id/button1',index = '1').click()
        time.sleep(1)
        self.d.press("back") #返回到语言和输入法界面
        time.sleep(1)
        self.d.press("back") #返回到系统界面(开始进入系统更新对比)
        print("-------------------------开始进入系统更新对比------------------")
        #13.进入系统更新界面
        self.d(className = 'android.widget.LinearLayout',index = '8').click()
        #14.获取提示信息
        WaringText = self.d(resourceId = 'com.lenovo.ota:id/text_new_version_content').get_text(timeout=5)
        # print(WaringText)
        #14.获取到信息之后截屏,截图该屏幕并保存到同目录的screen文件中,图片名称为时间+语言
        nowTime = datetime.datetime.now().strftime('%m-%d-%H-%M-%S')
        self.d.screenshot("./Screenshorts/{}_{}.jpg".format(Changelanguage,nowTime))
        return WaringText
    # 15.把获取到的信息写入到表格中,使用获取到的信息和表格里面的信息进行对比
    def judgeResult(self):
        #获取select为1的行数和语言的键值对  eg.{3: 'Latviešu', 4: '日本語'}
        languageList = RWExcel().list_dic()
        print(languageList)
        for key, value in languageList.items():
            print("index:{},value:{}".format(key, value))
            # key作为第几行直接输入
            print("---------------------开始切换语言-------------")
            print("所切换的语言为:{}".format(value))
            msg = Run.readWarning(value)
            print(msg)
            print("-------------------开始把warning信息写入到对应表格中-------------------")
            write = Write_excel(r'./ExcelFiles/Test.xlsx', key, msg)
            #把获取到的warning信息写入进入表格
            write.write()
            print("-------------------Warning信息写入成功--------------------------")
            print("----------------------开始对比系统提示与标准描述模板是否一致----------------")
            print("-------------------开始把测试结果写入到对应表格中-------------------")
            #把对比之后的测试结果写入到表格
            write.write_result()
            print("-------------------测试结果写入成功--------------------------")
if __name__ == '__main__':
    Run = readWarningTest()
    # language = "Dansk"
    #Run.readWarning("English/Tuvalu")
    Run.connect()
    Run.judgeResult()


运行界面

image.png

截图文件:

image.png

报告结果:

image.png

初代版本代码链接:

链接:https://pan.baidu.com/s/1ahUS8yXUMgBiTGN0SDgopQ  

提取码:xznb  

复制这段内容后打开百度网盘手机App,操作更方便哦


我就很棒!

相关文章
|
1天前
|
JSON JavaScript 数据格式
python遍历目录文件_结合vue获取所有的html文件并且展示
python遍历目录文件_结合vue获取所有的html文件并且展示
4 0
|
7天前
|
存储 Python
用Python实现批量下载文件——代理ip排除万难
用Python实现批量下载文件——代理ip排除万难
|
7天前
|
JSON 关系型数据库 数据库
《Python 简易速速上手小册》第6章:Python 文件和数据持久化(2024 最新版)
《Python 简易速速上手小册》第6章:Python 文件和数据持久化(2024 最新版)
35 0
|
7天前
|
数据挖掘 索引 Python
Python 读写 Excel 文件
Python 读写 Excel 文件
12 0
|
8月前
|
小程序 Linux 区块链
Python PyInstaller 打包成 Win、Mac 应用程序(app / exe)
Python PyInstaller 打包成 Win、Mac 应用程序(app / exe)
557 0
|
4月前
|
小程序 Linux 区块链
Python PyInstaller 打包成 Win、Mac 应用程序(app / exe)
Python PyInstaller 打包成 Win、Mac 应用程序(app / exe)
136 0
|
3月前
|
安全 编译器 开发者
Python打包成.exe文件直接运行
Python打包成.exe文件直接运行
112 1
|
2月前
|
Python
使用PyInstaller将Python应用程序打包成EXE文件
使用PyInstaller将Python应用程序打包成EXE文件
163 0
|
2月前
|
Python
python 打包exe
python 打包exe
17 0
|
4月前
|
Python
Python 使用 pyinstaller 打包成 exe/app 文件,并支持传入外部参
Python 使用 pyinstaller 打包成 exe/app 文件,并支持传入外部参
52 0