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

时间:2022-03-04 10:19:38

1.安装xlrd

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

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

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

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

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

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:\Python27\python.exe "D:/PyCharm Community Edition 5.0.3/代码/excel.py"
    [u
    '\u82b1\u82b1 ', u'\u82b1\u82b1_\u767e\u5ea6\u641c\u7d22']
    [u
    'bb', u'\u82b1\u82b1_\u767e\u5ea6\u641c\u7d22', u'\u563f\u563f_\u767e\u5ea6\u641c\u7d22', u'\u62c9\u62c9_\u767e\u5ea6\u641c\u7d22']

    注意:行号,列号是从索引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:\Python27\python.exe "D:/PyCharm Community Edition 5.0.3/代码/excel.py"
    aa
    拉拉_百度搜索

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

   注意:索引是从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

 

打印结果:xlrd的使用详细介绍以及基于Excel数据参数化实例详解

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()

打印结果:

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

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

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

代码实例:

 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()

 运行结果:

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

需要注意的地方:

  1. 在参数化表格数据的时候,如果数据是手机号,在运行代码的时候会自己后面补一位小数(解决方法,在excel中输入的时候,前面补上一个单引号)
  2. 在第17行与第18行之间,一定要记住是在for语句循环之后才能return的。不然永远都只能return第一行的数据