• 基于Python的Web自动化(Selenium)之读取文件


    简单介绍

    关于数据驱动的形式有很多,我们既可以通过定义变量的方式进行参数化,也可以通过定义数组、字典方式进行参数化,还可以通过读取文件(txtcsvxml)的方式进行参数化。下面简单介绍下如何读取txt和csv格式,xml在测试过程中好像用的少(可能是我的测试还不够丰富,等有时间也介绍下xml的读取方式)。

    实际操作

    一、读取txt格式

    关于txt格式文件读取,这里不再赘述,可以参考Python三种读取文件方式这篇文章。着重强调一下格式。注意,我们在存储数据的时候为了方便后续读取需要的数据就必须使用特殊的一个符号区分每个不同数据的意义。比如我们需要对“username”和“password”两个字段进行测试,我们就需要在txt文件中构造关于这两个字段的数据。


    构造数据

    这里创建了三组测试数据,都是用“,”隔开,然后我们根据读取到的数据使用“split”方法根据“,”进行分隔数据,然后再取数据存入变量中使用。当然这个特殊符号根据自己喜好自定,当然使用一下方便好记的符号最好。

    二、读取csv格式

    如果现在需要测试一组数据包括用户名、年龄、性别、邮箱等信息,此时再使用txt显得有点不方便了。我们可以使用通过创建csv格式文件,读取方式使用csv模块的reader()方法读取,然后通过for循环遍历文件中的数据。


    csv文件

    1、遍历每一行数据

    代码:

    # -*- coding: utf-8 -*-

    '''

    @author: April_Chou

    @time: 2018/4/16 20:54

    '''

    import csv

    user_file = csv.reader(open('D:/WorkSpace2/seleniumTest/4/info.csv','r'))

    for line in user_file:

        print(line)

    结果:

    ['姓名', '年龄', '学号']

    ['Python', '3', '1']

    ['Java', '4', '2']

    ['Ruby', '5', '3']

    2、获取某一列数据

    代码:

    # -*- coding: utf-8 -*-

    '''

    @author: April_Chou

    @time: 2018/4/16 20:54

    '''

    import csv

    user_file = csv.reader(open('D:/WorkSpace2/seleniumTest/4/info.csv','r'))

    for line in user_file:

        print(line[0])

    结果:

    姓名

    Python

    Java

    Ruby

    三、读取xml格式

    有时候读取的数据格式是不规则的,比如在配置一个xml文件配置自动化脚本的URL、浏览器、登陆用户名和密码等,这时候就需要读取xml文件。首先导入xml的minidom模块,用来处理XML文件,使用parse()方法打开一个XML文件,documentElement用于得到XML文件的唯一根元素,getElementeByTagName()可以通过标签名称获取标签,若标签有多个,则可以通过指定数组的下标方式获取某个具体标签,使用getAttribute()方法获取元素的属性值,使用firstChild属性返回被选节点的一个子节点,使用data获取该节点的数据。

    文件:


    xml文件

    代码:

    # -*- coding: utf-8 -*-

    '''

    @author: April_Chou

    @time: 2018/4/17 7:45

    '''

    from xml.domimport minidom

    # 打开xml文件

    dom = minidom.parse('D:\WorkSpace2\seleniumTest\4\info.xml')

    # 得到文档元素对象

    root = dom.documentElement

    logins = root.getElementsByTagName('login')

    # 获取login标签的username属性值

    username = logins[0].getAttribute('username')

    print(username)

    # 获取login标签的password属性值

    password = logins[0].getAttribute('password')

    print(password)

    # 得到文档元素对象

    provinces = root.getElementsByTagName('province')

    # 获取第一个province标签对的值

    p1 = provinces[0].firstChild.data

    print(p1)

    # 得到文档元素对象

    cities = root.getElementsByTagName('city')

    # 获取第一个city标签对的值

    c1 = cities[0].firstChild.data

    print(c1)

    结果:

    admin

    123456

    北京

    深圳

  • 相关阅读:
    Filter ,Interceptor,AOP
    React路由官方网站
    React的UI库以及国内镜像
    HBuilder+个推 实现app推动消息
    基于create-react-app再次配置
    使用 ES7 的 async/await 时报错—Uncaught ReferenceError: regeneratorRuntime is not defined
    微信小程序学习网站
    我的github地址
    如何在github搭建自己的项目
    Vue简单封装axios—解决post请求后端接收不到参数问题
  • 原文地址:https://www.cnblogs.com/April-Chou-HelloWorld/p/8858562.html
Copyright © 2020-2023  润新知