迩来,阿里里面开源了一个 iOS 端由 Python 编写的机动化东西,即:tidevice

它是一款跨平台的机动化开源东西,不依附 Xcode 就不妨启用 WebDriverAgent( WDA ),这也就表示着 Windows 不妨径直运转 iOS 机动化剧本

加入到假造情况,先安置 tidevice 的依附包

将 iPhone 摆设贯穿到电脑上,就不妨运用 tidevice 供给的功效了

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第1张

察看摆设列表

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第2张

安置、卸载运用

安置对应的要害字为:「 install 」

tidevice 同声扶助安置当地 ipa 包和远链下的 ipa 运用包

其余,tidevice 不妨运用「 udid 」参数将运用安置到某一台摆设中

已安置运用及称呼、本子

运用「 tidevice applist 」吩咐,不妨察看摆设上仍旧安置的运用、运用称呼、运用本子号

摆设消息

运用「 tidevice info 」不妨察看摆设消息,比方:摆设序列号、体例本子、CPU、本机号子、功夫戳、蓝牙地方、MAC 地方等消息

即使要察看摆设的干电池消息,不妨运用要害字 「 domain + 运用包名 」来获得

体例日记及更多扶助

察看体例日记的吩咐为:「 tidevice syslog 」,固然也不妨摆设 grep 参数举行过滤

要实行 iOS 端的机动化,咱们还须要做少许筹备处事

安置 WDA

须要将 WebDriverAgent 安置到 iOS 摆设上,经过它启动大哥大举行一系列机动化操纵

PS:因为 Facebook WDA 很长功夫没有革新了,这边倡导径直运用 Appium WDA

https://github.com/appium/WebDriverAgent

载入名目后,运用 Xcode 翻开,Scheme 采用 WebDriverAgentRunner,摆设采用真机

而后摆设开拓者文凭,不妨参考底下链接举行摆设

https://testerhome.com/topics/7220

结果,Xcode 采用 Project 下的 Test 将名目运转到真机摆设上

意:第一次运转 WDA 大概运转波折,须要手动在树立中对文凭增添断定

运转 WDA

真机摆设安置完 WDA 后,就不妨摆脱 Mac,运用 Windows 举行机动化操纵了

运用「 tidevice wdaproxy 」吩咐不妨运转 WDA 和端口转发

PS:因为 Xcode 树立文凭的功夫,更改正 bundle_id,以是这边的包名是一个变量

编写机动化剧本

接下来,就不妨运用 Appium 或 facebook-wda 编写剧本并运转到 iOS 摆设上了

以 facebook-wda 为例

开始,咱们安置对应的依附

接着,编写机动化剧本并运转尝试

阿里这款 iOS 端机动化东西的重要便宜是启用速率快,外存占用低;更要害的是,它是跨平台,宁静性对立较高

不领会大师有没有创造,有少许模块、少许代码会一再展示。而os、shutil、glob基础是每篇城市展示。

在写了几十篇作品后,我将少许办公室机动化常用操纵的代码独立整治出来,大师拿走就不妨用在本人的剧本中!

OS模块关系

一、遍历文献夹

批量操纵的基础即是对文献夹举行遍历,运用os模块不妨轻快的遍历文献夹,os.walk 遍历后爆发三个参数:

代码如次,大师不妨按照本人的路途举行窜改

import os for dirpath, dirnames, filenames in os.walk(r C:\\Program Files (x86) ): print(f 翻开文献夹{dirpath} ) # 暂时文献夹路途 if dirnames: print(dirnames) # 包括文献夹称呼[列表情势] if filenames: print(filenames) # 包括文献称呼[列表情势] print( - * 10)

​x import osbr brfor dirpath, dirnames, filenames in os.walk(r C:\\Program Files (x86) ):br print(f 翻开文献夹{dirpath} ) # 暂时文献夹路途 br if dirnames:br print(dirnames) # 包括文献夹称呼[列表情势] br if filenames:br print(filenames) # 包括文献称呼[列表情势]br print( - * 10)br

当手上的需要精确有获得给定路途各级文献夹下一切适合前提的文献,并举行相映的批处置操纵时,即可运用 os.walk

二、 目的路途能否是文献

偶尔咱们须要确定一个目次下能否生存文献也不妨运用os模块。

给定一个目的路途 path ,经过一条龙代码就不妨确定这是文献仍旧文献夹路途

import ospath = xxx print(os.path.isfile(path))

xxxxxxxxxxbr import osbrbrpath = xxx brprint(os.path.isfile(path))br

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第3张

三、获得路途中的文献名

os.path.basename 不妨径直从一致路途中获得结果的文献名,固然即使用保守的字符串切割办法也不妨,即 path.split( \\ )[-1]

import ospath = xxx print(os.path.basename)

xxxxxxxxxxbr import osbrbrpath = xxx brprint(os.path.basename)br

四、创造文献夹

创造文献夹的代码非往往用,由于常常天生的新文献都蓄意有个新的文献夹保存,代码如次:

import osdirpath = xxx os.mkdir(dirpath)

xxxxxxxxxxbr import osbrbrdirpath = xxx bros.mkdir(dirpath)br

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第4张

然而,即使蓄意创造的文献夹仍旧生存,再运转 os.mkdir() 则会报错而中断代码。为了制止这一情景的爆发,不妨在创造文献夹之前先确定文献夹能否生存。

