Selenium是一个简便的Web应用软件测试框架。Selenium的组件Selenium IDE支持录制/回放。它还支持Python,Java,C#,javascript等语言。支持Windows,Linux和Macintosh。它是 开源软件,根据Apache2.0许可证发布的,并可以下载并无偿使用。
Selenium来源于由杰森·哈金斯(Jason Huggins)在2004年在ThoughtWorks的开发内部工具,后面有ThoughtWorks的其他程序员和测试人员在 ThoughtWorks加入。后来Paul Hammant加入开发了'Selenium Remote Control' (RC)并开源。
2005年Dan Fabulich和Nelson Sproul在Pat Lightbody的帮助下给Selenium-RC做了一些补丁。同时ThoughtWorks在Huggins和Hammant代表的情况下组建了Selenium委员会。
2007年哈金斯和Jennifer Bevan等加盟谷歌。他继续Selenium RC的开发和稳定。与此同时,西蒙·斯图尔特(Simon Stewart)在ThoughtWorks开发出了卓越的浏览器自动化工具webdriver。2009年在谷歌测试自动化大会上决定合并两个项目,新项目叫Selenium WebDriver,即Selenium 2.0。
2008年,ThoughtWorks的Philippe Hanrigou开发了'Selenium Grid',支持同时在任意数量的本地或远程系统执行多个Selenium测试,从而减少测试执行时间。Selenium Grid提供类似谷歌内部Selenium RC云项目的功能,但是它是开源的。Pat Lightbody也开发了一个类似的私有云:'HostedQA',并卖给了Gomez公司。
当时有个类似的软件叫Mercury,及汞,哈金斯就取名为硒,可以通过服用硒补充剂治愈汞中毒。
支持浏览器: Firefox、Internet Explorer、Google Chrome、Safari和Opera。
支持操作系统:Linux, Windows和Mac OS X。
Selenium IDE
Selenium IDE是Selenium测试完整的集成开发环境(IDE)。它是Firefox插件,并允许录制,编辑和调试。这是以前被称为Selenium Recorder,最初是由Shinya Kasatani开发并于2006年捐赠给Selenium。
脚本会自动录制,可以事后编辑,编辑时可以自动完成并快速移动命令。脚本记录在Selenese的(Selenium特殊的测试脚本语言)。Selenese可以在浏览器中执行操作命令(如点击链接,选择选项),并从网页中检索数据。
Selenium client API
目前支持Python, Java,C#,Ruby。
Selenium Remote Control(webdriver已经弃用)
Selenium Remote Control (RC)是Java编写的服务,通过HTTP接收浏览器的命令(类似代理服务器)。RC支持多种编程语言对Web应用进行测试,方便集成进语言的单元测试 框架。支持PHP,Python和Ruby,.NET,Perl和Java客户端驱动程序。java驱动通过Rhino engine支持JavaScript。一个端口只支持一个实例,但是Java/PHP中一个端口可以支持多个实例。RC来源于Paul Hammant和Jason。
Selenium Remote Control来源于Paul Hammant的Driven Selenium或Selenium B。最初的版本直接在编程语言中启动进程和浏览器交互,Selenese在各种语言中实现。Dan Fabulich和Nelson Sproul在Pat Lightbody的帮助下改进后,测试脚本和和浏览器之间增加了守护进程,这样就可以驱动远程浏览器,并只需要维护一套Selenese语言。2006 年RC完全替代Driven Selenium。RC和Driven Selenium浏览器模式是响应/请求,即Comet。
Selenium 2发布时,已经建议用webdriver替代RC。
Selenium WebDriver:
Selenium WebDriver是RC的替代。它接受命令(Selenese或者API),并发送给浏览器。调用特定浏览器的驱动,发送命令到浏览器,并获取结果。多 数浏览器驱动启动和访问浏览器应用程序(如Firefox或Internet Explorer);另外还有浏览器的HtmlUnit驱动程序,它用模拟使用浏览器。
Selenium WebDrive不需要特殊的服务器来执行测试。webdriver直接启动浏览器实例并控制它。Selenium Grid可以用于的webdriver执行远程测试。
2012年初,Simon Stewart(webdriver的发明者,当时在google工作,现在在Facebook)和Mozilla的David Burns与W3C协商将WebDriver作为互联网标准。2013年初草案发布,Selenium-Webdriver为参考实现。目前 Selenium-WebDriver在Python和Ruby,Java和C#有完整的支持。
Selenium Grid(Selenium standalone server)
Selenium Grid是允许在远程机器上运行的Web浏览器实例的服务。Selenium Grid允许运行测试在多台计算机上并行,以及管理的不同版本的浏览器和浏览器配置。甚至支持移动操作系统:Android和Apple iOS。
Selenium WebDriver python client可以访问Selenium WebDriver和Selenium standalone server,开发人员:David Burns, Adam Goucher, Maik Röder,Jason Huggins, Luke Semerau, Miki Tebeka和Eric Allenin。支持python版本2.6, 2.7, 3.2和3.3。
安装:
pip install -U selenium
文档
API文档
官方文档
Selenium Wiki
需要选择一个合适IDE,要求如下:
代码完成和智能提示的图形化代码编辑器
函数和类的代码浏览器
语法高亮
项目管理
代码模板
单元测试和调试
源代码控制支持
推荐:WingIDE,PyCharm,PyDev Eclipse plugin,PyScripter。相关下载地址如下:
WingIDE
pycharm
Eclipse
PyDev安装教程
PyDev官网
PyScripter
实例1:在网站python自动化测试上面寻找webdriver相关的页面,并输出相关的网址:
#!/usr/bin/env python # encoding: utf-8 import time from selenium import webdriver # create a new Firefox session driver = webdriver.Firefox() driver.implicitly_wait(30) driver.maximize_window() # navigate to the application home page driver.get("http://automationtesting.sinaapp.com/") # get the search textbox search_field = driver.find_element_by_name("q") search_field.clear() # enter search keyword and submit search_field.send_keys("webdriver") search_field.submit() time.sleep(6) products = driver.find_elements_by_xpath("//a[@class='searchable']") # get the number of anchor elements found print "Found " + str(len(products)) + " pages:" # iterate through each anchor element and # print the text that is name of the product for product in products: print product.get_attribute('href') # close the browser window driver.quit()
selenium.webdriver实现了浏览器驱动类,涉及 Firefox, Chrome, Internet Explorer, Safari等浏览器及用于测试远程机器的类RemoteWebDriver。
driver.implicitly_wait(30)表示最多等待页面打开的时间为30秒。
执行结果:
Found 2 pages: http://automationtesting.sinaapp.com/blog/python_selenium1 http://automationtesting.sinaapp.com/blog/appium
实例2打开网址,搜索产品,并列出产品名。实例的网站为:magentocommerce,代码下载地址:learnsewithpython。
from selenium import webdriver # create a new Firefox session driver = webdriver.Firefox() driver.implicitly_wait(30) driver.maximize_window() # navigate to the application home page driver.get("http://demo.magentocommerce.com/") # get the search textbox search_field = driver.find_element_by_name("q") search_field.clear() # enter search keyword and submit search_field.send_keys("phones") search_field.submit() # get all the anchor elements which have product names displayed # currently on result page using find_elements_by_xpath method products = driver.find_elements_by_xpath("//h2[@class='product-name']/a") # get the number of anchor elements found print "Found " + str(len(products)) + " products:" # iterate through each anchor element and # print the text that is name of the product for product in products: print product.text # close the browser window driver.quit()
执行结果:
Found 2 products: MADISON EARBUDS MADISON OVEREAR HEADPHONES
selenium下载页面地址。为了在Internet Explorer上面执行,需要下载配置InternetExplorerDriver服务,它是测试脚本和Internet Explorer之间的胶水。
在上述下载页面搜索InternetExplorerDriver,下载32位或者64位版本,并解压到合适的目录。在IE7以上的版本,选择Tools 菜单下面的Internet Options,在弹出窗口选择Security标签,把每个zone的Protected Mode设置为关或者开启的情况都设置为中。另外要特别注意IE的缩放要选择为100%才正确地进行坐标对应。
实例1:
#!/usr/bin/env python # encoding: utf-8 import time from selenium import webdriver ie_driver_path = "e:\IEDriverServer.exe" # create a new Firefox session driver = webdriver.Ie(ie_driver_path) driver.implicitly_wait(30) driver.maximize_window() # navigate to the application home page driver.get("http://automationtesting.sinaapp.com/") # get the search textbox search_field = driver.find_element_by_name("q") search_field.clear() # enter search keyword and submit search_field.send_keys("webdriver") search_field.submit() time.sleep(6) products = driver.find_elements_by_xpath("//a[@class='searchable']") # get the number of anchor elements found print "Found " + str(len(products)) + " pages:" # iterate through each anchor element and # print the text that is name of the product for product in products: print product.get_attribute('href') # close the browser window driver.quit()
实例2:
import os from selenium import webdriver # get the path of IEDriverServer # dir = os.getcwd() ie_driver_path = "e:\IEDriverServer.exe" # create a new Internet Explorer session driver = webdriver.Ie(ie_driver_path) driver.implicitly_wait(30) driver.maximize_window() # navigate to the application home page driver.get("http://demo.magentocommerce.com/") # get the search textbox search_field = driver.find_element_by_name("q") search_field.clear() # enter search keyword and submit search_field.send_keys("phones") search_field.submit() # get all the anchor elements which have product names displayed # currently on result page using find_elements_by_xpath method products = driver.find_elements_by_xpath("//h2[@class='product-name']/a") # get the number of anchor elements found print "Found " + str(len(products)) + " products:" # iterate through each anchor element and # print the text that is name of the product for product in products: print product.text # close the browser window driver.quit()
执行结果和火狐的类似。
参考资料:
InternetExplorerDriver
DesiredCapabilities
ChromeDriver由Chromium开发,安装方法和IE的类似,但是不需要设置Protected Mode。 实例1:
#!/usr/bin/env python # encoding: utf-8 import time from selenium import webdriver # get the path of chromedriver chrome_driver_path = r"e:\chromedriver.exe" #remove the .exe extension on linux or mac platform # create a new Chrome session driver = webdriver.Chrome(chrome_driver_path) driver.implicitly_wait(30) driver.maximize_window() # navigate to the application home page driver.get("http://automationtesting.sinaapp.com/") # get the search textbox search_field = driver.find_element_by_name("q") search_field.clear() # enter search keyword and submit search_field.send_keys("webdriver") search_field.submit() time.sleep(6) products = driver.find_elements_by_xpath("//a[@class='searchable']") # get the number of anchor elements found print "Found " + str(len(products)) + " pages:" # iterate through each anchor element and # print the text that is name of the product for product in products: print product.get_attribute('href') # close the browser window driver.quit()
实例2:
import os from selenium import webdriver # get the path of chromedriver chrome_driver_path = r"e:\chromedriver.exe" #remove the .exe extension on linux or mac platform # create a new Chrome session driver = webdriver.Chrome(chrome_driver_path) driver.implicitly_wait(30) driver.maximize_window() # navigate to the application home page driver.get("http://demo.magentocommerce.com/") # get the search textbox search_field = driver.find_element_by_name("q") search_field.clear() # enter search keyword and submit search_field.send_keys("phones") search_field.submit() # get all the anchor elements which have product names displayed # currently on result page using find_elements_by_xpath method products = driver.find_elements_by_xpath("//h2[@class='product-name']/a") # get the number of anchor elements found print "Found " + str(len(products)) + " products:" # iterate through each anchor element and # print the text that is name of the product for product in products: print product.text # close the browser window driver.quit()
参考资料:
ChromeDriver
chromium chromedriver
作者:Unmesh Gundecha
评审:Adil Imroz:alam.adil12#gmail.com Twitter at @adilimroz
评审:Dr . Philip Polstra 介绍 博客
评审: Walt Stoneburner: wls#wwco.com Walt.Stoneburner#gmail.com 博客
维基百科Selenium英文介绍
作者博客:http://my.oschina.net/u/1433482
类型:翻译加整理