capybara-harness 0.0.13 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/capybara-harness.gemspec +2 -0
- data/lib/capybara/harness/dom/attribute.rb +0 -1
- data/lib/capybara/harness/dom/field.rb +29 -11
- data/lib/capybara/harness/dom/reader.rb +3 -3
- data/lib/capybara/harness/dom/writer.rb +1 -1
- data/lib/capybara/harness/version.rb +1 -1
- data/spec/dom/field_spec.rb +92 -0
- data/spec/spec_helper.rb +7 -1
- metadata +36 -2
data/.gitignore
CHANGED
data/capybara-harness.gemspec
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
20
|
gem.add_development_dependency('rspec')
|
21
|
+
gem.add_development_dependency('launchy')
|
21
22
|
gem.add_runtime_dependency('capybara', '>= 1.1')
|
23
|
+
gem.add_development_dependency("sinatra", [">= 0.9.4"])
|
22
24
|
gem.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
|
23
25
|
end
|
@@ -2,22 +2,34 @@ module Capybara::Harness::Dom
|
|
2
2
|
class Field
|
3
3
|
include Capybara::DSL
|
4
4
|
|
5
|
-
attr_accessor :name, :label, :
|
5
|
+
attr_accessor :name, :label, :as, :through
|
6
6
|
|
7
|
-
def initialize(options = {})
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
def initialize(name, options = {})
|
8
|
+
@name = name.to_sym
|
9
|
+
@through = extract_option_as_sym(:through, options)
|
10
|
+
@label = options.fetch(:label, name.to_s.titleize)
|
11
|
+
@as = options.fetch(:as, :string).to_sym
|
12
12
|
end
|
13
13
|
|
14
14
|
def fill(attrs = {})
|
15
15
|
value = extract_value(attrs)
|
16
|
-
case
|
16
|
+
case as
|
17
17
|
when :string then
|
18
18
|
fill_in(label, :with => value)
|
19
19
|
when :select then
|
20
20
|
select(value, :from => label)
|
21
|
+
when :file
|
22
|
+
attach_file(label, value)
|
23
|
+
when :radio
|
24
|
+
choose(label)
|
25
|
+
when :checkbox, :checkboxes
|
26
|
+
if value.is_a?(Hash)
|
27
|
+
value.each { |label, v| checkbox(v, label) }
|
28
|
+
elsif value.is_a?(Array)
|
29
|
+
value.each { |v| checkbox(v) }
|
30
|
+
else
|
31
|
+
check(value, label)
|
32
|
+
end
|
21
33
|
end
|
22
34
|
end
|
23
35
|
|
@@ -25,10 +37,6 @@ module Capybara::Harness::Dom
|
|
25
37
|
@through.to_sym if @through
|
26
38
|
end
|
27
39
|
|
28
|
-
def name
|
29
|
-
@name.to_sym
|
30
|
-
end
|
31
|
-
|
32
40
|
private
|
33
41
|
|
34
42
|
def has_attribute?(attrs)
|
@@ -41,5 +49,15 @@ module Capybara::Harness::Dom
|
|
41
49
|
attrs[name.to_sym]
|
42
50
|
end
|
43
51
|
|
52
|
+
def extract_option_as_sym(option_name, options)
|
53
|
+
option = options.delete(option_name)
|
54
|
+
option.nil? ? nil : option.to_sym
|
55
|
+
end
|
56
|
+
|
57
|
+
def check(value, label = nil)
|
58
|
+
label = value if label.nil?
|
59
|
+
[false, nil, 0].include?(value) ? uncheck(label) : super(label)
|
60
|
+
end
|
61
|
+
|
44
62
|
end
|
45
63
|
end
|
@@ -16,7 +16,7 @@ module Capybara::Harness::Dom
|
|
16
16
|
|
17
17
|
# Public: Scans the DOM and finds the node that represents the subject.
|
18
18
|
def find_element(values = {})
|
19
|
-
page.find(".#{name} .#{finder_attr_name}", :text => finder_attr.derive_value(values)).find(:xpath, ".//ancestor::*[@class='#{name}']")
|
19
|
+
page.find(".#{name} .#{finder_attr_name}", :visible => true, :text => finder_attr.derive_value(values)).find(:xpath, ".//ancestor::*[@class='#{name}']")
|
20
20
|
end
|
21
21
|
|
22
22
|
# Public: Scans the DOM and finds the node that represents the subject's list element.
|
@@ -49,12 +49,12 @@ module Capybara::Harness::Dom
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def has_attrs?(values = {})
|
52
|
-
return false unless page.has_css?(".#{name} .#{finder_attr_name}", :text => finder_attr.derive_value(values))
|
52
|
+
return false unless page.has_css?(".#{name} .#{finder_attr_name}", :visible => true, :text => finder_attr.derive_value(values))
|
53
53
|
|
54
54
|
node = find_element(values)
|
55
55
|
attributes.each do |attr_name, attr|
|
56
56
|
text = attr.derive_value(values)
|
57
|
-
return false unless node.has_css?(".#{attr_name}", :text => text)
|
57
|
+
return false unless node.has_css?(".#{attr_name}", :visible => true, :text => text)
|
58
58
|
end
|
59
59
|
|
60
60
|
true
|
@@ -10,7 +10,7 @@ module Capybara::Harness::Dom
|
|
10
10
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
11
11
|
|
12
12
|
args.each do |field_name|
|
13
|
-
fields << Capybara::Harness::Dom::Field.new(options
|
13
|
+
fields << Capybara::Harness::Dom::Field.new(field_name, options)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Capybara::Harness::Dom::Field do
|
4
|
+
|
5
|
+
include Capybara::DSL
|
6
|
+
include Capybara::RSpecMatchers
|
7
|
+
|
8
|
+
before do
|
9
|
+
visit('/form')
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#fill" do
|
13
|
+
context "when only name is specified" do
|
14
|
+
it "fills in the field" do
|
15
|
+
field = Capybara::Harness::Dom::Field.new(:zipcode)
|
16
|
+
field.fill({ zipcode: '12345'})
|
17
|
+
page.find_field('Zipcode').value.should == '12345'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when the :label option is specified" do
|
22
|
+
it "fills in the field" do
|
23
|
+
field = Capybara::Harness::Dom::Field.new(:explanation, label: 'Explanation of Name')
|
24
|
+
field.fill({ explanation: 'None'})
|
25
|
+
page.find_field('Explanation of Name').value.should == 'None'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when the :as option is specified" do
|
30
|
+
describe ":select" do
|
31
|
+
it "selects the field" do
|
32
|
+
field = Capybara::Harness::Dom::Field.new(:other_title, as: :select, label: 'Other title')
|
33
|
+
field.fill({ other_title: 'Miss'})
|
34
|
+
page.should have_select('Other title', :selected => 'Miss')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "selects multiple values"
|
38
|
+
end
|
39
|
+
|
40
|
+
describe ":checkbox" do
|
41
|
+
context "when the supplied value is boolean" do
|
42
|
+
let(:field) { Capybara::Harness::Dom::Field.new(:terms, as: :checkbox, label: 'Terms of Use') }
|
43
|
+
|
44
|
+
it "checks the box when true" do
|
45
|
+
page.uncheck('Terms of Use')
|
46
|
+
field.fill({ terms: true })
|
47
|
+
page.find_field('Terms of Use').should be_checked
|
48
|
+
end
|
49
|
+
|
50
|
+
it "unchecks the box when false" do
|
51
|
+
page.check('Terms of Use')
|
52
|
+
field.fill({ terms: false })
|
53
|
+
page.find_field('Terms of Use').should_not be_checked
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when the supplied value is an integer" do
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
context "when the supplied value is an array" do
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when the supplied value is a hash" do
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
it "checks multiple values" do
|
72
|
+
field = Capybara::Harness::Dom::Field.new(:pets, as: :checkboxes)
|
73
|
+
field.fill({ pets: { }})
|
74
|
+
page.find_field('Terms of Use').should_not be_checked
|
75
|
+
end
|
76
|
+
|
77
|
+
it "unchecks multiple values"
|
78
|
+
end
|
79
|
+
|
80
|
+
describe ":radio" do
|
81
|
+
it "selects the radio option"
|
82
|
+
end
|
83
|
+
|
84
|
+
describe ":file" do
|
85
|
+
it "fills in the field"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
+
require "capybara"
|
2
|
+
require "capybara/rspec" # Required here instead of in rspec_spec to avoid RSpec deprecation warning
|
3
|
+
require "capybara/spec/test_app"
|
4
|
+
require "capybara/spec/spec_helper"
|
1
5
|
require 'capybara-harness'
|
2
6
|
|
3
7
|
RSpec.configure do |config|
|
4
8
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
5
9
|
config.run_all_when_everything_filtered = true
|
6
10
|
config.filter_run :focus
|
7
|
-
|
11
|
+
config.before { Capybara::SpecHelper.reset! }
|
12
|
+
config.after { Capybara::SpecHelper.reset! }
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-harness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: launchy
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: capybara
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -43,6 +59,22 @@ dependencies:
|
|
43
59
|
- - ! '>='
|
44
60
|
- !ruby/object:Gem::Version
|
45
61
|
version: '1.1'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: sinatra
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.9.4
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.9.4
|
46
78
|
- !ruby/object:Gem::Dependency
|
47
79
|
name: activesupport
|
48
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,6 +116,7 @@ files:
|
|
84
116
|
- lib/capybara/harness/dom_harness.rb
|
85
117
|
- lib/capybara/harness/version.rb
|
86
118
|
- spec/dom/attribute_spec.rb
|
119
|
+
- spec/dom/field_spec.rb
|
87
120
|
- spec/dom/reader_spec.rb
|
88
121
|
- spec/spec_helper.rb
|
89
122
|
homepage: https://github.com/twmills/capybara-harness
|
@@ -113,5 +146,6 @@ summary: A test harness strategy to easily query and manipulate DOM elements as
|
|
113
146
|
objects in the context of feature or acceptance tests.
|
114
147
|
test_files:
|
115
148
|
- spec/dom/attribute_spec.rb
|
149
|
+
- spec/dom/field_spec.rb
|
116
150
|
- spec/dom/reader_spec.rb
|
117
151
|
- spec/spec_helper.rb
|