一、Selenium简介
Selenium是一个web自动化应用测试工具,还支持所有的web的管理任务自动化。并且开源免费,也是一个web自动化轻量级框架。它支持多种浏览器、跨平台、跨操作系统、支持多种编程语言编写脚本,还能进行分布式测试用例的执行。
Selenium经历三个版本,Selenium1、Selenium2、Selenium3。它不是单独的一个工具,而是由一些类库、插件、工具等组合而成。主要的工具:
Selenium IDE:Selenium IDE是嵌入火狐浏览器中的一个插件,主要用于浏览器操作失误录制与回放,而且录制的脚本可以转换成多种语言,可以通过转换的语言进行开发测试脚本。初级学习人员可以先通过该插件入手学习Selenium自动化测试。
Selenium Grid:自动化辅助工具,能够加快Web-APP的功能测试。
Selenium RC:Selenium 核心部分,能够支持多种不同编程语言进行编写自动化测试脚本,例如常用Java和python语言进行编写selenium自动化测试脚本。
WebDriver:在Selenium 2.0版本中,新增加了WebDriver. WebDriver是专门针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver还能够利用操作系统级的调用来模拟用户输入。除了支持各个浏览器,还能支持安卓跟iPhone移动应用测试。
二、Windows测试环境的搭建
1、安装Python
本文主要是基于python语言的自动化测试,首先要安装python。在网络上下载最新本的python3.6版本。如果Windows是32位,则选择x86版本下载安装,如果是64位操作系统,则选择64版本。本文以64版本为例。下载完成后,双击安装程序包进行安装,一般选择自定义安装,并且勾选自动添加环境变量,如下图所示:
(1)安装过程跟安装一般的软件一样操作,安装完成之后可以在开始菜单中看到安装好的python目录,如下图所示:
(2)安装完成之后就可以打开自带的IDLE编写Python程序,如图所示:
2、pip安装
pip是一个安装和管理python包的工具。导入一些python非内置的类库、模块、工具等就是用pip安装。但现在版本的Python安装包已集成pip,不需要我们另外进行安装了。检查python是否已经集成安装pip,我们可以通过在安装目录下查看Script是否有pip.exe等文件,如下图:如果有可以直接使用pip命令。
3、seleniumd安装
上述所述安装pip,就是为了方便安装Selenium包。通过pip命令可以直接安装Selenium包,不过在安装Selenium时最好选择低版本的,一般选择Selenium2.0以上,Selenium3.0以下的版本比较合适。要想安装selenium某个版本,需要在命令里面指定版本号安装,例如:
>>>pip install selenium==2.53.0
4、JetBrains PyCharm 安装
JetBrains PyCharm是python开发环境的编译器。PyCharm具备一般IDE的功能,比如, 调试代码、语法高亮、Project管理、智能提示、单元测试等。
(1)首先下载安装包,然后自定义安装,按照一般软件安装即可。
(2)安装好后首次使用需要进行配置,一般选择默认即可。
(3)设置好后新建项目会提示选择python版本,选择我们安装的路径即可。如图:
5、浏览器驱动安装
WebDriver支持各种浏览器,但是需要安装对应的浏览器驱动才能正常调用浏览器运行。根据自己的系统和浏览器下载不同版本的驱动,下载的驱动文件需要放置到系统环境变量Path下面,浏览器安装文件下,例如火狐浏览器驱动,如图:
三、selenium自动化测试基础知识
1、调用浏览器驱动,访问地址方法
driver = webdriver.Firefox()
driver.get("网址")
2、定位元素方法
Id 定位: find_element_by_id() id必须是唯一的
Name定位:find_element_by_name()
Class定位:find_element_by_class_name()
Tag 定位:find_element_by_tag_name()
Link定位:find_element_by_link_text() 专门定位文本链接
Partial link定位:find_element_by_partial_link_text()
Xpath定位:
(1)绝对路径定位
find_element_by_xpath(“html/body/div/div[2]/div/div/div/from/span/input”)
(2)元素属性定位:find_element_by_xpath(“//input[@id=’kw’]”)
(3)层级与属性结合:find_element_by_xpath(“//form[@id=’form’]/span/input”)
(4)使用逻辑运算符find_element_by_xpath(“//input[@id=’kw’ and @class=’su’/span/input]”)
CSS 定位:
(1)通过class属性定位:find_element_by_css_selector(“.s_ipt”)
(2)通过id属性定位:find_elememt_by_css_selector(“#kw”)
(3)通过标签名定位:find_element_css_selector(“input”)
1)通过父子关系定位:find_element_css_selector(“span>input”)
2)通过属性定位:find_element_by_css_selector(“[name=’kw’]”)
3)通过组合定位:find_element_by_css_selector(“form.fm>span>input.s_ipt”)
By定位元素:find_element(By.ID,”kw”)
3、设置浏览器大小
driver.set_window_size(480, 800):设置浏览器大小(480,800)
4、提交输入框数据
driver.find_element_by_id('txtUser').send_keys('黄文婷'):提交登录账号黄文婷
5、鼠标操作
ActionChains 类提供的鼠标操作的常用方法:
perform() 执行所有ActionChains 中存储的行为
context_click() 鼠标右击
double_click() 鼠标双击
drag_and_drop() 鼠标拖动
move_to_element() 鼠标悬停
6、休眠方法
sleep(3):设置休眠3秒
7、表单切换
switch_to_frame() 默认可以直接取表单的id 或name 属性进行切换。
8、多窗口切换
current_window_handle:获得当前窗口句柄
window_handles:返回的所有窗口的句柄到当前会话
switch_to_window():用于切换到相应的窗口
9、处理警告框
text :获取alert/confirm/prompt 中的提示信息。
Accept:点击确认按钮。
dismiss :击取消按钮。
四、简单示例
以下是一个简单的自动化登录测试用例:
#coding=utf-8
from selenium import webdriver
import unittest
import time
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
class SouthInfoManagePlatform(unittest.TestCase):
def setUp(self):
print('开始执行测试用例')
self.driver = webdriver.Firefox()
self.driver.get("http://192.168.10.42:8787/")
def tearDown(self):
# self.driver.quit()
print('测试用例执行结束!')
def test_scenario_001(self):
"一个简单的测试场景"
print('用户登录:')
self.driver.find_element_by_id('txtUser').clear()#取消默认账号
self.driver.find_element_by_id('txtUser').send_keys('黄文婷')#用户名
self.driver.find_element_by_id('txtUser').clear()
self.driver.find_element_by_id('txtPwd').send_keys('123')#密码
logincode=self.driver.get_cookies()[1]["value"]
self.driver.find_element_by_xpath(".//*[@id='txtCheckCode']").send_keys(logincode)
#time.sleep(3)
self.driver.find_element_by_name('IbtnLogin').click()
time.sleep(3)