capybara-js_finders 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +6 -0
- data/Gemfile +6 -0
- data/LICENSE +22 -0
- data/README.md +142 -0
- data/Rakefile +47 -0
- data/capybara-js_finders.gemspec +42 -0
- data/lib/capybara-js_finders/capybara_extensions.rb +33 -0
- data/lib/capybara-js_finders/version.rb +5 -0
- data/lib/capybara-js_finders/xpath_extensions.rb +27 -0
- data/lib/capybara-js_finders.rb +129 -0
- data/test/test_helper.rb +8 -0
- data/test/unit/find_cell_tests/app/app.rb +13 -0
- data/test/unit/find_cell_tests/app/public/js/prototype.js +6001 -0
- data/test/unit/find_cell_tests/app/views/table.erubis +153 -0
- data/test/unit/find_cell_tests/basic_test.rb +93 -0
- metadata +162 -0
@@ -0,0 +1,153 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<script type="text/javascript" src="js/prototype.js"></script>
|
4
|
+
</head>
|
5
|
+
|
6
|
+
<body>
|
7
|
+
<table cellpadding="15" cellspacing="15" border="2">
|
8
|
+
<tr>
|
9
|
+
<td>
|
10
|
+
*
|
11
|
+
</td>
|
12
|
+
|
13
|
+
<td>
|
14
|
+
OneColumn
|
15
|
+
</td>
|
16
|
+
|
17
|
+
<td colspan="2">
|
18
|
+
TwoColumns
|
19
|
+
</td>
|
20
|
+
|
21
|
+
<td colspan="3">
|
22
|
+
ThreeColumns
|
23
|
+
</td>
|
24
|
+
</tr>
|
25
|
+
|
26
|
+
<tr>
|
27
|
+
<td>
|
28
|
+
OneRow
|
29
|
+
</td>
|
30
|
+
|
31
|
+
<td style="background-color: red;">
|
32
|
+
red
|
33
|
+
</td>
|
34
|
+
|
35
|
+
<td colspan="2" style="background-color: blue;">
|
36
|
+
hor
|
37
|
+
</td>
|
38
|
+
|
39
|
+
<td style="background-color: CadetBlue;">
|
40
|
+
CadetBlue
|
41
|
+
</td>
|
42
|
+
<td style="background-color: Chocolate;">
|
43
|
+
Chocolate
|
44
|
+
</td>
|
45
|
+
<td style="background-color: DarkGoldenRod;">
|
46
|
+
DarkGoldenRod
|
47
|
+
</td>
|
48
|
+
</tr>
|
49
|
+
|
50
|
+
<tr>
|
51
|
+
<td rowspan="2">
|
52
|
+
TwoRows
|
53
|
+
</td>
|
54
|
+
|
55
|
+
<td rowspan="2" style="background-color: Wheat ;">
|
56
|
+
ver
|
57
|
+
</td>
|
58
|
+
|
59
|
+
<td colspan="2" rowspan="2" style="background-color: YellowGreen ;">
|
60
|
+
sqr
|
61
|
+
</td>
|
62
|
+
|
63
|
+
<td style="background-color: Sienna ;">
|
64
|
+
Sienna
|
65
|
+
</td>
|
66
|
+
|
67
|
+
<td style="background-color: Silver ;">
|
68
|
+
Silver
|
69
|
+
</td>
|
70
|
+
<td style="background-color: Snow ;">
|
71
|
+
Snow
|
72
|
+
</td>
|
73
|
+
</tr>
|
74
|
+
|
75
|
+
<tr>
|
76
|
+
<td style="background-color: Tan;" rowspan="2">
|
77
|
+
Tan
|
78
|
+
</td>
|
79
|
+
<td style="background-color: Teal ;">
|
80
|
+
Teal
|
81
|
+
</td>
|
82
|
+
<td style="background-color: Tomato ;">
|
83
|
+
Tomato
|
84
|
+
</td>
|
85
|
+
</tr>
|
86
|
+
|
87
|
+
<tr>
|
88
|
+
<td rowspan="3">
|
89
|
+
ThreeRows
|
90
|
+
</td>
|
91
|
+
|
92
|
+
<td style="background-color: Crimson ;">
|
93
|
+
Crimson
|
94
|
+
</td>
|
95
|
+
<td style="background-color: DarkGray ;">
|
96
|
+
DarkGray
|
97
|
+
</td>
|
98
|
+
<td style="background-color: DarkKhaki ;">
|
99
|
+
DarkKhaki
|
100
|
+
</td>
|
101
|
+
<td style="background-color: DarkOliveGreen ;">
|
102
|
+
DarkOliveGreen
|
103
|
+
</td>
|
104
|
+
<td style="background-color: Darkorange ;">
|
105
|
+
Darkorange
|
106
|
+
</td>
|
107
|
+
</tr>
|
108
|
+
|
109
|
+
<tr>
|
110
|
+
<td style="background-color: DarkSalmon ;">
|
111
|
+
DarkSalmon
|
112
|
+
</td>
|
113
|
+
<td style="background-color: DarkSeaGreen;">
|
114
|
+
DarkSeaGreen
|
115
|
+
</td>
|
116
|
+
<td style="background-color: DeepPink ;" colspan="2">
|
117
|
+
DeepPink
|
118
|
+
</td>
|
119
|
+
<td style="background-color: Green ;">
|
120
|
+
Green
|
121
|
+
</td>
|
122
|
+
<td style="background-color: Lavender ;">
|
123
|
+
Lavender
|
124
|
+
</td>
|
125
|
+
</tr>
|
126
|
+
|
127
|
+
<tr>
|
128
|
+
<td style="background-color: MediumAquaMarine ;">
|
129
|
+
MediumAquaMarine
|
130
|
+
</td>
|
131
|
+
<td style="background-color: Maroon ;">
|
132
|
+
Maroon
|
133
|
+
</td>
|
134
|
+
<td style="background-color: NavajoWhite ;">
|
135
|
+
NavajoWhite
|
136
|
+
</td>
|
137
|
+
|
138
|
+
<td style="background-color: Orchid ;">
|
139
|
+
Orchid
|
140
|
+
</td>
|
141
|
+
<td style="background-color: Peru ;">
|
142
|
+
Peru
|
143
|
+
</td>
|
144
|
+
<td style="background-color: SandyBrown ;">
|
145
|
+
SandyBrown
|
146
|
+
</td>
|
147
|
+
</tr>
|
148
|
+
|
149
|
+
</table>
|
150
|
+
|
151
|
+
</body>
|
152
|
+
|
153
|
+
</html>
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'unit/find_cell_tests/app/app'
|
3
|
+
|
4
|
+
module FindCellTests
|
5
|
+
|
6
|
+
class BasicTest < Bbq::TestCase
|
7
|
+
|
8
|
+
attr_reader :user
|
9
|
+
|
10
|
+
setup do
|
11
|
+
Capybara.app = App
|
12
|
+
Capybara.default_wait_time = 0.1
|
13
|
+
@user = Bbq::TestUser.new(:driver => :selenium, :session_name => :default)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_respond_to
|
17
|
+
user.visit '/'
|
18
|
+
assert user.find('table').respond_to?(:find_cell)
|
19
|
+
assert user.respond_to?(:find_cell)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_find_cell
|
23
|
+
user.visit '/'
|
24
|
+
|
25
|
+
# First row
|
26
|
+
assert user.find_cell(:row => "OneRow", :column => "OneColumn").has_content?("red")
|
27
|
+
assert user.find_cell(:row => "OneRow", :column => "OneColumn", :text => "red").has_content?("red")
|
28
|
+
|
29
|
+
assert user.find_cell(:row => "OneRow", :column => "TwoColumns").has_content?("hor")
|
30
|
+
assert user.find_cell(:row => "OneRow", :column => "TwoColumns", :text => "hor").has_content?("hor")
|
31
|
+
|
32
|
+
assert user.find_cell(:row => "OneRow", :column => "ThreeColumns").has_content?("CadetBlue")
|
33
|
+
assert user.find_cell(:row => "OneRow", :column => "ThreeColumns", :text => "Chocolate").has_content?("Chocolate")
|
34
|
+
|
35
|
+
# Second row
|
36
|
+
assert user.find_cell(:row => "TwoRows", :column => "OneColumn").has_content?("ver")
|
37
|
+
assert user.find_cell(:row => "TwoRows", :column => "OneColumn", :text => "ver").has_content?("ver")
|
38
|
+
|
39
|
+
assert user.find_cell(:row => "TwoRows", :column => "TwoColumns").has_content?("sqr")
|
40
|
+
assert user.find_cell(:row => "TwoRows", :column => "TwoColumns", :text => "sqr").has_content?("sqr")
|
41
|
+
|
42
|
+
assert user.find_cell(:row => "TwoRows", :column => "ThreeColumns").has_content?("Sienna")
|
43
|
+
assert user.find_cell(:row => "TwoRows", :column => "ThreeColumns", :text => "Tan").has_content?("Tan")
|
44
|
+
assert user.find_cell(:row => "TwoRows", :column => "ThreeColumns", :text => "Tomato").has_content?("Tomato")
|
45
|
+
|
46
|
+
# Third row
|
47
|
+
assert user.find_cell(:row => "ThreeRows", :column => "OneColumn").has_content?("Crimson")
|
48
|
+
assert user.find_cell(:row => "ThreeRows", :column => "OneColumn", :text => "DarkSalmon").has_content?("DarkSalmon")
|
49
|
+
|
50
|
+
assert user.find_cell(:row => "ThreeRows", :column => "TwoColumns").has_content?("DarkGray")
|
51
|
+
assert user.find_cell(:row => "ThreeRows", :column => "TwoColumns", :text => "NavajoWhite").has_content?("NavajoWhite")
|
52
|
+
assert user.find_cell(:row => "ThreeRows", :column => "TwoColumns", :text => "DeepPink").has_content?("DeepPink")
|
53
|
+
|
54
|
+
assert user.find_cell(:row => "ThreeRows", :column => "ThreeColumns").has_content?("Tan")
|
55
|
+
assert user.find_cell(:row => "ThreeRows", :column => "ThreeColumns", :text => "Green").has_content?("Green")
|
56
|
+
assert user.find_cell(:row => "ThreeRows", :column => "ThreeColumns", :text => "SandyBrown").has_content?("SandyBrown")
|
57
|
+
assert user.find_cell(:row => "ThreeRows", :column => "ThreeColumns", :text => "DeepPink").has_content?("DeepPink")
|
58
|
+
assert user.find_cell(:row => "ThreeRows", :column => "ThreeColumns", :text => "Tan").has_content?("Tan")
|
59
|
+
|
60
|
+
# Test matching multiple rows and columns
|
61
|
+
assert user.find_cell(:multicolumn => true, :multirow => true, :row => "Row", :column => "Column").has_content?("red")
|
62
|
+
assert user.find_cell(:multicolumn => true, :multirow => true, :row => "Rows", :column => "Columns").has_content?("sqr")
|
63
|
+
assert user.find_cell(:multicolumn => true, :multirow => true, :row => "Rows", :column => "Columns", :text => "Tan").has_content?("Tan")
|
64
|
+
assert user.find_cell(:multicolumn => true, :multirow => true, :row => "Rows", :column => "Columns", :text => "DeepPink").has_content?("DeepPink")
|
65
|
+
assert user.find_cell(:multicolumn => true, :multirow => true, :row => "Rows", :column => "Columns", :text => "Peru").has_content?("Peru")
|
66
|
+
assert user.find_cell(:multicolumn => true, :multirow => true, :row => "Rows", :column => "Columns", :text => "Snow").has_content?("Snow")
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_find_cell_not_found
|
70
|
+
assert_not_found{ user.find_cell(:row => "OneRow", :column => "OneColumn", :text => "hor") }
|
71
|
+
assert_not_found{ user.find_cell(:row => "OneRow", :column => "OneColumn", :text => "ver") }
|
72
|
+
|
73
|
+
assert_not_found{ user.find_cell(:row => "ThreeRows", :column => "OneColumn", :text => "DeepPink") }
|
74
|
+
assert_not_found{ user.find_cell(:row => "OneRow", :column => "ThreeColumns", :text => "Tan") }
|
75
|
+
assert_not_found{ user.find_cell(:multicolumn => false, :multirow => true, :row => "Rows", :column => "Columns", :text => "SandyBrown") }
|
76
|
+
assert_not_found{ user.find_cell(:multicolumn => true, :multirow => false, :row => "Rows", :column => "Columns", :text => "SandyBrown") }
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_find_cell_without_row_or_column
|
80
|
+
assert user.find_cell(:row => "OneRow", :text => "red").has_content?("red")
|
81
|
+
assert user.find_cell(:column => "OneColumn", :text => "red").has_content?("red")
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
|
88
|
+
def assert_not_found(&block)
|
89
|
+
assert_raise(Capybara::ElementNotFound, &block)
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capybara-js_finders
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Robert Pankowecki
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-07-18 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: capybara
|
16
|
+
requirement: &79594120 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *79594120
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &79593870 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.9.0
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *79593870
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rdoc
|
38
|
+
requirement: &79593610 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.4.2
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *79593610
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: sinatra
|
49
|
+
requirement: &79593310 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.2.6
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *79593310
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: erubis
|
60
|
+
requirement: &79593010 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 2.6.6
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *79593010
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bbq
|
71
|
+
requirement: &79592650 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.0.3
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *79592650
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: redcarpet
|
82
|
+
requirement: &79592230 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '1.17'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *79592230
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: ruby-debug19
|
93
|
+
requirement: &79592030 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *79592030
|
102
|
+
description: ! " Additional finders for capybara that for some reason\n cannot
|
103
|
+
use only xpath for finding nodes but needs to\n execute js for some calculations.\n\n
|
104
|
+
\ Ex: I you want to find a table cell\n that is under or next to other cell
|
105
|
+
the easiest way to do it is to\n check their position on page and compare them.
|
106
|
+
This way you do not\n need to wory about calculating the effects of using colspan
|
107
|
+
\n and rowspan attributes.\n\n The downside is that you need to use capybara
|
108
|
+
driver that runs\n a browser like selenium.\n"
|
109
|
+
email:
|
110
|
+
- robert.pankowecki@gmail.com
|
111
|
+
- rpa@gavdi.com
|
112
|
+
executables: []
|
113
|
+
extensions: []
|
114
|
+
extra_rdoc_files: []
|
115
|
+
files:
|
116
|
+
- .gitignore
|
117
|
+
- Gemfile
|
118
|
+
- LICENSE
|
119
|
+
- README.md
|
120
|
+
- Rakefile
|
121
|
+
- capybara-js_finders.gemspec
|
122
|
+
- lib/capybara-js_finders.rb
|
123
|
+
- lib/capybara-js_finders/capybara_extensions.rb
|
124
|
+
- lib/capybara-js_finders/version.rb
|
125
|
+
- lib/capybara-js_finders/xpath_extensions.rb
|
126
|
+
- test/test_helper.rb
|
127
|
+
- test/unit/find_cell_tests/app/app.rb
|
128
|
+
- test/unit/find_cell_tests/app/public/js/prototype.js
|
129
|
+
- test/unit/find_cell_tests/app/views/table.erubis
|
130
|
+
- test/unit/find_cell_tests/basic_test.rb
|
131
|
+
homepage: https://github.com/paneq/capybara-js_finders
|
132
|
+
licenses: []
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
hash: -918427759
|
146
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
|
+
none: false
|
148
|
+
requirements:
|
149
|
+
- - ! '>='
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
segments:
|
153
|
+
- 0
|
154
|
+
hash: -918427759
|
155
|
+
requirements: []
|
156
|
+
rubyforge_project: capybara-js_finders
|
157
|
+
rubygems_version: 1.8.5
|
158
|
+
signing_key:
|
159
|
+
specification_version: 3
|
160
|
+
summary: Additional finders for capybara that for some reason cannot use only xpath
|
161
|
+
for finding nodes but needs to execute js for some calculations
|
162
|
+
test_files: []
|