zoukankan      html  css  js  c++  java
  • Poco和Excel读写结合的应用实践案例

    1. 案例简介

    之前我们在 数据分离实践 一文中,详细讲述了Poco和读Excel结合的应用案例。

    今天我们来聊一个Poco和Excel读写结合的应用案例。首先,我们提前准备了一个包含多位歌手名称的Excel表格,命名为 read.xls

    我们将在这个表格中读取歌手名称,然后依次到网易云音乐首页去进行搜索,并且找到歌手的单曲;

    之后,我们会拿到歌手单曲排前10位的歌曲名称,并且把这个歌曲名称保存到另外一个Excel表格 write.xls 里。

    这个案例可以帮助你 自动获取指定歌手的前10首歌曲名称 ,看起来似乎很快乐,那就让我们开始吧!

    2. 实现找歌手单曲名称的函数

    我们先来实现这个找歌手单曲名称的流程(假设网易云音乐的初始状态是首页):

    • 点击首页的搜索框
    • 输入歌手的名称,比如 张艺兴
    • 显示搜索结果之后,点击“单曲”这个tab
    • 然后再“单曲”下面获取前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
    

    3. 实现在Excel中读取歌手名称的函数

    那接下来,就是要从Excel的单元格中,读取到我们要找的几位歌手名称,这里我们用来读Excel的库依旧是之前我们讲过的 xlrd

    import xlrd
    
    def get_excel():
        
        ex = xlrd.open_workbook(r'D:demo
    ead.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
    

    4. 把拿到的单曲名称保存到指定Excel中

    能拿到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
    ead.xls')
    sheet = wb.sheets('music')
    
    
    sheet.range('C1:C4').value=li
    
    wb.save(r'D:demowrite.xls')
    wb.close()
    app.quit()
    

    别忘记在 import 之前,先在当前Python环境中安装好这个库:

    pip install xlwings
    

    5. 小结

    关于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

    呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~

  • 相关阅读:
    shell生成随机数 shell脚本生成随机数作为kafka的生产者
    使用Azkaban调度Spark任务
    Azkaban3.57.0的编译安装以及简单使用
    centos上安装gradle
    azkaban(版本2.5.0)安装
    261 相对布局之1— 相对布局的作用
    260 线性布局之3—线性布局案例演示
    259 线性布局之2—线性布局的使用
    258 线性布局之1—线性布局的作用
    257 布局基础之3—添加布局的方式
  • 原文地址:https://www.cnblogs.com/AirtestProject/p/15292783.html
Copyright © 2011-2022 走看看