【提问答疑】Selenium + Python的Excel数据参数化

背景

最近一段时间微信公众号得到了众多网友的留言,微信编辑部的小编们欣喜若狂,在此感谢各位小伙伴们的厚爱。为了与大家进行互动交流,小编认真地查看每一条小伙伴们的留言,有问Fiddler抓包工具的问题,有问自动化selenium的问题,当然还有问小剪子去哪儿了,O(∩_∩)O~。小编决定这期的文章挑一个自动化方面大家都比较关心的问题进行解答:

问: 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:检查右上角的头像是否存在

实现代码:

# encoding: utf-8
‘‘‘
Created on 2016年5月4日

@author: Dongming
‘‘‘

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import time

browser = webdriver.Firefox()
browser.get("http://www.effevo.com")
assert "effevo" in browser.title

#点击登录按钮
browser.find_element_by_xpath(".//*[@id=‘home‘]/div/div[2]/header/nav/div[3]/ul/li[2]/a").click()
time.sleep(1)

browser.find_element_by_id(‘passname‘).send_keys(‘[email protected]‘)
browser.find_element_by_id(‘password‘).send_keys(‘test1234‘)
browser.find_element_by_xpath(".//*[@id=‘content‘]/div/div[6]/input").click()

time.sleep(2)
try:
        elem = browser.find_element_by_xpath(".//*[@id=‘ee-header‘]/div/div/div/ul[2]/li/a/img")
except NoSuchElementException:
#if elem == None:
        assert 0 , u"登录失败,找不到右上角头像"
browser.close()

制作Excel文件:

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

安装xlrd第三方库

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

1.下载xlrd-0.9.4.tar.gz

2.解压该文件。由于该文件是用tar命令压缩的,所以建议windows用户用7zip解压,解压后内容如下:

3.命令行运行Setup.py文件:setup.py install

4.提示安装完毕后,我们就可以在python脚本中import xlrd了。

xlrd读取Excel文件:

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

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

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

实现代码:

import xlrd

def open_excel(file= ‘file.xls‘):
        try:
                data = xlrd.open_workbook(file)
                return data
        except Exception,e:
                print str(e)
        #根据索引获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_index:表的索引
def excel_table_byindex(file= ‘file.xls‘,colnameindex=0,by_index=0):
        data = open_excel(file)
        table = data.sheets()[by_index]
        nrows = table.nrows #行数
        colnames = table.row_values(colnameindex) #某一行数据
        list =[]
        for rownum in range(1,nrows):
                row = table.row_values(rownum)
                if row:
                        app = {}
                        for i in range(len(colnames)):
                                app[colnames[i]] = row[i]
                                list.append(app)
        return list 

Excel数据参数化:

# encoding: utf-8

‘‘‘
Created on 2016年5月4日

@author: Dongming
‘‘‘

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import time
import xlrd

#import xdrlib ,sys
def open_excel(file= ‘file.xls‘):
        try:
                data = xlrd.open_workbook(file)
                return data
        except Exception,e:
                print str(e)
        #根据索引获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_index:表的索引
def excel_table_byindex(file= ‘file.xls‘,colnameindex=0,by_index=0):
        data = open_excel(file)
        table = data.sheets()[by_index]
        nrows = table.nrows #行数
        colnames = table.row_values(colnameindex) #某一行数据
        list =[]
        for rownum in range(1,nrows):
                row = table.row_values(rownum)
                if row:
                        app = {}
                        for i in range(len(colnames)):
                                app[colnames[i]] = row[i]
                                list.append(app)
        return list

def Login():

        listdata = excel_table_byindex("E:\\data.xlsx" , 0)

        if (len(listdata) <= 0 ):
                assert 0 , u"Excel数据异常"

        for i in range(0 , len(listdata) ):
                browser = webdriver.Firefox()
                browser.get("http://www.effevo.com")
                assert "effevo" in browser.title

                #点击登录按钮
                browser.find_element_by_xpath(".//*[@id=‘home‘]/div/div[2]/header/nav/div[3]/ul/li[2]/a").click()
                time.sleep(1)

                browser.find_element_by_id(‘passname‘).send_keys(listdata[i][‘username‘])
                browser.find_element_by_id(‘password‘).send_keys(listdata[i][‘password‘])
                browser.find_element_by_xpath(".//*[@id=‘content‘]/div/div[6]/input").click()

                time.sleep(2)
                try:
                        elem = browser.find_element_by_xpath(".//*[@id=‘ee-header‘]/div/div/div/ul[2]/li/a/img")
                except NoSuchElementException:
                        assert 0 , u"登录失败,找不到右上角头像"
                browser.close()
if __name__ == ‘__main__‘:
    Login()
时间: 2024-12-30 06:10:13

【提问答疑】Selenium + Python的Excel数据参数化的相关文章

