page-object 0.0.5 → 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +46 -1
- data/README.md +2 -0
- data/cucumber.yml +2 -2
- data/features/button.feature +11 -2
- data/features/check_box.feature +7 -5
- data/features/div.feature +7 -15
- data/features/{element.feature → element_attributes.feature} +1 -1
- data/features/form.feature +7 -6
- data/features/hidden_field.feature +9 -1
- data/features/html/static_elements.html +6 -1
- data/features/image.feature +9 -9
- data/features/link.feature +8 -1
- data/features/list_item.feature +6 -13
- data/features/ordered_list.feature +9 -17
- data/features/radio_button.feature +7 -6
- data/features/select_list.feature +12 -10
- data/features/span.feature +7 -15
- data/features/step_definitions/accessor_steps.rb +101 -26
- data/features/step_definitions/element_steps.rb +5 -0
- data/features/support/page.rb +36 -0
- data/features/table.feature +6 -15
- data/features/table_cell.feature +6 -12
- data/features/text_area.feature +7 -6
- data/features/text_field.feature +7 -6
- data/features/unordered_list.feature +9 -17
- data/lib/page-object/accessors.rb +93 -76
- data/lib/page-object/elements.rb +1 -0
- data/lib/page-object/elements/element.rb +76 -6
- data/lib/page-object/elements/option.rb +7 -0
- data/lib/page-object/elements/select_list.rb +24 -1
- data/lib/page-object/page_factory.rb +3 -3
- data/lib/page-object/platforms/selenium_select_list.rb +29 -0
- data/lib/page-object/platforms/watir_select_list.rb +30 -0
- data/lib/page-object/selenium_page_object.rb +53 -3
- data/lib/page-object/version.rb +1 -1
- data/lib/page-object/watir_page_object.rb +20 -1
- data/page-object.gemspec +2 -2
- data/spec/page-object/accessors_spec.rb +2 -2
- data/spec/page-object/elements/button_spec.rb +1 -1
- data/spec/page-object/elements/check_box_spec.rb +1 -1
- data/spec/page-object/elements/div_spec.rb +1 -1
- data/spec/page-object/elements/hidden_field_spec.rb +1 -1
- data/spec/page-object/elements/image_spec.rb +1 -1
- data/spec/page-object/elements/link_spec.rb +1 -1
- data/spec/page-object/elements/list_item_spec.rb +1 -1
- data/spec/page-object/elements/ordered_list_spec.rb +1 -1
- data/spec/page-object/elements/radio_button_spec.rb +1 -1
- data/spec/page-object/elements/select_list_spec.rb +43 -2
- data/spec/page-object/elements/span_spec.rb +1 -1
- data/spec/page-object/elements/table_row_spec.rb +5 -1
- data/spec/page-object/elements/table_spec.rb +1 -1
- data/spec/page-object/elements/text_area_spec.rb +1 -1
- data/spec/page-object/elements/text_field_spec.rb +1 -1
- data/spec/page-object/elements/unordered_list_spec.rb +1 -1
- metadata +9 -6
data/lib/page-object/version.rb
CHANGED
@@ -244,6 +244,7 @@ module PageObject
|
|
244
244
|
# See PageObject::Accessors#div
|
245
245
|
#
|
246
246
|
def div_text_for(identifier)
|
247
|
+
identifier = add_tagname_if_needed identifier, "div"
|
247
248
|
identifier = Elements::Div.watir_identifier_for identifier
|
248
249
|
@browser.div(identifier).text
|
249
250
|
end
|
@@ -253,6 +254,7 @@ module PageObject
|
|
253
254
|
# See PageObject::Accessors#div
|
254
255
|
#
|
255
256
|
def div_for(identifier)
|
257
|
+
identifier = add_tagname_if_needed identifier, "div"
|
256
258
|
identifier = Elements::Div.watir_identifier_for identifier
|
257
259
|
element = @browser.div(identifier)
|
258
260
|
PageObject::Elements::Div.new(element, :platform => :watir)
|
@@ -263,6 +265,7 @@ module PageObject
|
|
263
265
|
# See PageObject::Accessors#span
|
264
266
|
#
|
265
267
|
def span_text_for(identifier)
|
268
|
+
identifier = add_tagname_if_needed identifier, "span"
|
266
269
|
identifier = Elements::Span.watir_identifier_for identifier
|
267
270
|
@browser.span(identifier).text
|
268
271
|
end
|
@@ -272,6 +275,7 @@ module PageObject
|
|
272
275
|
# See PageObject::Accessors#span
|
273
276
|
#
|
274
277
|
def span_for(identifier)
|
278
|
+
identifier = add_tagname_if_needed identifier, "span"
|
275
279
|
identifier = Elements::Span.watir_identifier_for identifier
|
276
280
|
element = @browser.span(identifier)
|
277
281
|
PageObject::Elements::Span.new(element, :platform => :watir)
|
@@ -301,7 +305,8 @@ module PageObject
|
|
301
305
|
# See PageObject::Accessors#table
|
302
306
|
#
|
303
307
|
def table_for(identifier)
|
304
|
-
identifier =
|
308
|
+
identifier = add_tagname_if_needed identifier, "table"
|
309
|
+
identifier = Elements::Table.watir_identifier_for identifier.clone
|
305
310
|
element = @browser.table(identifier)
|
306
311
|
PageObject::Elements::Table.new(element, :platform => :watir)
|
307
312
|
end
|
@@ -311,6 +316,7 @@ module PageObject
|
|
311
316
|
# See PageObject::Accessors#cell
|
312
317
|
#
|
313
318
|
def cell_text_for(identifier)
|
319
|
+
identifier = add_tagname_if_needed identifier, "td"
|
314
320
|
identifier = Elements::TableCell.watir_identifier_for identifier
|
315
321
|
@browser.td(identifier).text
|
316
322
|
end
|
@@ -320,6 +326,7 @@ module PageObject
|
|
320
326
|
# See PageObject::Accessors#cell
|
321
327
|
#
|
322
328
|
def cell_for(identifier)
|
329
|
+
identifier = add_tagname_if_needed identifier, "td"
|
323
330
|
identifier = Elements::TableCell.watir_identifier_for identifier
|
324
331
|
element = @browser.td(identifier)
|
325
332
|
PageObject::Elements::TableCell.new(element, :platform => :watir)
|
@@ -350,6 +357,7 @@ module PageObject
|
|
350
357
|
# See PageObject::Accessors#list_item
|
351
358
|
#
|
352
359
|
def list_item_text_for(identifier)
|
360
|
+
identifier = add_tagname_if_needed identifier, "li"
|
353
361
|
identifier = Elements::ListItem.watir_identifier_for identifier
|
354
362
|
@browser.li(identifier).text
|
355
363
|
end
|
@@ -359,6 +367,7 @@ module PageObject
|
|
359
367
|
# See PageObject::Accessors#list_item
|
360
368
|
#
|
361
369
|
def list_item_for(identifier)
|
370
|
+
identifier = add_tagname_if_needed identifier, "li"
|
362
371
|
identifier = Elements::ListItem.watir_identifier_for identifier
|
363
372
|
element = @browser.li(identifier)
|
364
373
|
PageObject::Elements::ListItem.new(element, :platform => :watir)
|
@@ -369,6 +378,7 @@ module PageObject
|
|
369
378
|
# See PageObject::Accessors#unordered_list
|
370
379
|
#
|
371
380
|
def unordered_list_for(identifier)
|
381
|
+
identifier = add_tagname_if_needed identifier, "ul"
|
372
382
|
identifier = Elements::UnorderedList.watir_identifier_for identifier
|
373
383
|
element = @browser.ul(identifier)
|
374
384
|
PageObject::Elements::UnorderedList.new(element, :platform => :watir)
|
@@ -379,9 +389,18 @@ module PageObject
|
|
379
389
|
# See PageObject::Accessors#ordered_list
|
380
390
|
#
|
381
391
|
def ordered_list_for(identifier)
|
392
|
+
identifier = add_tagname_if_needed identifier, "ol"
|
382
393
|
identifier = Elements::OrderedList.watir_identifier_for identifier
|
383
394
|
element = @browser.ol(identifier)
|
384
395
|
PageObject::Elements::OrderedList.new(element, :platform => :watir)
|
385
396
|
end
|
397
|
+
|
398
|
+
private
|
399
|
+
|
400
|
+
def add_tagname_if_needed identifier, tag
|
401
|
+
return identifier if identifier.length < 2 and not identifier[:name]
|
402
|
+
identifier[:tag_name] = tag if identifier[:name]
|
403
|
+
identifier
|
404
|
+
end
|
386
405
|
end
|
387
406
|
end
|
data/page-object.gemspec
CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_dependency 'watir-webdriver', '>= 0.2.
|
23
|
-
s.add_dependency 'selenium-webdriver', '>= 0.2.
|
22
|
+
s.add_dependency 'watir-webdriver', '>= 0.2.5'
|
23
|
+
s.add_dependency 'selenium-webdriver', '>= 0.2.2'
|
24
24
|
|
25
25
|
s.add_development_dependency 'rspec', '>= 2.5.0'
|
26
26
|
s.add_development_dependency 'cucumber', '>= 0.10.2'
|
@@ -360,14 +360,14 @@ describe PageObject::Accessors do
|
|
360
360
|
it "should check a check box element" do
|
361
361
|
selenium_browser.should_receive(:find_element).twice.and_return(selenium_browser)
|
362
362
|
selenium_browser.should_receive(:selected?).and_return(false)
|
363
|
-
selenium_browser.should_receive(:
|
363
|
+
selenium_browser.should_receive(:click)
|
364
364
|
selenium_page_object.check_active
|
365
365
|
end
|
366
366
|
|
367
367
|
it "should clear a check box element" do
|
368
368
|
selenium_browser.should_receive(:find_element).twice.and_return(selenium_browser)
|
369
369
|
selenium_browser.should_receive(:selected?).and_return(true)
|
370
|
-
selenium_browser.should_receive(:
|
370
|
+
selenium_browser.should_receive(:click)
|
371
371
|
selenium_page_object.uncheck_active
|
372
372
|
end
|
373
373
|
|
@@ -13,7 +13,7 @@ describe PageObject::Elements::Button do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
17
|
key, value = button.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
@@ -12,7 +12,7 @@ describe PageObject::Elements::CheckBox do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
it "should map selenium types to same" do
|
15
|
-
[:class, :id, :name, :xpath].each do |t|
|
15
|
+
[:class, :id, :name, :xpath, :index].each do |t|
|
16
16
|
key, value = checkbox.selenium_identifier_for t => 'value'
|
17
17
|
key.should == t
|
18
18
|
end
|
@@ -13,7 +13,7 @@ describe PageObject::Elements::Div do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
17
|
key, value = div.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
@@ -18,7 +18,7 @@ describe PageObject::Elements::HiddenField do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should map selenium types to same" do
|
21
|
-
[:class, :css, :id, :name, :xpath].each do |t|
|
21
|
+
[:class, :css, :id, :name, :xpath, :index].each do |t|
|
22
22
|
key, value = hiddenfield.selenium_identifier_for t => 'value'
|
23
23
|
key.should == t
|
24
24
|
end
|
@@ -13,7 +13,7 @@ describe PageObject::Elements::Image do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
17
|
key, value = image.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
@@ -20,7 +20,7 @@ describe PageObject::Elements::Link do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should map selenium types to same" do
|
23
|
-
[:class, :id, :link, :link_text, :name, :xpath].each do |t|
|
23
|
+
[:class, :id, :link, :link_text, :name, :xpath, :index].each do |t|
|
24
24
|
key, value = link.selenium_identifier_for t => 'value'
|
25
25
|
key.should == t
|
26
26
|
end
|
@@ -13,7 +13,7 @@ describe PageObject::Elements::ListItem do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
17
|
key, value = list_item.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
@@ -13,7 +13,7 @@ describe PageObject::Elements::OrderedList do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
17
|
key, value = ol.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
@@ -12,7 +12,7 @@ describe PageObject::Elements::RadioButton do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
it "should map selenium types to same" do
|
15
|
-
[:class, :id, :name, :xpath].each do |t|
|
15
|
+
[:class, :id, :name, :xpath, :index].each do |t|
|
16
16
|
key, value = radiobutton.selenium_identifier_for t => 'value'
|
17
17
|
key.should == t
|
18
18
|
end
|
@@ -13,10 +13,51 @@ describe PageObject::Elements::SelectList do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :name, :xpath, :index].each do |t|
|
17
17
|
key, value = selectlist.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
|
+
describe "interface" do
|
24
|
+
let(:sel_list) { double('select_list') }
|
25
|
+
let(:opts) { [sel_list, sel_list] }
|
26
|
+
|
27
|
+
before(:each) do
|
28
|
+
sel_list.stub(:find_elements).and_return(sel_list)
|
29
|
+
sel_list.stub(:each)
|
30
|
+
end
|
31
|
+
|
32
|
+
context "for watir" do
|
33
|
+
it "should return an option when indexed" do
|
34
|
+
watir_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :watir)
|
35
|
+
sel_list.stub(:wd).and_return(sel_list)
|
36
|
+
sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
|
37
|
+
watir_sel_list[0].should be_instance_of PageObject::Elements::Option
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return an array of options" do
|
41
|
+
watir_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :watir)
|
42
|
+
sel_list.stub(:wd).and_return(sel_list)
|
43
|
+
sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
|
44
|
+
watir_sel_list.options.size.should == 2
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
context "for selenium" do
|
50
|
+
it "should return an option when indexed" do
|
51
|
+
selenium_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :selenium)
|
52
|
+
sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
|
53
|
+
selenium_sel_list[1].should be_instance_of PageObject::Elements::Option
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should return an array of options" do
|
57
|
+
selenium_sel_list = PageObject::Elements::SelectList.new(sel_list, :platform => :selenium)
|
58
|
+
sel_list.should_receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
|
59
|
+
selenium_sel_list.options.size.should == 2
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -13,7 +13,7 @@ describe PageObject::Elements::Span do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
17
|
key, value = span.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
@@ -32,6 +32,10 @@ describe PageObject::Elements::TableRow do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
context "for watir" do
|
35
|
+
before(:each) do
|
36
|
+
table_row_driver.stub(:find_elements).and_return(table_row_driver)
|
37
|
+
end
|
38
|
+
|
35
39
|
it "should return a table cell when indexed" do
|
36
40
|
table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir)
|
37
41
|
table_row_driver.should_receive(:[]).with(1).and_return(table_cell)
|
@@ -40,7 +44,7 @@ describe PageObject::Elements::TableRow do
|
|
40
44
|
|
41
45
|
it "should return the number of columns" do
|
42
46
|
table_row = PageObject::Elements::TableRow.new(table_row_driver, :platform => :watir)
|
43
|
-
table_row_driver.
|
47
|
+
table_row_driver.stub(:wd).and_return(table_row_driver)
|
44
48
|
table_row_driver.should_receive(:find_elements).with(:xpath, ".//child::td|th").and_return(table_row_driver)
|
45
49
|
table_row_driver.should_receive(:size).and_return(3)
|
46
50
|
table_row.columns.should == 3
|
@@ -11,7 +11,7 @@ describe PageObject::Elements::Table do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should map selenium types to same" do
|
14
|
-
[:class, :id, :name, :xpath].each do |t|
|
14
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
15
15
|
key, value = PageObject::Elements::Table.selenium_identifier_for t => 'value'
|
16
16
|
key.should == t
|
17
17
|
end
|
@@ -18,7 +18,7 @@ describe PageObject::Elements::TextArea do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should map selenium types to same" do
|
21
|
-
[:class, :css, :id, :name, :xpath].each do |t|
|
21
|
+
[:class, :css, :id, :name, :xpath, :index].each do |t|
|
22
22
|
key, value = textarea.selenium_identifier_for t => 'value'
|
23
23
|
key.should == t
|
24
24
|
end
|
@@ -18,7 +18,7 @@ describe PageObject::Elements::TextField do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should map selenium types to same" do
|
21
|
-
[:class, :css, :id, :name, :xpath].each do |t|
|
21
|
+
[:class, :css, :id, :name, :xpath, :index].each do |t|
|
22
22
|
key, value = textfield.selenium_identifier_for t => 'value'
|
23
23
|
key.should == t
|
24
24
|
end
|
@@ -13,7 +13,7 @@ describe PageObject::Elements::UnorderedList do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should map selenium types to same" do
|
16
|
-
[:class, :id, :name, :xpath].each do |t|
|
16
|
+
[:class, :id, :index, :name, :xpath].each do |t|
|
17
17
|
key, value = ul.selenium_identifier_for t => 'value'
|
18
18
|
key.should == t
|
19
19
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: page-object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: "0.1"
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jeff Morgan
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-07-01 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: watir-webdriver
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.2.
|
23
|
+
version: 0.2.5
|
24
24
|
type: :runtime
|
25
25
|
version_requirements: *id001
|
26
26
|
- !ruby/object:Gem::Dependency
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.2.
|
34
|
+
version: 0.2.2
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id002
|
37
37
|
- !ruby/object:Gem::Dependency
|
@@ -89,7 +89,7 @@ files:
|
|
89
89
|
- features/button.feature
|
90
90
|
- features/check_box.feature
|
91
91
|
- features/div.feature
|
92
|
-
- features/
|
92
|
+
- features/element_attributes.feature
|
93
93
|
- features/form.feature
|
94
94
|
- features/hidden_field.feature
|
95
95
|
- features/html/images/circle.png
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- lib/page-object/elements/image.rb
|
129
129
|
- lib/page-object/elements/link.rb
|
130
130
|
- lib/page-object/elements/list_item.rb
|
131
|
+
- lib/page-object/elements/option.rb
|
131
132
|
- lib/page-object/elements/ordered_list.rb
|
132
133
|
- lib/page-object/elements/radio_button.rb
|
133
134
|
- lib/page-object/elements/select_list.rb
|
@@ -145,6 +146,7 @@ files:
|
|
145
146
|
- lib/page-object/platforms/selenium_image.rb
|
146
147
|
- lib/page-object/platforms/selenium_link.rb
|
147
148
|
- lib/page-object/platforms/selenium_ordered_list.rb
|
149
|
+
- lib/page-object/platforms/selenium_select_list.rb
|
148
150
|
- lib/page-object/platforms/selenium_table.rb
|
149
151
|
- lib/page-object/platforms/selenium_table_row.rb
|
150
152
|
- lib/page-object/platforms/selenium_unordered_list.rb
|
@@ -152,6 +154,7 @@ files:
|
|
152
154
|
- lib/page-object/platforms/watir_form.rb
|
153
155
|
- lib/page-object/platforms/watir_image.rb
|
154
156
|
- lib/page-object/platforms/watir_ordered_list.rb
|
157
|
+
- lib/page-object/platforms/watir_select_list.rb
|
155
158
|
- lib/page-object/platforms/watir_table.rb
|
156
159
|
- lib/page-object/platforms/watir_table_row.rb
|
157
160
|
- lib/page-object/platforms/watir_unordered_list.rb
|
@@ -212,7 +215,7 @@ test_files:
|
|
212
215
|
- features/button.feature
|
213
216
|
- features/check_box.feature
|
214
217
|
- features/div.feature
|
215
|
-
- features/
|
218
|
+
- features/element_attributes.feature
|
216
219
|
- features/form.feature
|
217
220
|
- features/hidden_field.feature
|
218
221
|
- features/html/images/circle.png
|