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.下载ChromeDriver并运行,如图

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应用

RomteWebDriver可以控制浏览器在不同的机器上运行,下载selenium-server-standlone-x.xx.x.jar

java -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带firebug

include 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见《Firefox 8导出profile文件》

Firefox个性化设置

端口号

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

profile[‘browser.download.dir‘] = ‘d:\download‘

profile[‘browser.download.folderlist‘] = 2

profile[‘browser.helperApps.neverAsk.saveToDisk‘] = "application/pdf"

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

用remote driver启动时,任然可以对firefox进行个性化设置

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

profile[‘foo.bar‘] = true

capabilities = Selenium::WebDriver::Remote::Capabilities.firefox :firefox_profile=>profile

driver = Selenium::WebDriver.fox :remote, :desired_capabilities=>capabilities

设置Firefox路径

当firfox不是安装在默认路径中时,要设定firefox的安装路径

Selenium::WebDriver::Firefox.path = "/path/to/firefox" # firefox安装路径

driver = Selenium::WebDriver.for :firefox

本地事件

本地事件在window下默认是激活的,可以设置关闭:

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

profile.native_events = false # 关闭

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

理论上linux支持本地事件,profile.native_events = true # 开启

Opera

opera也是用remote的方法进行启动的。在开始之前,要下载selenium-server-standalone-x.xx.x.jar,并且新建环境变量SELENIUM_SERVER_JAR到本地系统中。

window: SELENIUM_SERVER_JAR=..\server-standalone.jar

liunx: export SELENIUM_SERVER_JAR=path_to/server-standalone.jar

便可以轻松的用Selenium::WebDriver启动Opera

driver = Selenium::WebDriver.for :opera

driver.navigate.to "http://www.baidu.com"

Timeouts

隐式等待

WebDriver可以设置隐式等待,所以在应用#find_element定位元素时,会等待元素的出现,直至NoSuchElementError的出现。

driver = Selenium::WebDriver.for :firefox

driver.manager.timeouts.implicit_wait = 3 # 等待3秒

显示等待

可以用wait类去实例化一些等待条件

wait = Selenium::WebDriver::Wait.new(:timeout=>3)

wait.until {driver.find_elenium(:id=>"foo").displayed?}

内部的超时

WebDriver使用了大量的HTTP的驱动(jsonWireProtocol)。Net::HTTP作为ruby的标准库使用,默认超时为60秒。如果用WebDriver#get启动一个加载时间超过60秒的页面,你会看Net::HTTP的TimeoutError错误,可以在启动浏览器之前修改timeout来改变默认超时时长。

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

client.titmeout = 120 # 设置为120秒

driver = Selenium::WebDriver.for :temote, :http_client=>client

js弹出框

获取js的alert,prompt和comfirm弹出窗都是用switch_to

require "selenium-webdriver"

driver = Selenium::WebDriver.for :firefox

driver.navigate.to "http://mysite.com/page_with_alert.html"

driver.find_element(:name, ‘element_with_alert_javascript‘).click

a = driver.switch_to.alert

if a.text == ‘A value you are looking for‘

a.dismiss

else

a.accept

end

用Curb或者自己的http client

HTTP通信内部默认使用Net::HTTP,如果有安装Curb gem就可以选择这么做

require "selenium/webdriver/remot/http/curb"

include Selenium

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

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

时间: 2024-10-24 09:39:59

selenium-webdriver 简单教程的相关文章

(java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出

selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以打开,如:http://ask.testfan.cn/articles?page=15,就可以翻到文章分类的第15页: import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.u

用Python selenium+webdriver的一个简单的登录自动化测试--豆丁网登录测试

#coding=utf-8 from selenium import webdriver #from selenium.webdriver.remote import switch_to #from selenium.webdriver.common import alert #import unittest  import time,os def users_zidian():  #用户名用例用一个字典实现参数化调用#     users={'zhengshuheng':'123456','[

Selenium WebDriver java 简单实例

开发环境 JDK 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html Eclipse: 下载地址:http://www.eclipse.org/downloads/ Selenium jar包 (这里用的是:selenium-Java-2.45.0.zip ,selenium-server-standalone-2.45.0.jar) 下载地址:http://code.google.com/p/sele

jmeter联合selenium webdriver进行自动化测试-简单1

jmeter进行webdriver测试 背景:jmeter可以联合selenium进行基本的UI自动化进行测试,解放了手工测试的压力.那么selenium webdriver完成GUI的流程初步如下 1. 2.添加jar后的效果,展示了chrome/firefox/htmlUnit  driver config和webdriver sampler,如下: 备注:官网参考https://jmeter-plugins.org/wiki/WebDriverSampler/ 原文地址:https://w

【零基础】Selenium:Webdriver图文入门教程java篇(附相关包下载)

一.selenium2.0简述 与一般的浏览器测试框架(爬虫框架)不同,Selenium2.0实际上由两个部分组成Selenium+webdriver,Selenium负责用户指令的解释(code),webdriver则负责对浏览器进行控制和页面解析.所以使用Selenium2.0时需要相应版本的webdriver和浏览器,程序运行过程中会通过webdriver启动一个真实的浏览器.由于webdriver+浏览器的组合,Selenium不存在对js.ajax解析的问题,它直接使用浏览器对网站代码

selenium webdriver处理浏览器Cookie

有时候我们需要验证浏览器中是否存在某个cookie,因为基于真实的cookie 的测试是无法通过白盒和集成测试完成的.WebDriver 提供了操作Cookie 的相关方法可以读取.添加和删除cookie 信息.WebDriver 操作cookie 的方法有:? getCookies() 获得所有cookie 信息? addCookie(cookie_dict) 添加cookie,必须有name 和value 值? deleteAllCookies() 删除所有cookie 信息? delete

selenium webdriver学习(六)------------如何得到弹出窗口

在selenium 1.X里面得到弹出窗口是一件比较麻烦的事,特别是新开窗口没有id.name的时候.当时还整理了处理了几种方法,详见:http://seleniumcn.cn/read.php?tid=791 .在selenium webdriver中得到新开窗口相对简单的多,它无关新开窗口的id.name等属性.以下面的html为例: [html] view plaincopyprint? <span style="white-space: normal; background-col

Selenium WebDriver 处理cookie

在使用webdriver测试中,很多地方都使用登陆,cookie能够实现不必再次输入用户名密码进行登陆. 首先了解一下Java Cookie类的一些方法. 在jsp中处理cookie数据的常用方法: getDomain():返回cookie的域名. getMaxAge():返回cookie的存活时间 getName():返回cookie的名字 getPath():返回cookie适用的路径 getSecure():如果浏览器通过安全协议发送Cookie将返回true值,如果浏览器使用标准协议刚返

selenium webdriver模拟鼠标键盘操作

在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.shift等: 在webdriver中,有专门的一个类,是用来进行鼠标.键盘的模拟操作的,那就是Actions类,该类使用时,又会涉及到Keyboard.Mouse.CompositeAction(复合动作),先对Mouse的方法做简单罗列,然后再用代码说明: 1.鼠标左键点击: Actions ac

Page Object Model | POM (Selenium Webdriver For Python)

研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数调用,到重定义函数.从变量驱动,到数据驱动,再到关键字驱动,一步一步的默默走向自动化框架的构建.虽然还有没有投入使用,只是写几个demo,就慢慢的发现了 selenium自动用例脚本,相似功能地方,代码基本都是一样的,界面元素换个查找方式,把原来的使用 xpath方式,改为使用 id 查找,需要对每个用例脚本都要改