diff --git a/lib/webcat.rb b/lib/webcat.rb index 6173ca2b..9c2a4381 100644 --- a/lib/webcat.rb +++ b/lib/webcat.rb @@ -1,3 +1,5 @@ +require 'nokogiri' + module Webcat VERSION = '0.1' diff --git a/lib/webcat/session.rb b/lib/webcat/session.rb index 0b2d9881..8884f456 100644 --- a/lib/webcat/session.rb +++ b/lib/webcat/session.rb @@ -71,6 +71,10 @@ class Webcat::Session end end + def has_css?(path, options={}) + has_xpath?(Nokogiri::CSS.xpath_for(path).first, options) + end + def within(scope) scopes.push(scope) yield diff --git a/spec/session_spec.rb b/spec/session_spec.rb index 27b8ed94..09ce62f9 100644 --- a/spec/session_spec.rb +++ b/spec/session_spec.rb @@ -345,6 +345,47 @@ shared_examples_for "session" do end end end + + describe '#has_css?' do + before do + @session.visit('/with_html') + end + + it "should be true if the given selector is on the page" do + @session.should have_css("p") + @session.should have_css("p a#foo") + end + + it "should be false if the given selector is not on the page" do + @session.should_not have_css("abbr") + @session.should_not have_css("p a#doesnotexist") + @session.should_not have_css("p.nosuchclass") + end + + it "should respect scopes" do + @session.within "//p[@id='first']" do + @session.should have_css("a#foo") + @session.should_not have_css("a#red") + end + end + + context "with count" do + it "should be true if the content is on the page the given number of times" do + @session.should have_css("p", :count => 3) + @session.should have_css("p a#foo", :count => 1) + end + + it "should be false if the content is on the page the given number of times" do + @session.should_not have_css("p", :count => 6) + @session.should_not have_css("p a#foo", :count => 2) + end + + it "should be false if the content isn't on the page at all" do + @session.should_not have_css("abbr", :count => 2) + @session.should_not have_css("p a.doesnotexist", :count => 1) + end + end + end describe "#attach_file" do before do