Selenium + Python的Excel数据参数化

Python 获取到Excel一列值后怎么用selenium录制的脚本中参数化,比如对登录用户名和密码如何做参数化?

答:可以使用xlrd读取Excel的内容进行参数化。当然为了便于各位小伙伴们详细的了解,小编一一介绍具体的方法。

Selenium的环境准备:

1.安装Java 
2.安装Python2.7 
3.安装pip 
4.通过pip安装selenium 
5.下载Selenium服务端并运行

搜狗测试公众号之前分享过类似内容,同时网上也有比较详细的教程,所以略过。如果小伙伴们不了解此处的内容,建议参考(http://www.cnblogs.com/fnng/archive/2013/05/29/3106515.html)

编写登录用例:

  1. Step1:访问http://www.effevo.com (打个广告effevo是搜狗自研发的项目管理系统,完全免费,非常好用)
  2. Step2:点击页面右上角的登录
  3. Step3:输入用户名和密码后登录
  4. Step4:检查右上角的头像是否存在

实现代码:

  1. # encoding: utf-8
  2. '''
  3. Created on 2016年5月4日
  4. @author: Dongming
  5. '''
  6. from selenium import webdriver
  7. from selenium.common.exceptions import NoSuchElementException
  8. from selenium.webdriver.common.keys import Keys
  9. from selenium.webdriver.support.ui import WebDriverWait
  10. import time
  11. browser = webdriver.Firefox()
  12. browser.get( "http://www.effevo.com")
  13. assert "effevo" in browser.title
  14. #点击登录按钮
  15. browser.find_element_by_xpath( ".//*[@id='home']/div/div[2]/header/nav/div[3]/ul/li[2]/a").click()
  16. time.sleep( 1)
  17. browser.find_element_by_id( 'passname').send_keys( 'selenium0012@126.com')
  18. browser.find_element_by_id( 'password').send_keys( 'test1234')
  19. browser.find_element_by_xpath( ".//*[@id='content']/div/div[6]/input").click()
  20. time.sleep( 2)
  21. try:
  22. elem = browser.find_element_by_xpath( ".//*[@id='ee-header']/div/div/div/ul[2]/li/a/img")
  23. except NoSuchElementException:
  24. #if elem == None:
  25. assert 0 , u"登录失败,找不到右上角头像"
  26. browser.close()


制作Excel文件:

下一步,我们要对以上输入的用户名和密码进行参数化,使得这些数据读取自Excel文件。我们将Excel文件命名为data.xlsx,其中有两列数据,第一列为username,第二列为password。 
Excel截图

安装xlrd第三方库

Python读取Excel文件需要使用第三方的库文件xlrd,我们到python官网下载http://pypi.python.org/pypi/xlrd模块安装。

1.下载xlrd-0.9.4.tar.gz 
2.解压该文件。由于该文件是用tar命令压缩的,所以建议windows用户用7zip解压,解压后内容如下: 
7zip截图 
3.命令行运行Setup.py文件:setup.py install 
安装xlrd 
4.提示安装完毕后,我们就可以在python脚本中import xlrd了。

xlrd读取Excel文件:

xlrd库文件操作Excel的几个重要函数是

  1. data = xlrd.open_workbook( 'excelFile.xls') #打开Excel文件读取数据
  2. table = data.sheets()[ 0] #通过索引顺序获取获取一个工作表
  3. table.row_values(i) # 获取整行的值(数组)
  4. nrows = table.nrows #获取行数

为了方便使用,我们把以上用到的函数封装为excel_table_byindex()函数。 
实现代码:

  1. import xlrd
  2. def open_excel(file= 'file.xls'):
  3. try:
  4. data = xlrd.open_workbook(file)
  5. return data
  6. except Exception,e:
  7. print str(e)
  8. #根据索引获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_index:表的索引
  9. def excel_table_byindex(file= 'file.xls',colnameindex=0,by_index=0):
  10. data = open_excel(file)
  11. table = data.sheets()[by_index]
  12. nrows = table.nrows #行数
  13. colnames = table.row_values(colnameindex) #某一行数据
  14. list =[]
  15. for rownum in range( 1,nrows):
  16. row = table.row_values(rownum)
  17. if row:
  18. app = {}
  19. for i in range(len(colnames)):
  20. app[colnames[i]] = row[i]
  21. list.append(app)
  22. return list

Excel数据参数化:

  1. # encoding: utf-8
  2. '''
  3. Created on 2016年5月4日
  4. @author: Dongming
  5. '''
  6. from selenium import webdriver
  7. from selenium.common.exceptions import NoSuchElementException
  8. from selenium.webdriver.common.keys import Keys
  9. from selenium.webdriver.support.ui import WebDriverWait
  10. import time
  11. import xlrd
  12. #import xdrlib ,sys
  13. def open_excel(file= 'file.xls'):
  14. try:
  15. data = xlrd.open_workbook(file)
  16. return data
  17. except Exception,e:
  18. print str(e)
  19. #根据索引获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_index:表的索引
  20. def excel_table_byindex(file= 'file.xls',colnameindex=0,by_index=0):
  21. data = open_excel(file)
  22. table = data.sheets()[by_index]
  23. nrows = table.nrows #行数
  24. colnames = table.row_values(colnameindex) #某一行数据
  25. list =[]
  26. for rownum in range( 1,nrows):
  27. row = table.row_values(rownum)
  28. if row:
  29. app = {}
  30. for i in range(len(colnames)):
  31. app[colnames[i]] = row[i]
  32. list.append(app)
  33. return list
  34. def Login():
  35. listdata = excel_table_byindex( "E:\\data.xlsx" , 0)
  36. if (len(listdata) <= 0 ):
  37. assert 0 , u"Excel数据异常"
  38. for i in range( 0 , len(listdata) ):
  39. browser = webdriver.Firefox()
  40. browser.get( "http://www.effevo.com")
  41. assert "effevo" in browser.title
  42. #点击登录按钮
  43. browser.find_element_by_xpath( ".//*[@id='home']/div/div[2]/header/nav/div[3]/ul/li[2]/a").click()
  44. time.sleep( 1)
  45. browser.find_element_by_id( 'passname').send_keys(listdata[i][ 'username'])
  46. browser.find_element_by_id( 'password').send_keys(listdata[i][ 'password'])
  47. browser.find_element_by_xpath( ".//*[@id='content']/div/div[6]/input").click()
  48. time.sleep( 2)
  49. try:
  50. elem = browser.find_element_by_xpath( ".//*[@id='ee-header']/div/div/div/ul[2]/li/a/img")
  51. except NoSuchElementException:
  52. assert 0 , u"登录失败,找不到右上角头像"
  53. browser.close()
  54. if __name__ == '__main__':
  55. Login()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值