Selenium+python自动化21-TXT数据参数化

前言      在17篇我们讲了excel数据的参数化,有人问了txt数据的参数化该怎么办呢,下面小编为你带你txt数据参数化的讲解 一.以百度搜索为例,自动搜索五次不同的关键字.输入的数据不同从而引起输出结果的变化. 测试脚本: 1 #coding=utf-8 2 from selenium import webdriver 3 import unittest, time, os 4 class Login(unittest.TestCase): 5 def test_login(self):

Selenium2+python自动化20-Excle数据参数化

前言 问: Python 获取到Excel一列值后怎么用selenium录制的脚本中参数化,比如对登录用户名和密码如何做参数化? 答:可以使用xlrd读取Excel的内容进行参数化.当然为了便于各位小伙伴们详细的了解,小编一一介绍具体的方法. 一.编写登录用例: Step1:访问http://www.effevo.com (打个广告effevo是搜狗自研发的项目管理系统,完全免费,非常好用)Step2:点击页面右上角的登录Step3:输入用户名和密码后登录Step4:检查右上角的头像是否存在实现

Selenium2+python自动化20-Excel数据参数化【转载】

前言 问: Python 获取到Excel一列值后怎么用selenium录制的脚本中参数化,比如对登录用户名和密码如何做参数化? 答:可以使用xlrd读取Excel的内容进行参数化.当然为了便于各位小伙伴们详细的了解,小编一一介绍具体的方法. 一.编写登录用例: Step1:访问http://www.effevo.com (打个广告effevo是搜狗自研发的项目管理系统,完全免费,非常好用)Step2:点击页面右上角的登录Step3:输入用户名和密码后登录Step4:检查右上角的头像是否存在实现

Selenium之利用Excel实现参数化

Selenium之利用Excel实现参数化 说明:我是通过Workbook方式来读取excel文件的,这次以登陆界面为例 备注:使用Workbook读取excel文件,前提是excel需要2003版本,其他版本暂时不支持 具体步骤: 第一步:新建一个excel文件,并且输入数据内容 第二步:在eclipse中新建一个java class,编写获取excel文件的代码 CODE: import java.io.File; import java.io.IOException; import jav

python结合excel数据轻松实现接口自动化测试(一)

在刚刚进入测试行业的时候,最开始也是做功能测试,我想很多伙伴和我一样,觉得自动化测试都很高端,很神秘.迫不及待的想去学习作自动化测试. 以前比较常用数据库+python做自动化,后面发现excel个人觉得更加适合,刚开始自己做自动话测试的时候,很急切的想立刻搭建好整个框架,但心急吃不了热豆腐, 还是从基本的开始,这里介绍python结合excel数据实现单个接口自动化测试的步骤,理解了这个,后面就可以用到整个框架,封装成公用模块,批量读取数据,执行数据. 现在以我们公司的一登录接口为列,输入参数

Selenium2+python自动化21-TXT数据参数化

前言      在17篇我们讲了excel数据的参数化,有人问了txt数据的参数化该怎么办呢,下面小编为你带你txt数据参数化的讲解 一.以百度搜索为例,自动搜索五次不同的关键字.输入的数据不同从而引起输出结果的变化. 测试脚本: #coding=utf-8from selenium import webdriverimport unittest, time, osclass Login(unittest.TestCase): def test_login(self): source = ope

Selenium2+python自动化21-TXT数据参数化【转载】

前言      在17篇我们讲了excel数据的参数化,有人问了txt数据的参数化该怎么办呢,下面小编为你带你txt数据参数化的讲解 一.以百度搜索为例,自动搜索五次不同的关键字.输入的数据不同从而引起输出结果的变化. 测试脚本: #coding=utf-8from selenium import webdriverimport unittest, time, osclass Login(unittest.TestCase): def test_login(self): source = ope

python读取excel数据

excel是很常用的表格工具.不过,对程序员来说,这可不是件好事件.因为excel的数据既不像txt那样,随意一种语言.脚本,写个函数就能把数据读出来分析.也不像JSON这种开源的数据格式,有N多的开源库来读取.就算没有,知道数据格式,自己写个库也自己用不至于太难. 要想读取excel的数据,大多使用ODBC数据库驱动或者COM的方式.对于ODBC,不同的语言有不同的实现,如java的JDBC.而对于COM方式,几乎是在后台运行一个excel程序,像new Excel.Application()

Selenium——selenium之利用excel实现参数化

说明:我是通过Workbook方式来读取excel文件的,这次以登陆界面为例 备注:使用Workbook读取excel文件,前提是excel需要2003版本,其他版本暂时不支持 具体步骤: 第一步:新建一个excel文件,并且输入数据内容 第二步:在eclipse中新建一个java class,编写获取excel文件的代码 import java.io.File; import java.io.IOException; import java.util.ArrayList; import jav