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,操作更方便哦


我就很棒!

相关文章
|
9天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
3天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
22 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
2天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
24 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
20天前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
48 20
|
25天前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
26天前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
126 80
|
22天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码

热门文章

最新文章