码迷,mamicode.com
首页 > 编程语言 > 详细

selenium+python—实现基本自动化测试

时间:2016-07-09 17:55:37      阅读:376      评论:0      收藏:0      [点我收藏+]

标签:

安装selenium

打开命令控制符输入:pip install -U selenium

火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能

Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回放功能,IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本,下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/

如何使用IDE录制脚本:点击seleniumIDE——点击录制——开始录制——录制完成后点击文件Export Test Case——python/unittest/Webdriver——保存;

安装python

安装的时候,推荐选择“Add exe to path”,将会自动添加Python的程序到环境变量中。然后可以在命令行输入 python -V 检测安装的Python版本。

浏览器内壳:IE、chrome、FireFox、Safari

1、webdriver:用unittest框架写自动化用例(setUp:前置条件,tearDown清场)  

 1 import unittest
 2 from selenium import webdriver
 3 
 4 class Ranzhi(unittest.TestCase):
 5     def setUp(self):
 6        self.driver = webdriver.Firefox() #选择火狐浏览器
 7     def test_ranzhi(self):
 8        pass
 9     def tearDown(self):
10        self.driver.quit()#退出浏览器

2、断言,检查跳转的网页是否和实际一致

断言网址时需注意是否为伪静态(PATH_INFO)或者GET,前者采用路径传参数(sys/user-creat.html),后者通过字符查询传参数(sys/index.php?m=user&f=index)

当采用不同方式校验网址会发现变化。

1 self.assertEqual(self.driver.current_url, 
2                  "http://localhost:8080/ranzhi/www/sys/index.php?m=index&f=index", "登录跳转失败")

 技术分享

3、定位元素,在html里面,元素具有各种各样的属性。我们可以通过这样唯一区别其他元素的属性来定位到这个元素.

  WebDriver提供了一系列的元素定位方法。常见的有以下几种:id,name,link text,partial link text,xpath,css seletor,class,tag.

