此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
之前我们在 数据分离实践 一文中,详细讲述了 Poco 和读 Excel 结合的应用案例。
今天我们来聊一个 Poco 和 Excel 读写结合的应用案例。首先,我们提前准备了一个包含多位歌手名称的 Excel 表格,命名为 read.xls
:
我们将在这个表格中读取歌手名称,然后依次到网易云音乐首页去进行搜索,并且找到歌手的单曲;
之后,我们会拿到歌手单曲排前 10 位的歌曲名称,并且把这个歌曲名称保存到另外一个 Excel 表格 write.xls
里。
这个案例可以帮助你 自动获取指定歌手的前 10 首歌曲名称 ,看起来似乎很快乐,那就让我们开始吧!
我们先来实现这个找歌手单曲名称的流程(假设网易云音乐的初始状态是首页):
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__)
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
# 点击首页的搜索框
poco("com.netease.cloudmusic:id/searchBar").click()
sleep(1.0)
# 输入歌手名称
text("张艺兴")
sleep(3.0)
# 单击“单曲”的tab
poco(name="android.widget.TextView",text="单曲").click()
sleep(1.0)
# 拿到前10首歌曲的名称
count = 0
for li in poco("com.netease.cloudmusic:id/recyclerView").child("com.netease.cloudmusic:id/musicListItemContainer"):
count += 1
if count <= 10:
title = li.offspring("com.netease.cloudmusic:id/songName")
song_name = title.get_text()
print(song_name)
# 回到网易云音乐首页
keyevent("BACK")
keyevent("BACK")
sleep(1.0)
流程没问题之后,我们可以把这个找歌曲名称的脚本封装成函数,因为等会要搜索好几个歌手的名字,需要重复用到这部分的内容:
def find_song(name):
song_list = []
poco("com.netease.cloudmusic:id/searchBar").click()
sleep(1.0)
text(name)
sleep(3.0)
poco(name="android.widget.TextView",text="单曲").click()
sleep(1.0)
count = 0
for li in poco("com.netease.cloudmusic:id/recyclerView").child("com.netease.cloudmusic:id/musicListItemContainer"):
count += 1
if count <= 10:
title = li.offspring("com.netease.cloudmusic:id/songName")
song_name = title.get_text()
song_list.append(song_name)
# print(song_name)
keyevent("BACK")
keyevent("BACK")
sleep(1.0)
return song_list
那接下来,就是要从 Excel 的单元格中,读取到我们要找的几位歌手名称,这里我们用来读 Excel 的库依旧是之前我们讲过的 xlrd
:
import xlrd
def get_excel():
ex = xlrd.open_workbook(r'D:\demo\read.xls')
sheet = ex.sheet_by_name('music')
dat = []
for row in range(sheet.nrows):
cells = sheet.row_values(row)
# 拿每一行第2个单元格的内容(即歌手名称)
data=cells[1]
dat.append(data)
# 将拿到的歌手名称保存到列表中,该函数返回歌手名称的列表
return dat
注意 xlrd
为 Python 的第三方库,我们要在 import
之前把它装到当前使用的 Python 环境中:
pip install xlrd
能拿到 Excel 里面的歌手名称列表,又可以根据歌手名称获取前 10 首的歌曲名称,那我们只要 遍历从 Excel 读出来的歌手名称列表 ,传给找歌曲的函数,即可获得所有歌手的 10 首歌曲名称:
li = []
for d in get_excel():
li.append(find_song(d))
最后,我们就可以把所有歌手的歌曲名称写到指定的表格里了。这里我们用到另外一个 Python 的第三方库 xlwings
:
import xlwings as xw
app = xw.App(visible=True, add_book=True)
wb = xw.Book(r'D:\demo\read.xls')
sheet = wb.sheets('music')
sheet.range('C1:C4').value=li
wb.save(r'D:\demo\write.xls')
wb.close()
app.quit()
别忘记在 import
之前,先在当前 Python 环境中安装好这个库:
pip install xlwings
关于 Airtest 或者 Poco 项目与 Excel 读写结合的实践,其实还有很多,比如我们可以将测试的账号集保存在特定的 Excel 表格里,然后 测试的时候去读取账号集表格里面的账号密码 来使用;
又或者是我们测试过程中,将拿到的一些关键数据,保存到指定 Excel 文件中待用等等。
在这里我们仅以在 Excel 中读取歌手名称,然后在网易云音乐中找到歌手单曲的前十首歌曲名称,保存到指定 Excel 的例子,来给同学们提供 1 个简单的思路。(PS:需要案例完整脚本来学习的同学,可以到公众号后台回复 “Excel” 获取)
在实际应用过程,同学们可以根据自己的需求,编写更加复杂和专业的脚本。
Airtest 官网:https://airtest.netease.com/
Airtest 教程官网:https://airtest.doc.io.netease.com/
搭建企业私有云服务:https://airlab.163.com/b2b
官方答疑 Q 群:654700783
呀~这么认真都看到这里啦,帮忙点击左下角的爱心,给我点个赞支持一下把,灰常感谢~