-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Changed to use selenium-webdriver and it works!
- Loading branch information
Showing
11 changed files
with
135 additions
and
141 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,9 @@ | |||
require 'webcat' | |||
require 'webcat/dsl' | |||
|
|||
if defined?(Rails) | |||
Webcat.app = ActionController::Dispatcher.new | |||
end | |||
|
|||
World(Webcat) | |||
|
This file was deleted.
Oops, something went wrong.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -1,80 +1,93 @@ | |||
require 'selenium/client' | require 'selenium-webdriver' | ||
require 'webcat/driver/selenium/rc_server' | |||
require 'webcat/core_ext/tcp_socket' | |||
|
|||
|
|
||
class Webcat::Driver::Selenium | class Webcat::Driver::Selenium | ||
class Node < Struct.new(:node) | class Node < Struct.new(:node) | ||
def text | def text | ||
node.text | node.text | ||
end | end | ||
|
|||
def attribute(name) | def [](name) | ||
value = if name.to_sym == :class | if name == :value | ||
node.class_name | node.value | ||
else | else | ||
node.send(name.to_sym) | node.attribute(name) | ||
end | end | ||
return value if value and not value.empty? | rescue Selenium::WebDriver::Error::WebDriverError | ||
nil | |||
end | |||
|
|||
def set(value) | |||
if tag_name == 'input' and %w(text password hidden file).include?(type) | |||
node.clear | |||
node.send_keys(value.to_s) | |||
elsif tag_name == 'input' and type == 'radio' | |||
node.select | |||
elsif tag_name == 'input' and type == 'checkbox' | |||
node.toggle | |||
elsif tag_name == "textarea" | |||
node.clear | |||
node.send_keys(value.to_s) | |||
end | |||
end | |||
|
|||
def select(option) | |||
node.find_element(:xpath, ".//option[text()='#{option}']").select | |||
end | end | ||
|
|||
def click | def click | ||
node.click | node.click | ||
end | end | ||
|
|||
def tag_name | def tag_name | ||
# FIXME: this might be the dumbest way ever of getting the tag name | node.tag_name | ||
# there has to be something better... | end | ||
node.to_xml[/^\s*<([a-z0-9\-\:]+)/, 1] |
|
||
private | |||
|
|||
def type | |||
self[:type] | |||
end | end | ||
|
|||
end | end | ||
|
|||
attr_reader :app, :rack_server | attr_reader :app, :rack_server | ||
|
|
||
def self.server | def self.driver | ||
@server ||= Webcat::Selenium::SeleniumRCServer.new | unless @driver | ||
@driver = Selenium::WebDriver.for :firefox | |||
at_exit do | |||
@driver.quit | |||
end | |||
end | |||
@driver | |||
end | end | ||
|
|
||
def initialize(app) | def initialize(app) | ||
@app = app | @app = app | ||
@rack_server = Webcat::Server.new(@app) | @rack_server = Webcat::Server.new(@app) | ||
@rack_server.boot | @rack_server.boot | ||
self.class.server.boot | |||
end | end | ||
|
|||
def visit(path) | def visit(path) | ||
browser.open(url(path)) | driver.navigate.to(url(path)) | ||
end | end | ||
|
|||
def body | def body | ||
browser.html | driver.page_source | ||
end | end | ||
|
|||
def find(selector) | def find(selector) | ||
browser.elements_by_xpath(selector).map { |node| Node.new(node) } | driver.find_elements(:xpath, selector).map { |node| Node.new(node) } | ||
end | end | ||
|
|
||
private | private | ||
|
|
||
def url(path) | def url(path) | ||
rack_server.url(path) | rack_server.url(path) | ||
end | end | ||
|
|
||
def browser | def driver | ||
unless @_browser | self.class.driver | ||
@_browser = Selenium::Client::Driver.new :host => 'localhost', | |||
:port => 4444, | |||
:browser => "*firefox", | |||
:url => rack_server.url('/'), | |||
:timeout_in_second => 10 | |||
@_browser.start_new_browser_session | |||
|
|||
at_exit do | |||
@_browser.close_current_browser_session | |||
end | |||
end | |||
@_browser | |||
end | end | ||
|
|
||
end | end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1 @@ | |||
ThisIsTheTestFile |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,23 @@ | |||
require File.expand_path('../spec_helper', File.dirname(__FILE__)) | |||
|
|||
describe Webcat::Session do | |||
context 'with selenium driver' do | |||
before do | |||
@session = Webcat::Session.new(:selenium, TestApp) | |||
end | |||
|
|||
describe '#driver' do | |||
it "should be a rack test driver" do | |||
@session.driver.should be_an_instance_of(Webcat::Driver::Selenium) | |||
end | |||
end | |||
|
|||
describe '#mode' do | |||
it "should remember the mode" do | |||
@session.mode.should == :selenium | |||
end | |||
end | |||
|
|||
it_should_behave_like "session" | |||
end | |||
end |
Oops, something went wrong.