selenium-webdriver简单教程

  • 格式:pdf
  • 大小:113.21 KB
  • 文档页数:4

selenium-webdriver简单教程

ruby环境下selenium/webdriver可以通过selenium-webdriver.gem包进⾏安装

gem install selenium-webdriver

⽀持语⾔及版本有ruby 1.8.7~1.9.2,jrbuy和rubinius

selenium-webdriver包含了selenium-client,在阅读的时候,要注意它们两个命名空间是在两不同的API⾥:

1.Selenium::WebDriver - WebDrver API

2.Selenium::Client - Selenium RC API

WebDrver API是继承⾃Selenium RC API,所以没有必要在Selenium RC API花⼤量的时间,我们可以直接从Selenium::WebDriver开始,并围绕两个⼤类:Seleniu::WebDriver:Driver

和Selenium::WebDriver::Element,这是整个WebDriver API的⼊⼝。

API 例⼦:

⼀个简单的例⼦:require "selenium-webdriver"

driver = Selenium::WebDriver.for :firefox

driver.navigate.to "http://www.google.com.hk"

element = driver.find_element(:name,'q')

element.send_keys "Hello WebDriver"

element.submit

puts driver.title

driver.quit

Driver 例⼦:

# 应⽤javascript

puts driver.execute_script("return window.location.pathname")

# 利⽤ruby和js获取元素

element = driver.execut_script("return document.body")

driver.execut_script("return arguments[0].tagname", element) #=> "BODY"

# 等待⼀些特殊元素的出现

wait = Selenium::WebDriver::Wait.new(:timeout=>10) # seconds

wait.until{driver.find_element(:id,"foo")}

# 注:wait在new时,可以设置三个值,分别为:timeout(默认5秒),:message(默认nil),:interval(默认0.5)

# 选择frame

driver.switch_to.frame "some-frame" # name或id

driver.switch_to.frame driver.find_element(:id, 'some-frame') # frame

# 注:switch_to⽅法不仅可以选择frame,还可以处理window,alert,comfirmation等窗⼝

# 选择回主窗⼝

driver.swith_to.default_content

Element 例⼦:

# 获取元素属性

class_name = element.attr

ibute("class")

# 判断元素是否显⽰

element.displayed?

# 获取元素在页⾯上的相对坐标位置

element.location

element.location.x

element.location.y

# 将元素滚动到视频可以显⽰的位置,再返回元素的相对坐标

element.location_once_scrolled_into_view

# 获取元素的宽和⾼

element.size

# 在元素⾥输⼊空,参看Selenium::WebDriver::Keys输⼊值

element.send_keys :space

element.send_keys "tet", :arrow_left, "s" #=> "test", 先输⼊ tet, 再输⼊⼀次左⽅向键,再输⼊s

element.send_keys [:control, 'a'], "1" #=> "1", 先输⼊crtl+a,再输⼊1

# 获取元素⽂本

element.text

更⾼级的⽤法(见 ActionBuilder)driver.action.key_down(:shift).click(element).double_click(second_element).key_up(:shift).drag_and_drop(element,third_element).perform

启动chrome浏览器的⽅法 1.下载并运⾏,如图

2.启动chrome

driver = Selenium::WebDriver.for :remote, :url=>"http://localhost:9515"

driver.get "http://www.google.com.hk"

其它操作⼀样。

如果这样感觉⽐较⿇烦,可以将下载的chromedriver.exe路径加载到环境变量中,就可直接⽤了driver = Selenium::WebDriver.for :chrome

chrome个性化启动

profile = Selenium::WebDriver::Chrome::Profile.new

profile['download.prompt_for_download'] = false

profile['download.default_directory'] = "d:/download"

driver = Selenium::WebDriver.for :chrome, :profile=>profile

Remote应⽤

可以控制浏览器在不同的机器上运⾏,下载selenium-server-standlone-x.xx.x.jarjava -jar selenium-server-standalone.jar '启动服务

driver = Selenium::WebDriver.for :remote

默认情况下,可以启动服务运⾏在localhost:4444,并打开firefox。如果想连接其它机器上的服务,可以⽤:url选项driver = Selenium::WebDriver.for :remote, :url=>"http://remoteserver:44444/wd/hub"

本机不⽤加/wd/hub,但远程⼀定要加

启动其它的浏览器,⽤:desired_capabilities选项driver = Selenium::WebDriver.for :remote, :desired_capabilities=>:chrome

Selenium::WebDriver::Remote::Capabilities的例⼦

require "selenium-webdriver"

include Selenium

caps = WebDriver::Remote::Capabilities.htmlunit :javascript_enabled=>true

driver = WebDriver.for :remote, :desired_capalibities=>caps

修改remote服务的端⼝号,⽬前只⽀持firefox

include Selenium

caps = WebDriver::Remote::Capabilities.firefox (:proxy=>WebDriver::Proxy.new(:http=>"myproxyaddress:8888"))

driver = WebDriver.for :remote, :desired_capalibities=>caps

如果是⼀个远程的remote服务

include Selenium

client = WebDriver::Remote::Http::Default.new

client.proxy = Proxy.new :http=>"proxy.org:8888"

driver = WebDriver.for :remote, :http_client=>client

Firefox

加扩展插件

在⽤firefox时,经常要⽤到firebug进⾏查看,启动firefox带firebuginclude Selenium

profile = WebDriver::Firefox::Profile.new

profile.add_extension "path/firebug.xpi"

driver = WebDriver.for :firefox, :profile=>profile

使⽤已经存在的profile

使⽤⼀个已经存在的profile模板,可以⽤firefox -profilemanger把profile保存出来(这个命令在ff8上似乎⽆⽤,还要进⼀步验证)

driver = Selenium::WebDriver.for :firefox, :profile=>"my_existing_profile"

如果想⽤默认profile,可以通过 :profile=>"default"

或者也可以这通过profile实例来使⽤已经存在的和⾃定义的profile。此⽅法不能修改已经存在的profile,且只能在webdriver下使⽤

default_profile = Selenium::WebDriver::Firdfox::Profile.from_name "default"

default_profile.native_events = true

driver = Selenium::WebDriver.for :firefox, :profile=>default_profile

导出firefox profile见