2010-11-12 15:46:46 -05:00
|
|
|
require 'spec_helper'
|
|
|
|
|
2014-04-03 13:25:03 -04:00
|
|
|
RSpec.describe Capybara do
|
2010-11-12 15:46:46 -05:00
|
|
|
describe '.string' do
|
|
|
|
let :string do
|
|
|
|
Capybara.string <<-STRING
|
2013-02-16 03:59:07 -05:00
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<title>simple_node</title>
|
|
|
|
</head>
|
|
|
|
<body>
|
2015-05-28 13:51:23 -04:00
|
|
|
<svg><title>not document title</title></svg>
|
2013-02-16 03:59:07 -05:00
|
|
|
<div id="page">
|
|
|
|
<div id="content">
|
|
|
|
<h1 data="fantastic">Totally awesome</h1>
|
|
|
|
<p>Yes it is</p>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<form>
|
|
|
|
<input type="text" name="bleh" disabled="disabled"/>
|
|
|
|
<input type="text" name="meh"/>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
<div id="footer">
|
|
|
|
<p>c2010</p>
|
|
|
|
<p>Jonas Nicklas</p>
|
|
|
|
<input type="text" name="foo" value="bar"/>
|
|
|
|
<select name="animal">
|
|
|
|
<option>Monkey</option>
|
|
|
|
<option selected="selected">Capybara</option>
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div id="hidden" style="display: none">
|
|
|
|
<p id="secret">Secret</p>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<div class="subsection"></div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
</body>
|
|
|
|
</html>
|
2010-11-12 15:46:46 -05:00
|
|
|
STRING
|
|
|
|
end
|
|
|
|
|
|
|
|
it "allows using matchers" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string).to have_css('#page')
|
|
|
|
expect(string).not_to have_css('#does-not-exist')
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows using custom matchers" do
|
|
|
|
Capybara.add_selector :lifeform do
|
|
|
|
xpath { |name| "//option[contains(.,'#{name}')]" }
|
|
|
|
end
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string).to have_selector(:id, "page")
|
|
|
|
expect(string).not_to have_selector(:id, 'does-not-exist')
|
|
|
|
expect(string).to have_selector(:lifeform, "Monkey")
|
|
|
|
expect(string).not_to have_selector(:lifeform, "Gorilla")
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
2011-09-29 16:04:51 -04:00
|
|
|
it 'allows custom matcher using css' do
|
|
|
|
Capybara.add_selector :section do
|
|
|
|
css { |css_class| "section .#{css_class}" }
|
|
|
|
end
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string).to have_selector(:section, 'subsection')
|
|
|
|
expect(string).not_to have_selector(:section, 'section_8')
|
2011-09-29 16:04:51 -04:00
|
|
|
end
|
|
|
|
|
2010-11-12 15:46:46 -05:00
|
|
|
it "allows using matchers with text option" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string).to have_css('h1', :text => 'Totally awesome')
|
|
|
|
expect(string).not_to have_css('h1', :text => 'Not so awesome')
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows finding only visible nodes" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.all(:css, '#secret', :visible => true)).to be_empty
|
|
|
|
expect(string.all(:css, '#secret', :visible => false).size).to eq(1)
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows finding elements and extracting text from them" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.find('//h1').text).to eq('Totally awesome')
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows finding elements and extracting attributes from them" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.find('//h1')[:data]).to eq('fantastic')
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows finding elements and extracting the tag name from them" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.find('//h1').tag_name).to eq('h1')
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows finding elements and extracting the path" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.find('//h1').path).to eq('/html/body/div/div[1]/h1')
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows finding elements and extracting the path" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.find('//div/input').value).to eq('bar')
|
|
|
|
expect(string.find('//select').value).to eq('Capybara')
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows finding elements and checking if they are visible" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.find('//h1')).to be_visible
|
|
|
|
expect(string.find(:css, "#secret", :visible => false)).not_to be_visible
|
2013-01-29 03:54:14 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows finding elements and checking if they are disabled" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.find('//form/input[@name="bleh"]')).to be_disabled
|
|
|
|
expect(string.find('//form/input[@name="meh"]')).not_to be_disabled
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
2013-02-16 03:59:07 -05:00
|
|
|
|
|
|
|
describe "#title" do
|
|
|
|
it "returns the page title" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.title).to eq("simple_node")
|
2013-02-16 03:59:07 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#has_title?" do
|
|
|
|
it "returns whether the page has the given title" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.has_title?('simple_node')).to be_truthy
|
|
|
|
expect(string.has_title?('monkey')).to be_falsey
|
2013-02-16 03:59:07 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows regexp matches" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.has_title?(/s[a-z]+_node/)).to be_truthy
|
|
|
|
expect(string.has_title?(/monkey/)).to be_falsey
|
2013-02-16 03:59:07 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#has_no_title?' do
|
|
|
|
it "returns whether the page does not have the given title" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.has_no_title?('simple_node')).to be_falsey
|
|
|
|
expect(string.has_no_title?('monkey')).to be_truthy
|
2013-02-16 03:59:07 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allows regexp matches" do
|
2013-11-14 12:43:36 -05:00
|
|
|
expect(string.has_no_title?(/s[a-z]+_node/)).to be_falsey
|
|
|
|
expect(string.has_no_title?(/monkey/)).to be_truthy
|
2013-02-16 03:59:07 -05:00
|
|
|
end
|
|
|
|
end
|
2010-11-12 15:46:46 -05:00
|
|
|
end
|
|
|
|
end
|