1. 概述
Python是当今世界上最流行的编程语言之一,具有简洁、清晰、易读等特点。Selenium是一个用于Web应用程序测试的工具,支持各种浏览器,支持各种操作系统。Selenium Python WebDriver是Selenium WebDriver的Python语言版本.在实际的项目中,使用Selenium WebDriver进行自动化测试是非常常见的。
下面将会介绍如何使用Python Selenium实现自动化测试过程。
2. 环境配置
2.1 安装Python
首先需要安装Python,可到官网 https://www.python.org/downloads/ 下载Python安装文件,按照提示安装即可。
Python版本建议使用3.6以上版本。
2.2 安装Selenium
可以使用pip安装selenium。命令如下:
pip install selenium
如果没有安装pip,可以到官网下载安装pip工具
2.3 安装浏览器驱动
Selenium内置了Firefox浏览器的驱动程序,而Chrome、 IE、Edge 等浏览器的驱动,则需要自己下载,建议下载对应Chrome版本的驱动。
将下载好的驱动放到Python的安装目录下,或放到环境变量中去,方便程序调用。
Chrome驱动下载链接: https://chromedriver.chromium.org/downloads
Firefox驱动下载链接: https://github.com/mozilla/geckodriver/releases
3. 实现方式
Web自动化主要运用到Selenium的WEB自动化技术,实现对Web网站的自动化测试。在Python中通过调用selenium的webdriver模块,可以控制各个浏览器进行网页的一系列操作。
3.1 创建WebDriver对象
from selenium import webdriver
driver = webdriver.Chrome() # 创建chrome driver对象
driver = webdriver.Firefox() # 创建Firefox driver对象
driver = webdriver.Edge() # 创建Edge driver对象
driver = webdriver.Ie() # 创建IE driver对象
3.2 打开和关闭浏览器
driver.get('https://www.baidu.com')
driver.quit() # 关闭浏览器
3.3 定位元素
可以使用Selenium的 find_element_by_*系列方法定位元素。其中* 表示标签类型。例如:
driver.get('https://www.baidu.com')
input_box = driver.find_element_by_id('kw') #通过id属性定位元素
input_box = driver.find_element_by_name('wd') #通过name属性定位元素
input_box = driver.find_element_by_xpath('//*[@id="wp-submit"]') #通过Xpath定位元素
input_box = driver.find_element_by_tag_name('a') #通过标签名定位元素
input_box = driver.find_element_by_class_name('s-isindex-wrap ') #通过class属性定位元素
input_box = driver.find_element_by_link_text('搜索一下') #通过链接文本定位元素
input_box = driver.find_element_by_partial_link_text('搜索') #通过部分链接文本定位元素
3.4 模拟用户的操作
可以使用Selenium对定位到的元素进行一系列操作,例如清空、输入、弹起键盘、滚动页面等。
from selenium.webdriver.common.keys import Keys #引入Keys类,可使用键盘模拟按键
input_box = driver.find_element_by_id('kw')
input_box.clear() # 清除输入框
input_box.send_keys('Python Selenium') # 向输入框中输入内容
input_box.send_keys(Keys.RETURN) # 点击键盘上的回车,实现搜索功能
3.5 等待元素的出现
有时候页面的元素出现时需要等待一定的时间。可以使用Selenium提供的等待功能,来解决这个问题。
3.5.1 sleep方法等待
此方法会让线程挂起一定时间,等待元素出现。
import time
input_box = driver.find_element_by_id('kw')
input_box.send_keys('Python Selenium')
input_box.submit()
time.sleep(3) # 等待3秒,页面加载出现
3.5.2 显式等待
在代码中指定等待时间,等待元素出现,如果设定时间内元素出现了则继续执行程序,否则抛出找不到元素的异常。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver.get('https://www.baidu.com')
input_box = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID, 'kw'))) # 等待元素出现
input_box.send_keys('Python Selenium')
input_box.submit()
4. 测试框架搭建
使用原始方式编写测试脚本,常常需要不断的去维护代码,这无疑对工作的效率和代码的质量有很大的影响。因此,使用测试框架编写自动化测试脚本是一个较好的解决方案。
本文采用unittest测试框架来撰写测试用例。unittest 是 Python 内置的测试框架,可以用来编写和运行测试用例。
4.1 unittest简介
unittest 是 Python 惯用的测试框架,它具有功能完善,使用方便,易于扩展的特性。unittest 是基于 Java 开发的 JUnit 构建而成,是 Python 原生的测试框架。unittest 提供了几个重要概念:
Test Case(测试用例):测试用例是指一个测试单位,例如测试一个函数、类、方法等。
Test Fixture(测试固件):测试固件是指建立测试环境,包括初始化数据库、测试用户登录等。测试固件可以帮助我们简化测试用例的复杂度。
Test Suite(测试套件):多个测试用例的集合,可以基于 Test Suite 去运行测试用例。
Test Runner(测试运行器):执行测试用例集的工具,输出测试结果。
4.2 搭建unittest测试框架
4.2.1 创建测试文件
首先需要创建一个测试文件test.py,代码如下:
#test.py
import unittest
class MyTestCase(unittest.TestCase):
def test_selenium(self):
# 测试代码
self.assertEqual(1+1, 2)
if __name__ == '__main__':
unittest.main()
代码中定义了 MyTestCase 类,它是 unittest.TestCase 的子类。我们将测试用例的集合定义在 MyTestCase 中,通过在 MyTestCase 中创建单元测试方法,测试方法都必须以“test_”开头,且该方法仅有一个参数 self。
4.2.2 运行测试用例
在test.py文件目录下,运行以下命令:
python test.py
这个命令会遍历test.py中的所有测试用例,执行测试用例的方法。在执行方法期间,如果出现assert错误,则该测试用例被认为是执行失败的;反之,则测试用例被认为是执行成功的。
4.3 将Selenium应用于unittest测试场景中
在unittest中使用Selenium的例子:
class Testbaidu(unittest.TestCase):
# 初始化方法
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
# 测试方法
def test_baidu_news(self):
self.driver.get('https://www.baidu.com/')
self.driver.find_element_by_link_text('新闻').click() # 点击新闻链接
assert '百度新闻' in self.driver.title # 断言标题中包含'百度新闻'
# 清理方法
def tearDown(self):
self.driver.quit()
在TestCase中setUp方法是TestCase中的预处理方法,每次测试用例被运行前都会调用它;
tearDown是清理方法,也是定义在TestCase中的,每次测试用例执行后都会被该方法调用。该例子中运行测试用例之前首先调用setUp方法,打开浏览器并打开百度首页;接着运行测试用例test_baidu_news,该用例点击百度新闻链接,然后通过assert判断页面标题是否包含百度新闻关键字;最后在tearDown方法中关闭浏览器并退出。
总结
本文介绍了Python Selenium自动化测试框架的搭建方法步骤。首先,需要安装Python、Selenium和浏览器驱动;其次,可以使用Selenium对元素进行定位、操作等功能;最后,可以借助unittest测试框架进行Web自动化测试用例编写。
Python Selenium是广泛应用于测试开发的工具,在开发测试用例的时候要注意代码可读性、可维护性、可扩展性