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
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
>
--
Zach Dennis
http://www.continuousthinking.com
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users