2012-07-21 16:44:10 -04:00
|
|
|
Capybara::SpecHelper.spec '#click_link' do
|
|
|
|
before do
|
|
|
|
@session.visit('/with_html')
|
|
|
|
end
|
2009-12-15 14:58:51 -05:00
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
it "should wait for asynchronous load", :requires => [:js] do
|
|
|
|
@session.visit('/with_js')
|
|
|
|
@session.click_link('Click me')
|
|
|
|
@session.click_link('Has been clicked')
|
|
|
|
end
|
2010-10-22 10:45:33 -04:00
|
|
|
|
2012-09-06 03:33:43 -04:00
|
|
|
it "casts to string" do
|
|
|
|
@session.click_link(:'foo')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Another World')
|
2012-09-06 03:33:43 -04:00
|
|
|
end
|
|
|
|
|
2014-03-02 09:49:00 -05:00
|
|
|
it "raises any errors caught inside the server", :requires => [:server] do
|
|
|
|
quietly { @session.visit("/error") }
|
|
|
|
expect do
|
|
|
|
@session.click_link('foo')
|
|
|
|
end.to raise_error(TestApp::TestAppError)
|
|
|
|
end
|
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
context "with id given" do
|
|
|
|
it "should take user to the linked page" do
|
|
|
|
@session.click_link('foo')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Another World')
|
2010-01-18 14:33:22 -05:00
|
|
|
end
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
2010-01-15 10:13:48 -05:00
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
context "with text given" do
|
|
|
|
it "should take user to the linked page" do
|
|
|
|
@session.click_link('labore')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2010-01-18 14:33:22 -05:00
|
|
|
end
|
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
it "should accept partial matches" do
|
|
|
|
@session.click_link('abo')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2010-01-18 14:33:22 -05:00
|
|
|
end
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
2010-01-18 14:33:22 -05:00
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
context "with title given" do
|
|
|
|
it "should take user to the linked page" do
|
|
|
|
@session.click_link('awesome title')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2009-12-15 14:58:51 -05:00
|
|
|
end
|
2010-01-18 14:33:22 -05:00
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
it "should accept partial matches" do
|
2012-09-09 17:58:09 -04:00
|
|
|
@session.click_link('some titl')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2011-08-30 04:54:20 -04:00
|
|
|
end
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
2011-08-30 04:54:20 -04:00
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
context "with alternative text given to a contained image" do
|
|
|
|
it "should take user to the linked page" do
|
|
|
|
@session.click_link('awesome image')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2010-01-18 14:33:22 -05:00
|
|
|
end
|
2010-10-22 10:45:33 -04:00
|
|
|
|
2012-09-09 17:58:09 -04:00
|
|
|
it "should accept partial matches" do
|
2012-07-21 16:44:10 -04:00
|
|
|
@session.click_link('some imag')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2010-02-12 08:41:41 -05:00
|
|
|
end
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
2010-10-22 10:45:33 -04:00
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
context "with a locator that doesn't exist" do
|
|
|
|
it "should raise an error" do
|
|
|
|
msg = "Unable to find link \"does not exist\""
|
2012-10-30 09:26:19 -04:00
|
|
|
expect do
|
2012-07-21 16:44:10 -04:00
|
|
|
@session.click_link('does not exist')
|
2012-10-30 09:26:19 -04:00
|
|
|
end.to raise_error(Capybara::ElementNotFound, msg)
|
2010-10-22 10:45:33 -04:00
|
|
|
end
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
2010-10-22 10:45:33 -04:00
|
|
|
|
2013-02-19 15:12:54 -05:00
|
|
|
context "with :href option given" do
|
|
|
|
it "should find links with valid href" do
|
|
|
|
@session.click_link('labore', :href => '/with_simple_html')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2013-02-19 15:12:54 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should raise error if link wasn't found" do
|
|
|
|
expect { @session.click_link('labore', :href => 'invalid_href') }.to raise_error(Capybara::ElementNotFound)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
it "should follow relative links" do
|
|
|
|
@session.visit('/')
|
|
|
|
@session.click_link('Relative')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('This is a test')
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
2010-10-22 10:45:33 -04:00
|
|
|
|
2012-09-06 04:46:54 -04:00
|
|
|
it "should follow protocol relative links" do
|
|
|
|
@session.click_link('Protocol')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Another World')
|
2012-09-06 04:46:54 -04:00
|
|
|
end
|
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
it "should follow redirects" do
|
|
|
|
@session.click_link('Redirect')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('You landed')
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
2010-10-22 10:45:33 -04:00
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
it "should follow redirects" do
|
|
|
|
@session.click_link('BackToMyself')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('This is a test')
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
2010-10-22 10:45:33 -04:00
|
|
|
|
2012-07-21 16:44:10 -04:00
|
|
|
it "should add query string to current URL with naked query string" do
|
|
|
|
@session.click_link('Naked Query String')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Query String sent')
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should do nothing on anchor links" do
|
|
|
|
@session.fill_in("test_field", :with => 'blah')
|
|
|
|
@session.click_link('Normal Anchor')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session.find_field("test_field").value).to eq('blah')
|
2012-07-21 16:44:10 -04:00
|
|
|
@session.click_link('Blank Anchor')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session.find_field("test_field").value).to eq('blah')
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should do nothing on URL+anchor links for the same page" do
|
|
|
|
@session.fill_in("test_field", :with => 'blah')
|
|
|
|
@session.click_link('Anchor on same page')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session.find_field("test_field").value).to eq('blah')
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should follow link on URL+anchor links for a different page" do
|
|
|
|
@session.click_link('Anchor on different page')
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2012-07-21 16:44:10 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it "raise an error with links with no href" do
|
2012-10-30 09:26:19 -04:00
|
|
|
expect do
|
2012-07-21 16:44:10 -04:00
|
|
|
@session.click_link('No Href')
|
2012-10-30 09:26:19 -04:00
|
|
|
end.to raise_error(Capybara::ElementNotFound)
|
2009-12-15 14:58:51 -05:00
|
|
|
end
|
2013-02-24 10:33:41 -05:00
|
|
|
|
|
|
|
context "with :exact option" do
|
|
|
|
it "should accept partial matches when false" do
|
|
|
|
@session.click_link('abo', :exact => false)
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(@session).to have_content('Bar')
|
2013-02-24 10:33:41 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "should not accept partial matches when true" do
|
|
|
|
expect do
|
|
|
|
@session.click_link('abo', :exact => true)
|
|
|
|
end.to raise_error(Capybara::ElementNotFound)
|
|
|
|
end
|
|
|
|
end
|
2010-01-18 14:33:22 -05:00
|
|
|
end
|