• xlrd的使用详细介绍以及基于Excel数据参数化实例详解


    1.安装xlrd

    xlrd是python用于读取excel的第三方扩展包,所以在使用xlrd前,需要使用以下命令来安装xlrd。pip install xlrd

    在使用这个命令之前先确定自己有没有安装pip模块

    我们需要在C:Python27Scripts这个目录下来执行我们的pip命令

    2.使用介绍

    •  导入模块
      import xlrd
    • 打开excel表
      excel=xlrd.open_workbook("excel.xls")
    • 获取表格
      #通过索引顺序获取
      sytable=excel.sheets()[0]
      sytable=excel.sheet_by_index(0)
      #通过工作表名获取
      bmtable=excel.sheet_by_name(u"Sheet1")

       注意:通过工作表名获取的"Sheet1"是填写你excel中标签"Sheet1","Sheet2","Sheet3"....

    • 获取行数和列数
      #获取行数
      hs=bmtable.nrows
      #获取列数
      ls=bmtable.ncols
    • 获取整行货整列的值
      #打印第一行的值
      rows_values=bmtable.row_values(0)
      print rows_values
      #打印第一列的值
      cols_values=bmtable.col_values(0)
      print cols_values

       打印结果为:

      C:Python27python.exe "D:/PyCharm Community Edition 5.0.3/代码/excel.py"
      [u'u82b1u82b1 ', u'u82b1u82b1_u767eu5ea6u641cu7d22']
      [u'bb', u'u82b1u82b1_u767eu5ea6u641cu7d22', u'u563fu563f_u767eu5ea6u641cu7d22', u'u62c9u62c9_u767eu5ea6u641cu7d22']

      注意:行号,列号是从索引0开始的

    • 循环行列表值
      #获取行数
      hs=bmtable.nrows
      #通过行数值的多少遍历出表格中的值
      for i in range(1,hs):
          print bmtable.row_values(i)
    • 单元格
      cell_a1=bmtable.cell(0,0).value
      print cell_a1
      cell_b4=bmtable.cell(3,1).value
      print cell_b4

       打印结果:

      C:Python27python.exe "D:/PyCharm Community Edition 5.0.3/代码/excel.py"
      aa
      拉拉_百度搜索

        表格信息

       注意:索引是从0开始的,cell(3,1)的格式是cell(行row,列col)

    总结示例:将表格中的所有的数值打印出来(表格还是上图的表格)

    #coding=utf-8
    import xlrd
    excel=xlrd.open_workbook(u"aa.xlsx")
    table=excel.sheet_by_index(0)
    hs=table.nrows
    for i in range(hs):
        print table.row_values

    打印结果:

    3.示例演示

     将上表格中的第一列内容到百度去搜索,然后将搜索的标题与表格的一列作比较

     1 #coding=utf-8
     2 from selenium import webdriver
     3 import unittest
     4 import HTMLTestRunner
     5 import sys
     6 from time import sleep
     7 import xlrd
     8 reload(sys)
     9 sys.setdefaultencoding("utf-8")
    10 class baidutest:
    11     def __init__(self,path):
    12         self.path=path
    13     def load(self):
    14         #打开一个excel文件
    15         excel=xlrd.open_workbook(self.path)
    16         #获取一个工作表格
    17         table=excel.sheets()[0]
    18         #获取工作表格的行数
    19         nrows=table.nrows
    20         #循环遍历数据,将他存到list中去
    21         test_data=[]
    22         for i in range(1,nrows):
    23             print table.row_values(i)
    24             test_data.append(table.row_values(i))
    25         #返回数据列表
    26         return test_data
    27 class baidu(unittest.TestCase):
    28     def setUp(self):
    29         self.driver=webdriver.Chrome()
    30         self.driver.implicitly_wait(30)
    31         self.url="http://www.baidu.com"
    32         self.path=u"aa.xlsx"
    33 
    34     def test_baidu_search(self):
    35         driver=self.driver
    36         print u"开始第一个用例百度搜索"
    37         #加载测试数据
    38         testinfo=baidutest(self.path)
    39         data=testinfo.load()
    40         print data
    41         #循环参数化
    42         for d in data:
    43             #打开百度首页
    44             driver.get(self.url)
    45             #验证标题
    46             self.assertEqual(driver.title,u"百度一下,你就知道")
    47             sleep(1)
    48             driver.find_element_by_id("kw").clear()
    49             #参数化搜索词
    50             driver.find_element_by_id("kw").send_keys(d[0])
    51             sleep(1)
    52             driver.find_element_by_id("su").click()
    53             sleep(1)
    54             print d[0]
    55             print driver.title
    56             print d[1]
    57             #验证搜索结果的标题
    58             self.assertEqual(driver.title,d[1])
    59             sleep(2)
    60 
    61     def tearDown(self):
    62         self.driver.quit()
    63 
    64 if __name__=='__main__':
    65     test=unittest.TestSuite()
    66     test.addTest(baidu("test_baidu_search"))
    67     htmlpath=u"D:\aaaaaaaa.html"
    68     fp=file(htmlpath,'wb')
    69     runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"baidu测试",description=u"测试用例结果")
    70     runner.run(test)
    71     fp.close()

    打印结果:

    练习兔展的登录(参数化)

    表格数据:

    代码实例:

     1 #coding=utf-8
     2 from selenium import webdriver
     3 from selenium.common.exceptions import NoSuchElementException
     4 from selenium.webdriver.common.keys import Keys
     5 from selenium.webdriver.support.ui import WebDriverWait
     6 import time
     7 import xlrd
     8 def excel():
     9     data=xlrd.open_workbook('login.xlsx')
    10     table=data.sheet_by_index(0)
    11     nrows=table.nrows
    12     print nrows
    13     list=[]
    14     for i in range(1,nrows):
    15         print table.row_values(i)
    16         list.append(table.row_values(i))
    17         print list
    18     return list
    19 def login():
    20     listdata=excel()
    21     for d in listdata:
    22         driver=webdriver.Chrome()
    23         driver.get("http://www.rabbitpre.com/")
    24         time.sleep(3)
    25         driver.implicitly_wait(30)
    26         driver.maximize_window()
    27         driver.find_element_by_css_selector("span[class="login j-login"]").click()
    28         time.sleep(1)
    29         driver.switch_to_frame(1)
    30         print u"我要开始登陆咯"
    31         time.sleep(3)
    32         driver.find_element_by_xpath("//div[@id='LOGREG_1000']//input[@class='user-account']").clear()
    33         driver.find_element_by_xpath("//input[@class='user-account']").send_keys(str(d[0]))
    34         driver.find_element_by_xpath("//div[@id='LOGREG_1000']//div[contains(@class,'login-container')]//input[@class='user-pass']").clear()
    35         driver.find_element_by_xpath("//div[contains(@class,'login-container')]//input[@class='user-pass']").send_keys(str(d[1]))
    36         driver.find_element_by_xpath("//div[@id='LOGREG_1000']//div[contains(@class,'login-container')]//button").click()
    37         time.sleep(3)
    38         try:
    39             elem=driver.find_element_by_xpath("//div[@id='DIALOG_1000']//i[@class='icon icon-close']")
    40             print u"登陆成功"
    41         except NoSuchElementException:
    42             assert 0,u"登录失败,找不到兔展公告"
    43 
    44         driver.quit()
    45 if __name__ == '__main__':
    46     login()

     运行结果:

    需要注意的地方:

    1. 在参数化表格数据的时候,如果数据是手机号,在运行代码的时候会自己后面补一位小数(解决方法,在excel中输入的时候,前面补上一个单引号)
    2. 在第17行与第18行之间,一定要记住是在for语句循环之后才能return的。不然永远都只能return第一行的数据 
  • 相关阅读:
    Mybatis类型转换介绍
    简单的快捷方式
    一位资深程序员大牛给予Java初学者的学习路线建议
    题目1014:排名-----------------------此题是一个坑----------------------------------结构体还是用纯c语言不要夹杂c++
    题目1013:开门人和关门人----没有AC掉
    题目1038:Sum of Factorials
    题目1036:Old Bill------简单的模拟
    九度 题目1031:xxx定律
    九度 题目1020:最小长方形
    九度 题目1006:ZOJ问题-----------------我没有A掉
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/6652585.html
Copyright © 2020-2023  润新知