内容发布更新时间 : 2024/12/25 9:18:34星期一 下面是文章的全部内容请认真阅读。
(一)快速开始
Selenium 1.x时代已经远去,它理应躺在历史的角落里,靠着壁炉烤着火,抽着旱烟,在袅袅的升起的青烟中回忆那曾经属于自己的美好时代。
不过事实却并非如此,现今原本早应退役的selenium 1.x却还是多数人坚定的选择,究其原因不过是1.x时代遗留下了大量的文档,代码,教程让人们误以为1.x还是这个年代的主流,还应该光鲜亮丽在前台演出属于它的美好。长江后浪推前浪,最为前浪的selenium 1.x的宿命应该是死在沙滩上。
好了,直入主题,由于开源社区不再维护selenium 1.x再加之更为先进的selenium 2.0确实有不少优势之初可以完全取代1.x,在这里笔者会花一些笔墨,若干篇幅,争取深入浅出的讲解selenium 2.0的一些基本知识,常用方法和高级扩展,但由于笔者水平和时间精力等确实有限,文中应该避免不了谬误和臆断之处,还望众位读者多多海涵。
本文中所以代码和示例均由Ruby编写,本文介绍的webdriverapi也主要是ruby binding。所以首先请确保ruby语言在开发环境上正确安装。 教程的第一节从selenium 2.0和webdriver关系说起。
Selenium 2.0 和webdriver之间有什么关系,有什么不可告人的秘密?说来话长,但也简单。Selenium 2.0其实就是webdriver。就像张飞就是张翼德,关羽就是关云长一样,叫法不同但内容却是一样的。
安装selenium webdriver
? ?
安装ruby1.8.7或1.9.2。注意selenium-webdriver只支持1.8.7以上的ruby版本; 使用gem安装selenium-webdriver;打开命令行,输入下列代码完成安装。注意,如果你的开发环境需要http proxy的话,请注意在gem命令中加入--http_proxy参数; gem install selenium-webdriver [--http_proxy]
? 在命令行中输入gem list,如果selenium-webdriver正确安装,则其应该出现在结果列表里。在文本写作时,selenium webdriver的最新版本应该是2.2.0; gem list selenium-webdriver
? 安装firefox。本文使用firefox作为测试浏览器进行讲解,所以请确保开发环境上正确安装了firefox。由于firefox版本更新较快,我们只需要选择1个稳定版本安装既可,本文中笔者使用的版本是FF 5.0;
简单的google test
下面我们写几行代码在初次感受一下webdriver的魅力,好吧,说老实话原生的selenium webdriver并没有什么独特的魅力,相反到是watir-webdriver更加的平易近人老少咸宜。这个不是文本讨论的范畴,暂且打住。 view plain 1. require 'rubygems'
2. require 'selenium-webdriver' 3.
4. driver = Selenium::WebDriver.for :firefox 5. driver.navigate.to \ 6. sleep 3 7.
8. element = driver.find_element(:name, 'q') 9. element.send_keys \ 10. element.submit 11.
12. puts driver.title 13.
14. driver.quit
如果一切顺利的话,这几行代码将会打开firefox浏览器,然后转跳到google首页。等待3秒后在搜索框中输入Hello WebDriver并提交搜索结果至后台。然后在命令行打印出当前页面的title,并关闭ff浏览器。
如果你的代码不能顺利运行,请从如下几个方面进行检查。
? ? ? ?
ruby的版本是否是1.8.7以上并正确安装; 代码中是否require 'rubygems'; 是否正确安装了Selenium WebDriver; 代码输入是否有误;
Selenium-WebDriver ruby binding的安装实际上非常的简单和快速,稍微有点ruby基础的读者应该能够顺利的自行完成。
下一节将介绍webdriver的启动和关闭,欢迎继续关注。
(2)浏览器的简单操作
上一讲我们介绍了如何部署selenium 2.0的开发环境,这一讲我们将介绍如何使用selenium提供给我们的接口进行浏览器的简单操作。
本文将先介绍适合初级用户的一些常用方法,然后将对一些高级用法和实现源码进行稍微深入一些的分析。
如何打开一个测试浏览器
做自动化测试一般情况下我们都需要首先打开测试浏览器,浏览器开启后我们方可\命令\浏览器去打开新页面,点击特定的链接,判断具体的逻辑等等。因此该操作为\万里长征的第一步\,必须给以重视。具体代码如下。需要注意的是如果使用chrome进行测试,那么必须下载安装chrome driver。 view plain 1. require 'rubygems'
2. require 'selenium-webdriver' 3. # 打开firefox
4. dr = Selenium::WebDriver.for :firefox 5. dr = Selenium::WebDriver.for :ff 6. # 打开ie
7. dr = Selenium::WebDriver.for :ie
8. dr = Selenium::WebDriver.for :internet_explorer 9. # 打开chrome
10. dr = Selenium::WebDriver.for :chrome
如何打开1个具体的url
打开浏览器后我们需要转到我们的测试url。下面的代码可以达成这个目的。 view plain 1. require 'rubygems'
2. require 'selenium-webdriver'
3. dr = Selenium::WebDriver.for :firefox 4. # 使用get方法 5. dr.get url
6. # 使用navigate方法,然后再调用to方法 7. dr.navigate.to url
如何关闭浏览器
测试结束后往往需要关闭浏览器,下面的代码可以完成这个任务。 view plain 1. require 'rubygems'
2. require 'selenium-webdriver'
3. dr = Selenium::WebDriver.for :firefox 4. dr.get url 5. # 使用quit方法 6. dr.quit
7. # 使用close方法 8. dr.close
如何返回当前页面的url
有时候我们需要返回当前测试页面的url。比如在使用soso进行搜索时,当我们提交了搜索请求后,soso返回的url应该是包含我们所需要搜索的关键字的。 例如如果我们搜索webdriver,那么提交搜索请求后,页面应当转到url为
http://www.soso.com/q?pid=s.idx&cid=s.idx&w=webdriver的页面,这时候我们取到这个页面的url,然后通过正则表达式去匹配一下就能够得到我们所搜索的关键字了。具体代码如下。 view plain 1. require 'rubygems'
2. require 'selenium-webdriver'
3. dr = Selenium::WebDriver.for :firefox 4. url = 'http://www.soso.com' 5. dr.navigate.to url
6. search_input = dr.find_element :id => 's_input' 7. search_input.send_keys 'webdriver' 8. search_input.submit
9. match = dr.current_url.match(/\\b\\w+$/) 10. keyword = match[0] if match
如何返回当前页面的title
view plain 1. require 'rubygems'
2. require 'selenium-webdriver'
3. dr = Selenium::WebDriver.for :firefox 4. url = 'http://www.soso.com' 5. dr.navigate.to url 6. puts dr.title
其他方法
? ? ? ?
window_handles : 返回当前所有打开浏览器的窗口句柄 window_handle:返回当前的浏览器的窗口句柄 page_source : 返回当前页面的源码
visible? : 当前浏览器是否可见,并不保证支持所有浏览器
深入讨论
操作浏览器的方法主要封装在lib\\selenium\\webdriver\\common\\driver.rb文件中。
该文件定义了Selenium::WebDriver::Driver类。我们启动浏览器就是调用这个类的for方法。
(3)如何执行一段js脚本
有时候在进行自动化测试时需要在页面上执行一段js脚本,这个时候就需要用到execute_script方法了。 view plain 1. require 'rubygems'
2. require 'selenium-webdriver' 3. dr = Selenium::WebDriver.for :ie 4. url = 'http://www.soso.com' 5. dr.navigate.to url 6. sleep 3 7. js = < 8. q = document.getElementById(\); 9. q.style.border = \; 10. JS 11. 12. dr.execute_script js 上面的代码打开了SoSo的首页,并高亮显示了id为\的div。 下面的例子演示了在打开QQ首页的时候如何自动focus到页面上的soso搜索框 view plain