建设网站论文,网站策划与建设实训心得,WordPress使用中文链接好吗,企业管理网站模板欢迎阅读WebDriver基础讲义。本篇讲义将会重点介绍Selenium WebDriver的环境搭建和基本使用方法。
WebDriver环境搭建 Selenium WebDriver 又称为 Selenium2。 Selenium 1 WebDriver Selenium 2 WebDriver是主流Web应用自动化测试框架#xff0c;具有清晰面向对象 API…欢迎阅读WebDriver基础讲义。本篇讲义将会重点介绍Selenium WebDriver的环境搭建和基本使用方法。
WebDriver环境搭建 Selenium WebDriver 又称为 Selenium2。 Selenium 1 WebDriver Selenium 2 WebDriver是主流Web应用自动化测试框架具有清晰面向对象 API能以最佳的方式与浏览器进行交互。
支持的浏览器
Mozilla FirefoxGoogle ChromeMicrosoft Internet ExplorerOperaSafariApple iPhoneAndroid browsers
环境搭建步骤
在上一篇中我们已经确认使用Python来进行WebDriver的编码和操作。事实上PythonSelenium WebDriver环境的搭建分为两个部分
安装python安装Selenium
标准的安装步骤
选择Python的版本。
Python主流的有两个大的版本2.7和3.5请注意从Python的3.5版本开始不再支持Windows XP操作系统Windows XP用户请安装3.4版本。我们的例子将会选用面向未来的3.5版本。
安装Python。
在Python的官网下载最新的安装包进行界面安装。https://www.python.org/
安装的时候推荐选择“Add exe to path”将会自动添加Python的程序到环境变量中。然后可以在命令行输入python -V检测安装的Python版本。
当前的版本安装中将会默认已经安装了setuptools和pip这两个Python的基本工具。如果使用了比较旧的Python版本的话需要自行安装这两个工具。
setuptoolsPython的基础工具包用来构建、安装卸载Python程序 pipPython软件包的安装和管理工具。通过pip可以简单的安装Python的任意类库 安装Selenium2.0版本。
在Windows安装Selenium2.0有两种途径。使用pip命令行或者源码安装。以下两种方法使用任何一个均可。推荐pip的方式。
方法一pip命令行安装运行 | cmd打开命令行-U其实就是–upgrade升级安装。
pip install -U selenium方法二源码解压安装前往https://pypi.python.org/pypi/selenium下载最新版的PyPI版本的Selenium解压后执行
python setup.py installUbuntu下的环境搭建
在Ubuntu下的Python的解释器一般情况下已经存在了。我们需要打开终端输入python -V命令进行验证。如果没有安装Python那么需要去Python官网上下载指定版本的源文件进行源码安装。安装完了以后并进行环境变量的设置。
安装Selenium WebDriver的方法与上述在Windows环境下安装部署的方法一致。依旧推荐使用pip命令行进行安装。
使用IDE编写Python
在上述环境搭建好以后我们便可使用Python来编写自动化脚本程序执行Selenium自动化测试。在此之前我们依旧需要解决一个问题那就是IDE的选择。
IDEIntegrated Development Environment集成开发环境。一个好的编辑器或者好的IDE将会极大的提高生产力帮我们做很多事情使得编码工作更加简单编码的体验更加容易。一般情况下我们有以下几种工具可以选择
IDLEPython自带的IDE功能简单使用方便Notepad一个强大的开源编辑器VimLinux系统中最好用的编辑器之一Sublime Text一个非常轻便好用的现代化的编辑器推荐。PyCharmJetBrains公司提供的现代化的跨平台的Python IDE。
使用Sublime Text 3搭建Python环境
**通过快捷键Ctrl 或者View Show Console打开控制台输入以下代码并回车
import urllib.request,os; pf Package Control.sublime-package;
ipp sublime.installed_packages_path();
urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) );
open(os.path.join(ipp, pf), wb).write(urllib.request.urlopen( http://sublime.wbond.net/ pf.replace( ,%20)).read())安装完以后重启Sublime Text 3如果在Perferences-package settings中看到package control这一项则安装成功按下CtrlShiftP调出命令面板输入install package选项并回车输入i匹配到以后按回车安装。Anaconda是一个终极的Python插件。安装完了以后便可用Sublime Text 3编写Python代码并且使用Ctrl B来编译执行。
一般来说一个好的IDE提供一下功能使你的编码开发工作变得更有效率
一个图形化的智能代码提示和补全功能可以轻松查看方法和类语法高亮提供单元测试和调试的工具源代码版本管理工具的支持
我们可以尝试用上述的编辑器或者IDE来进行Python代码编写工作。
开始使用WebDriver
接下来我们尝试几个简单的例子来体会一下Selenium WebDriver的使用。
示例1
## 引入WebDriver的包
from selenium import webdriver## 创建浏览器对象
browser webdriver.Firefox()## 打开百度网站
browser.get(https://www.baidu.com/)示例2
## 引入WebDriver包
from selenium import webdriver## 引入WebDriver Keys包
from selenium.webdriver.common.keys import Keys## 创建浏览器对象
browser webdriver.Firefox()## 导航到百度主页
browser.get(https://www.baidu.com)## 检查标题是否为‘百度一下你就知道’
assert 百度一下你就知道 in browser.title## 找到名字为wd的元素赋值给elem
elem browser.find_element_by_name(wd) # 找到搜索框
elem.send_keys(seleniumhq Keys.RETURN) # 搜索seleniumhq## 关闭浏览器
browser.quit()Selenium 3.0.1 出现的问题以及解决
3.0.1 更新以后需要做两个操作
Geckodriver executable needs to be in PATH。Geckodirver的下载地址https://github.com/mozilla/geckodriver/releases 报错内容:
WebDriverException:Message:geckodriverexecutable needs to be in Pathgeckodriver是一原生态的第三方浏览器对于selenium3.x版本都会使用geckodriver来驱动firefox所以需要下载geckodriver.exe。放置在Path 环境变量可以访问到的地方。例如 C:\python34 需要将火狐的安装路径放到path然后重启必须重启电脑 报错内容
selenium.common.exceptions.WebDriverException: Message: geckodriver executable needs to be in PATH.参考地址http://***.com/questions/40208051/selenium-using-python-geckodriver-executable-needs-to-be-in-path/40208762
XAMPP的安装部署和环境搭建
XAMPP的安装在Windows操作系统中比较简单可以直接运行安装文件默认全部下一步即可完成软件的安装。
请注意Windows XP系统只能可以 XAMPP 1.8.2版本Windows 7以及以上的系统可以安装最新版的XAMPP。XAMPP不分32位和64位操作系统。
XAMPP的部署
XAMPP OS Apache MySQL PHP Perl
我们一般部署的网站符合XAMPP环境的话只需要启动Apache和MySQL两个应用。
部署步骤
启动Apache启动MySQL解压网站源文件例如解压然之ranzhi.2.5.zip请把压缩包里面的ranzhi这个文件夹解压出来禅道也类似需要把压缩包中的zentaopms文件夹解压出来部署源文件请将解压以后的源文件放到xampp\htdocs文件夹中通过浏览器访问部署好的网站源文件进行向导安装。http://localhost/ranzhi/www PS:这里我们主要支持的是PHPMySQL开发的网站部署。
XAMPP的问题解决 无法启动Apache请认真查看日志判断80和443端口被什么样的程序占用需要关闭对应程序或者修改Apache的端口。 IIS控制面板 | 管理工具 | Internet信息服务 | 默认网站 | 关闭VisualSVN Server 控制面板 | 管理工具 | VisualSVN Server | 关闭VMware Workstation 开始 | VMware Workstation | 编辑 | 首选项 | 共享虚拟机 | 禁用共享HP LoadRunner 右侧任务栏 | 右键 | 关闭修改XAMPP Apache 端口Config | httpd.conf修改Linsten 80 | Httpd-ssl.conf修改 Listen 443 无法启动MySQL请认真查看错误日志找到已经启动的MySQL的程序进程杀掉该进程。
使用unittest编写测试脚本
通过上面的例子我们可以简单的写出Selenium WebDriver的脚本但是对于测试工作来说上述的脚本还远远不够。因为上述的脚本没有“检查”。
接下来我们将会使用Python语言的unittest框架展开“检查”。
unittest基础
unittest框架的原本的名字是PyUnit。是从JUnit这样一个被广泛使用的Java应用开发的单元测试框架创造而来。类似的框架还有NUnit.Net开发的单元测试框架等。
我们可以使用unittest框架为任意Python项目编写可理解的单元测试集合。现在这个unittest已经作为Python的标准库模块发布。我们安装完Python以后便可以直接使用unittest。
unittest框架提供了编写test casestest suites和test fixtures的基本功能。我们首先关注 Test cases的编写与执行。
使用unittest需要以下简单的三步
引入unittest模组继承unittest.TestCase基类测试方法以test开头
unittest示例
## 引入unittest模组
import unittest## 定义测试类名字为DemoTests
## 该类必须继承unittest.TestCase基类
class DemoTests(unittest.TestCase):## 使用修饰符注明该方法是类的方法## setUpClass方法是在执行测试之前需要先调用的方法## 是开始测试前的初始化工作classmethoddef setUpClass(cls):pass## 测试一务必以test开头def test_01(self):pass## 测试三务必以test开头def test_02(self):pass## 测试三务必以test开头def test_03(self):pass## tearDownClass方法是执行完所有测试后调用的方法## 是测试结束后的清除工作classmethoddef tearDownClass(cls):pass# 执行测试主函数
if __name__ __main__:## 执行main全局方法将会执行上述所有以test开头的测试方法unittest.main(verbosity2)Python知识的补充
Python文件的后缀名是.py.py文件可以用来直接执行。也可以被用来作为模块导入。在cmd命令行中执行的命令为python demo.py在Python中导入模块模组一般使用的是import
使用unittest框架编写Selenium WebDriver测试
接下来我们查看一个完整的Selenium WebDriver自动化测试实例
实例
keywordimport unittest
keywordfrom selenium keywordimport webdriver
keywordfrom selenium.webdriver.common.keys keywordimport Keyskeywordclass SearchTests(unittest.TestCase):keyworddef setUp(self):# 创建一个新的浏览器对象self.driver webdriver.Firefox()self.driver.implicitly_wait(30)self.driver.maximize_window()# 导航到京东主页self.driver.get(https://www.jd.com/)keyworddef test_search_by_category(self):# 获取到搜索框self.search_field self.driver.find_element_by_id(key)self.search_field.clear()# 输入iphone 6s plus并按下回车进行搜索self.search_field.send_keys(iphone 6s plus Keys.RETURN)# 获取所有的查询结果products self.driver.find_elements_by_css_selector(li[classgl-item])# 断言检查查询出来的个数是否为24个self.assertEqual(24, len(products))keyworddef tearDown(self):# 关闭浏览器对象self.driver.quit()keywordif __name__ __main__:unittest.main(verbosity2)理解unittest框架提供的各种断言方法 定位符
元素的定位和操作是自动化测试的核心部分其操作是建立在定位的基础上的。因此我们首选要开始定位元素。
在html里面元素具有各种各样的属性。我们可以通过这样唯一区别其他元素的属性来定位到这个元素。WebDriver提供了一系列的元素定位方法。常见的有以下几种
idnameclass nametaglink textpartial link textxpathcss selector
查找简单元素
我们从简单的一个元素开始定位。最基本的方法是id和name。大多数元素有这两个属性在对控件的id和name命名是一般也会使其有意义而取不同的名字。
例如我们看下面这段html
input /我们可以使用对应的方法来定位这个input
find_element_by_id(search)
find_element_by_name(q)
find_element_by_class_name(input-text)这里我们开始用最简单的方式来尝试定位
查看下面一个例子
self.driver.get(http://pro.demo.zentao.net)
# 用name定位用户文本输入框
self.account_field self.driver.find_element_by_name(account)
# 用name定位密码文本输入框
self.password_field self.driver.find_element_by_name(password)
self.account_field.clear()
self.password_field.clear()
self.driver.implicitly_wait(30)# 输入用户名demo
self.account_field.send_keys(demo)
# 输入密码123456
self.password_field.send_keys(123456)
self.driver.find_element_by_id(submit).click()
self.driver.implicitly_wait(30)companyname self.driver.find_element_by_id(companyname)
self.assertEqual(demo项目管理系统, companyname.text)示例2
self.driver.find_element_by_id(menuproduct).click()
self.driver.implicitly_wait(30)self.driver.find_element_by_id(menuproject).click()
self.driver.implicitly_wait(30)self.driver.find_element_by_id(menuqa).click()
self.driver.implicitly_wait(30)self.driver.find_element_by_id(menudoc).click()
self.driver.implicitly_wait(30)self.driver.find_element_by_id(menureport).click()
self.driver.implicitly_wait(30)self.driver.find_element_by_id(menucompany).click()
self.driver.implicitly_wait(30)self.driver.find_element_by_link_text(退出).click()
self.driver.implicitly_wait(30)此外XPath定位和CSS Selector定位和定位一组元素这样的内容案例将在后续的讲义继续探讨和讲解。
控制浏览器
浏览器的控制也是自动化测试的一个基本组成部分我们可以将浏览器最大化设置浏览器的高度和宽度以及对浏览器进行导航操作等。
## 浏览器最大化
driver.maximize_window()## 设置浏览器的高度为800像素宽度为480像素
driver.set_window_size(480, 800)## 浏览器后退
driver.back()## 浏览器前进
driver.forward()这里我们做一个综合性的练习实例
# codingutf-8
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
# import sys
# reload(sys)
# sys.setdefaultencoding(utf8)class WebDriverTests(unittest.TestCase):classmethoddef setUpClass(cls):# create a new Firefox sessioncls.driver webdriver.Firefox()cls.driver.get(about:blank)cls.driver.implicitly_wait(30)print( -- set up finished -- )print()def test_01_navigate(self):passurl_baidu https://www.baidu.com/url_zentao http://pro.demo.zentao.net/user-login-Lw.html# 导航到百度self.driver.get(url_baidu)self.driver.maximize_window()self.driver.implicitly_wait(30)# 导航到禅道self.driver.get(url_zentao)self.driver.maximize_window()self.driver.implicitly_wait(30)# 后退self.driver.back()self.assertEqual(url_baidu, self.driver.current_url)self.driver.implicitly_wait(30)# 前进self.driver.forward()self.assertEqual(url_zentao, self.driver.current_url)self.driver.implicitly_wait(30)print(-- test 01 finished -- )print()def test_02_element_interaction(self):self.driver.get(http://pro.demo.zentao.net)## 找到用户名和密码的输入框self.account_field self.driver.find_element_by_name(account)self.password_field self.driver.find_element_by_name(password)## 清除当前的输入self.account_field.clear()self.password_field.clear()self.driver.implicitly_wait(30)## 输入用户名和密码进行登录self.account_field.send_keys(demo)self.password_field.send_keys(123456)self.driver.find_element_by_id(submit).click()self.driver.implicitly_wait(30)companyname self.driver.find_element_by_id(companyname)self.assertEqual(demo项目管理系统, companyname.text)print(companyname.get_attribute(type))print()self.driver.implicitly_wait(30)print(-- test 02 finished -- )print()def test_03_element_interation2(self):## 这里执行了一段JavaScript代码js selectTheme(green)self.driver.execute_script(js)self.driver.implicitly_wait(30)js selectTheme(red)self.driver.execute_script(js)self.driver.implicitly_wait(30)js selectTheme(lightblue)self.driver.execute_script(js)self.driver.implicitly_wait(30)js selectTheme(blackberry)self.driver.execute_script(js)self.driver.implicitly_wait(30)self.driver.find_element_by_id(menuproduct).click()self.driver.implicitly_wait(30)self.driver.find_element_by_id(menuproject).click()self.driver.implicitly_wait(30)self.driver.find_element_by_id(menuqa).click()self.driver.implicitly_wait(30)self.driver.find_element_by_id(menudoc).click()self.driver.implicitly_wait(30)self.driver.find_element_by_id(menureport).click()self.driver.implicitly_wait(30)self.driver.find_element_by_id(menucompany).click()self.driver.implicitly_wait(30)self.driver.find_element_by_link_text(退出).click()self.driver.implicitly_wait(30)WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable((By.ID, submit)))self.driver.implicitly_wait(30)print(-- test 03 finished -- )print()def test_04_cookies(self):self.driver.add_cookie({name: key-neeeeew, value: value-neeeewwwww})# 遍历cookies 中的name 和value 信息打印当然还有上面添加的信息for cookie in self.driver.get_cookies():print(%s - %s % (cookie[name], cookie[value]))print()self.driver.delete_all_cookies()cookies self.driver.get_cookies()print(cookies)print()print(-- test 04 finished -- )print()classmethoddef tearDownClass(cls):# close the browser windowcls.driver.quit()passprint(-- tear down finished -- )print()if __name__ __main__:unittest.main(verbosity2)最后下方这份完整的软件测试视频学习教程已经整理上传完成朋友们如果需要可以自行免费领取 【保证100%免费】