1 self.driver.find_element_by_xpath(//*[@id="s-menu-superadmin"]/button).click()
2 self.driver.find_element_by_id(account).send_keys(admin)
3 self.driver.find_element_by_link_text(u退出).click() 

 定位元素需注意的问题:

a.时间不够,采用两种方式(self.implicitly_wait(30),sleep(2))

b.函数嵌套(<iframe></iframe>)

1 # 进入嵌套
2   self.driver.switch_to.frame(iframe-superadmin)
3 #退出嵌套
4   self.driver.switch_to.default_content()

c.flash,验证码(关闭验证码或使用万能码)

d.xpath问题:最好采用最简xpath,当xpath中出现li[10]等时需注意,有时页面定位会出现问题

4、采用CSV存数据

    CSV:以纯文本形式存储表格数据(数字和文本),CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

1 melody101,melody101,m,1,3,123456,@qq.com
2 melody102,melody101,f,2,5,123456,@qq.com
3 melody103,melody101,m,3,2,123456,@qq.com
 1 import csv
 2 # 读取CSV文件到user_list字典类型变量中
 3 user_list = csv.reader(open("list_to_user.csv", "r"))
 4 # 遍历整个user_list
 5 for user in user_list:
 6     sleep(2)
 7     self.logn_in(admin, admin)
 8     sleep(2)
 9     # 读取一行csv,并分别赋值到user_to_add 中
10     user_to_add = {account: user[0],
11                     realname: user[1],
12                     gender: user[2],
13                     dept: user[3],
14                     role: user[4],
15                      password: user[5],
16                      email: user[0] + user[6]}
17      self.add_user(user_to_add)

5、对下拉列表的定位采用select标签

1 from selenium.webdriver.support.select import Select
2 # 选择部门
3 dp =self.driver.find_element_by_id(dept)
4 Select(dp).select_by_index(user[dept])
5 # 选择角色
6 Select(self.driver.find_element_by_id(role)).select_by_index(user[role])

 以下代码为登录“然之系统”,进入添加用户,循环添加用户并检测添加成功,再退出的过程

  1 import csv
  2 import unittest
  3 from time import sleep
  4 from selenium import webdriver
  5 from selenium.webdriver.support.select import Select
  6 
  7 class Ranzhi(unittest.TestCase):
  8     def setUp(self):
  9         self.driver = webdriver.Firefox()
 10 
 11     # 主函数
 12     def test_ranzhi(self):
 13         # 读取CSV文件到user_list字典类型变量中
 14         user_list = csv.reader(open("list_to_user.csv", "r"))
 15         # 遍历整个user_list
 16         for user in user_list:
 17             sleep(2)
 18             self.logn_in(admin, admin)
 19             sleep(2)
 20             # 读取一行csv,并分别赋值到user_to_add 中
 21             user_to_add = {account: user[0],
 22                            realname: user[1],
 23                            gender: user[2],
 24                            dept: user[3],
 25                            role: user[4],
 26                            password: user[5],
 27                            email: user[0] + user[6]}
 28             self.add_user(user_to_add)
 29             # 退出
 30             self.logn_out()
 31             sleep(2)
 32 
 33             # 用新账号登录
 34             self.logn_in(user_to_add[account], user_to_add[password])
 35             sleep(2)
 36             self.logn_out()
 37 
 38     # 模块化添加用户
 39     def add_user(self, user):
 40         driver = self.driver
 41         driver.find_element_by_xpath(//*[@id="s-menu-superadmin"]/button).click()
 42         sleep(1)
 43         # 进入嵌套
 44         driver.switch_to.frame(iframe-superadmin)
 45         sleep(2)
 46         # 点击添加用户
 47         driver.find_element_by_xpath(//*[@id="shortcutBox"]/div/div[1]/div/a/h3).click()
 48         sleep(3)
 49         # 添加用户名
 50         ac = driver.find_element_by_id(account)
 51         ac.send_keys(user[account])
 52         # 真实姓名
 53         rn = driver.find_element_by_id(realname)
 54         rn.clear()
 55         rn.send_keys(user[realname])
 56         # 选择性别
 57         if user[gender] == m:
 58             driver.find_element_by_id(gender2).click()
 59         elif user[gender] == f:
 60             driver.find_element_by_id(gender1).click()
 61         # 选择部门
 62         dp = driver.find_element_by_id(dept)
 63         Select(dp).select_by_index(user[dept])
 64         # 选择角色
 65         role = driver.find_element_by_id(role)
 66         Select(role).select_by_index(user[role])
 67         # 输入密码
 68         pwd1 = driver.find_element_by_id(password1)
 69         pwd1.clear()
 70         pwd1.send_keys(user[password])
 71 
 72         pwd2 = driver.find_element_by_id(password2)
 73         pwd2.send_keys(user[password])
 74         # 输入邮箱
 75         em = driver.find_element_by_id(email)
 76         em.send_keys(user[email])
 77         # 点击保存
 78         driver.find_element_by_id(submit).click()
 79         sleep(2)
 80         #退出嵌套
 81         driver.switch_to.default_content()
 82 
 83     def tearDown(self):
 84         self.driver.quit()
 85 
 86     # 登录账号
 87     def logn_in(self, name, password):
 88         driver = self.driver
 89         driver.get(http://localhost:8080/ranzhi/www)
 90         sleep(2)
 91 
 92         driver.find_element_by_id(account).clear()
 93         driver.find_element_by_id(account).send_keys(name)
 94         driver.find_element_by_id(password).clear()
 95         driver.find_element_by_id(password).send_keys(password)
 96         driver.find_element_by_id(submit).click()
 97         sleep(2)
 98         #断言
 99         self.assertEqual(self.driver.current_url,
100                          "http://localhost:8080/ranzhi/www/sys/index.html",登录跳转失败)
101 
102     # 退出账号
103     def logn_out(self):
104         self.driver.find_element_by_id(start).click()
105         sleep(1)
106         self.driver.find_element_by_link_text(u退出).click()
107         sleep(2)

 

selenium+python—实现基本自动化测试

标签:

原文地址:http://www.cnblogs.com/melodylin/p/5656185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!