Just an FYI - spec-ui, an rspec extension that supports integration
with selenium and watir, has been under some discussion lately and
should see some new life soon.
On May 8, 2008, at 10:10 AM, Zach Dennis wrote:
I've had really iffy luck with Selenium plugins in the past
(selenium-on-rails, seleniumfu_rc, selenium_rc, etc.) so I've
started to write a RailsSeleniumStory. I also had to remove the
ActiveRecordSafetyListener in my efforts.
The RailsSeleniumStory is a part of the mhs_testing plugin [0] and
it provides higher level helpers. For example I love how form-test-
helper is used to select and submit forms:
# option 1
form = select_form 'expense_form'
form.expense.amount = 12.99
form.submit
# option 2
submit_form 'expense_form' do |form|
form.expense.amount = 12.99
form.expense.category_id = 2
form.expense.comments = "map for trip"
end
You can use this same syntax within RailsSeleniumStories. Right now
you can also use "have_tag" and "with_tag" matchers with Selenium.
It supports basic matching (I wouldn't get to crazy with nesting or
lots of assert-select/have-tag options), but it will be supporting
more options shortly.
So your login example could just look like:
Given('log in as a admin user')
open "/admin/login"
submit_form "login_form" do |form|
form.login = 'developer'
form.password = 'test'
end
end
Which IMO I really like because if you need variations of that you
can pull out a helper method like:
def submit_login_form(user, password='test')
submit_form "login_form" do |form|
form.login = user.login
form.password = passsword
end
end
And you could push your open into a helper as well:
def go_to_login_page
open "/admin/login"
end
And now your Given could look like:
Given('log in as a admin user')
go_to_login_page
submit_login_form @user, 'test'
end
Now granted submit_form and select_form both take a form's id, so
each of your forms need to have one.
If you are interested and have the time please check it out. Granted
it's in its infancy and there's not a whole lot of docs right now
(there is a README.Selenium for instructions on how-to setup in your
project), but you can find me on GTalk or in irc.freenode.net
(zdennis) and of course right here on the rspec ML. I am have 33
scenarios using the RailsSeleniumStory,
ttyl,
Zach
0 - http://github.com/mvanholstyn/mhs_testing/tree/master
On Thu, May 8, 2008 at 8:22 AM, Joseph Wilk <[EMAIL PROTECTED]>
wrote:
I have been using Rspec stories with Webrat feeling very productive
and
happy.
Then I needed to do something with Selenium (Webrat could have done
what
I needed but it does not yet have the functionality).
Selenium-core as part of a rails plugin looked nice but did not seem
to
fit with rspec stories. So I went the Selenium-rc route.
Since Selenium uses a separate instance of rails
(http://www.nabble.com/stories-with-selenium-and-the-db-td16190686.html
)
I had to turn off the ActiveRecordSafetyListener used in rspec to make
sure the db writes committed.
Which in turn left me having to manually cleanup my selenium
stories :(
So that required writing a new, rather gritty scenario listener which
dealt with the cleaning operation. It has to do lots of horrible
things
like remove all listeners for a selenium story and then re-add them
all
for the others stories.
*Code Extract*
def story_ended(title, narrative)
case title
when 'Edit a page'
#We have finished the selenium story
$selenium_driver.stop
#Do we need to re-add some listeners
if [EMAIL PROTECTED]
Spec
::Story
::Runner
.scenario_runner.add_listener(ActiveRecordSafetyListener.instance)
@listener_reloaded=true
end
end
end
I had to duplicate a lot of the story steps since now any previous
post/gets did not work since they post to the test instance and not
the
selenium rails instance.
I also needed to invoke against the selenium driver so even when the
steps would work I had to duplicate them with
$selenium_driver.do_something()
This nice Given:
Given('log in as a admin user')
post '/admin/sessions/create', :login => @user.login, :password
=>
@user.password
end
Being duplicated with this
Given('log in as a admin user')
$selenium_driver.open '/admin/login'
$selenium_driver.type 'login', 'developer'
$selenium_driver.type 'password', 'test'
$selenium_driver.click 'commit'
end
After some very painful testing and a lot of time I got my Selenium-rc
and Webrat stories working. This experience really opened my eyes to
the
big void introduced by Selenium-rc running outside of the test
instance.
This has made me wonder whether I should have rspec stories stepping
outside of the test rails instance to drive Selenium tests.
Has anyone managed to make this process easier?
I'm hoping I'm doing something silly which is making it all harder!
Is it feasible to bring selenium into the test rails instances?
Is it just always going to be painful?
I was skipping along having a lot of fun with stories and Webrat, now
I'm face down in a puddle of mud, dreading that Selenium moment.
--
Joseph Wilk
http://www.joesniff.co.uk
--
Posted via http://www.ruby-forum.com/.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users
--
Zach Dennis
http://www.continuousthinking.com
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users