用到的代码是 os.path.exists,惟有当路途不生存(即 os.path.exists 归来的截止是 False 时),才会创造:

import osdirpath = xxx if not os.path.exists(dirpath): os.mkdir(dirpath)

xxxxxxxxxxbr import osbrbrdirpath = xxx brif not os.path.exists(dirpath):br os.mkdir(dirpath)br

五、获得桌面路途

获得桌面路途也利害往往用的操纵,不妨运用os.path.join(os.path.expanduser( ~ ), Desktop ) 获得桌面包车型的士一致路途。

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第5张

如许做的长处是不妨把数据放在桌面上,在各别的电脑上都能挪用代码对数据举行处置。即使是在一条电脑上把桌面路途恒定在字符串中,则换一台电脑就必需窜改桌面路途。代码如次:

import osdesktop_path = os.path.join(os.path.expanduser( ~ ), Desktop )print(desktop_path)

xxxxxxxxxxbr import osbrbrdesktop_path = os.path.join(os.path.expanduser( ~ ), Desktop )brprint(desktop_path)br

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第6张

固然把上头的代码包装成一个因变量 GetDesktopPath() 须要时挪用它会越发简单

import osdef GetDesktopPath(): return os.path.join(os.path.expanduser( ~ ), Desktop )

xxxxxxxxxxbr import osbrbrdef GetDesktopPath():br return os.path.join(os.path.expanduser( ~ ), Desktop )br

六、重定名文献/文献夹

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第7张

须要用到 os.rename() 本领,底下的代码示例中辨别演练怎样重定名文献和文献夹

import osos.rename( practice.txt , practice_rename.txt ) # 重定名文献os.rename( 文献夹1 , 文献夹2 ) # 重定名文献夹

xxxxxxxxxxbr import osbrbros.rename( practice.txt , practice_rename.txt ) # 重定名文献bros.rename( 文献夹1 , 文献夹2 ) # 重定名文献夹br

七、批处置文献 1

除去前方的 os.walk 除外,有其余的 os 模块下本领可实行获得指定路途的十足或适合前提的文献(非遍历各级文献夹的需要),还不妨运用底下两个代码 第一种用到的本领是os.scandir(),运用如次:

import ospath = xxx for file in os.scandir(path): print(file.name, file.path)

xxxxxxxxxxbr import osbrbrpath = xxx brfor file in os.scandir(path): br print(file.name, file.path)br

八、批处置文献 2

上头代码结果输入的是 给定路途下各实质的名字、一致路途第二种本领运用 os.listdir(),它比 os.scandir() 大略少许,可径直挪用输入称呼而非路途:

import os path = xxx for file in os.listdir(path): print(file)

xxxxxxxxxxbr import os brbrpath = xxx brfor file in os.listdir(path):br print(file)br

02

shutil模块关系

九、挪动文献/文献夹

shutil也是常常出此刻办公室机动化场景中的模块,我常用的即是挪动文献/文献夹。

须要用到shutil.move 本领,底下的代码示例中辨别演练怎样挪动文献和文献夹:

import shutil shutil.move(r .\practice.txt , r .\文献夹1/ ) shutil.move(r .\practice.txt , r .\文献夹1/new.txt )

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第8张

xxxxxxxxxxbr import shutil brbrshutil.move(r .\practice.txt , r .\文献夹1/ ) brshutil.move(r .\practice.txt , r .\文献夹1/new.txt )br

提防到上头后两行代码的辨别吗?前一条龙是将目的文献挪动到目的文献夹里,尔后一条龙,在将目的文献挪动到目的文献夹里的同声,不妨对其举行重定名

也即是说,即使咱们须要挪动某个或某些文献到新的文献夹,而且需重定名文献,则咱们并不须要用 os.rename 先定名文献再用 shutil.move 将其挪动的指定文献夹,而是不妨用 shutil.move 一步到位

03

glob模块关系

十、批处置文献 3

结果要引见的是glob模块,也是办公室机动化必需要控制的一个模块,同样不妨用来批处置文献。

glob 最要害的功效即是探求获得同头等大概各子级下适合前提的文献(一致路途),特殊符合写批处置的代码。

有功夫咱们须要对洪量文献举行沟通操纵,在写完对准一份文献的操纵后,只须要加上几行代码,就不妨实行批处置十足文献的处事。大概代码框架如次:

import glob for file in glob.glob( **/* , recursive=True): print(file)

xxxxxxxxxxbr import globbr brfor file in glob.glob( **/* , recursive=True): br print(file)br

glob.glob() 是一个特殊要害的本领,不妨获得给定路途下文献的一致路途,而且接收「通配符」探求,大大拓宽了精巧水平,* 表白大肆字符长度,**/* 的运用表白用通配符指代给定路途下的任何一层,recursive 参数承诺遍历探求。

之上即是我为大师整治的十个常用操纵的代码,大局部都是不妨通用的,大师不妨保藏正文,并在须要举行关系操纵的功夫不妨径直复制粘贴运用。

其余也蓄意大师在本人写代码、读旁人代码时,不妨多去推敲哪些因变量/代码片断是不妨为我所用,如许才会超过的更快!

Python 自动化工具开源及办公自动化 10 高频操作,代码可直接套用 第9张