python selenium自动化测试框架搭建的方法步骤

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是广泛应用于测试开发的工具,在开发测试用例的时候要注意代码可读性、可维护性、可扩展性

后端开发标签