selenium_plus 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -17,7 +17,7 @@ Using page object model and page factory
17
17
 
18
18
  ```ruby
19
19
 
20
- # define page
20
+ # define pages
21
21
  class LoginPage < SeleniumPlus::Page
22
22
  element(:username_input, :id, 'username')
23
23
  element(:password_input, :id, 'password')
@@ -30,39 +30,86 @@ class LoginPage < SeleniumPlus::Page
30
30
  end
31
31
  end
32
32
 
33
- # define your site
34
- require 'pages/home_page'
33
+ class HomePage < SeleniumPlus::Page
34
+
35
+ section(:info_section, InfoSection, :id, 'info')
36
+ element(:show_btn, :css, 'input[value=Show]')
37
+
38
+ def show_first_table
39
+ show_btn.click
40
+ end
41
+ end
42
+
43
+ # define sections
44
+
45
+ class InfoSection < SeleniumPlus::Section
46
+ element(:h_table, :css, 'table.horizontal_headers')
47
+ element(:v_table, :css, 'table.vertical_headers')
48
+ end
49
+
50
+ # define site
51
+
52
+ require 'selenium_plus'
53
+ Dir.glob("#{File.dirname(__FILE__)}/sections/*.rb").each{ |file| require file }
54
+ Dir.glob("#{File.dirname(__FILE__)}/pages/*.rb").each{ |file| require file }
35
55
 
36
56
  class TestSite
57
+ def login_page
58
+ Test::LoginPage.new
59
+ end
37
60
 
38
61
  def home_page
39
62
  Test::HomePage.new
40
63
  end
41
-
42
64
  end
43
65
 
44
- SeleniumPlus.register_driver :chrome_driver do
45
- SeleniumPlus::Driver.new(:browser => :chrome)
46
- end
66
+ ```
67
+
68
+ # Using SeleniumPlus with Cucumber
69
+
70
+ In env.rb, you need to require 'test_site'
47
71
 
72
+ You can select different browser using cucumber Tag,
73
+ such as @firefox, @chrome and @ie, by default cucumber will use firefox browser.
48
74
 
49
- SeleniumPlus.using_driver(:chrome_driver)
75
+ ```ruby
50
76
 
51
- # start some test
52
- @Test = TestSite.new
53
- @Test.home_page.goto('/test_site/html/home.html')
54
- @Test.home_page.show_first_table
55
- @Test.home_page.info_section.h_table.rows_text.should == h_table.rows
77
+ @chrome
78
+ Scenario: Verify HTML Table with horizontal header
79
+ When I login to home page
80
+ And I show first table
81
+ Then Horizontal table text should be:
82
+ | ID: | Name: | Company: |
83
+ | 1 | Smith | VMware |
84
+ | 2 | James | EMC |
85
+
86
+ Steps:
87
+
88
+ When /^I login to home page$/ do
89
+ @site = TestSite.new
90
+ @site.login_page.goto('login.html')
91
+ @site.login_page.login
92
+ end
93
+
94
+ Then /^Horizontal table text should be:$/ do |h_table|
95
+ @site.home_page.info_section.h_table.headers_text.should == h_table.headers
96
+ @site.home_page.info_section.h_table.rows_text.should == h_table.rows
97
+ end
56
98
 
57
99
  ```
58
100
 
59
101
  Without using page object model
60
102
 
61
103
  ```ruby
62
- # Use default firefox driver, skipping driver registration
63
- driver = SeleniumPlus.using_driver(:chrome_driver)
64
- driver.goto('http://www.google.com.hk')
65
- driver.find(:id,'lst-ib').type('Mozy')
66
- driver.find(:css,'input[name=btnK]').click
104
+
105
+ SeleniumPlus.register_driver :firefox_driver do
106
+ SeleniumPlus::Driver.new(:browser => :firefox)
107
+ end
108
+
109
+ driver = SeleniumPlus.using_driver(:firefox_driver)
110
+
111
+ driver.visit('http://www.google.com.hk')
112
+ driver.find(:id, 'lst-ib').type('Selenium')
113
+ driver.find(:css, 'input[name=btnK]').click
67
114
 
68
115
  ```
@@ -0,0 +1,15 @@
1
+ Feature: Verify finders
2
+
3
+ Scenario: Verify find element using element.find
4
+ When I login to home page
5
+ And Title inside div#info should be: Information tables
6
+
7
+ Scenario: Verify find element using element.find
8
+ When I login to home page
9
+ And Title outside div#info should be: Test Home Page
10
+
11
+ Scenario: Verify find elements using driver.all
12
+ When I login to home page
13
+ And Titles should be:
14
+ | Test Home Page |
15
+ | Information tables |
@@ -0,0 +1,12 @@
1
+ Then /^Title (inside|outside) div#info should be: (.+)$/ do |where, title|
2
+ case where
3
+ when 'inside'
4
+ @site.home_page.info_section.title.should == title
5
+ when 'outside'
6
+ @site.home_page.title.should == title
7
+ end
8
+ end
9
+
10
+ Then /^Titles should be:$/ do |titles_table|
11
+ @site.home_page.titles.should == titles_table.raw.flatten
12
+ end
@@ -1,6 +1,7 @@
1
1
  When /^I show first table$/ do
2
2
  @site.home_page.show_first_table
3
3
  end
4
+
4
5
  Then /^Horizontal table text should be:$/ do |h_table|
5
6
  @site.home_page.info_section.h_table.headers_text.should == h_table.headers
6
7
  @site.home_page.info_section.h_table.rows_text.should == h_table.rows
@@ -1,13 +1,2 @@
1
- $:.unshift(File.dirname(__FILE__) + '/../../test_site')
2
-
3
- require 'test_site'
4
-
5
- SeleniumPlus.register_driver :firefox_driver do
6
- SeleniumPlus::Driver.new(:browser => :firefox)
7
- end
8
-
9
- SeleniumPlus.register_driver :chrome_driver do
10
- SeleniumPlus::Driver.new(:browser => :chrome)
11
- end
12
-
13
- SeleniumPlus.using_driver(:firefox_driver)
1
+ $:.unshift("#{File.dirname(__FILE__)}/../../test_site")
2
+ require 'test_site'
@@ -3,18 +3,9 @@ Before do |scenario|
3
3
  end
4
4
 
5
5
  After do |scenario|
6
- SeleniumPlus.driver.reset!
6
+ #
7
7
  end
8
8
 
9
9
  AfterStep do
10
10
  # Do things after each step.
11
- end
12
-
13
- # Setup driver using tags
14
- Before('@chrome') do
15
- SeleniumPlus.using_driver(:chrome_driver)
16
- end
17
-
18
- Before('@firefox') do
19
- SeleniumPlus.using_driver(:firefox_driver)
20
11
  end
data/lib/selenium_plus.rb CHANGED
@@ -3,7 +3,9 @@ require 'logger'
3
3
  require 'selenium-webdriver'
4
4
  require 'selenium_plus/version'
5
5
  require 'selenium_plus/exceptions'
6
+ require 'selenium_plus/finders'
6
7
  require 'selenium_plus/driver'
8
+ require 'selenium_plus/cucumber'
7
9
  require 'selenium_plus/page_obj/container'
8
10
  require 'selenium_plus/page_obj/page'
9
11
  require 'selenium_plus/page_obj/section'
@@ -57,7 +59,7 @@ module SeleniumPlus
57
59
  #
58
60
  # @return [Symbol]
59
61
  def default_driver
60
- @default_driver || :firefox_driver
62
+ @default_driver || :firefox
61
63
  end
62
64
 
63
65
  # The name of the driver currently in use
@@ -67,22 +69,38 @@ module SeleniumPlus
67
69
  @current_driver || default_driver
68
70
  end
69
71
 
72
+ # Use the default driver as the current driver
73
+ #
74
+ def use_default_driver
75
+ @current_driver = nil
76
+ end
77
+
70
78
  def using_driver(driver)
71
79
  unless drivers.has_key?(driver)
72
80
  other_drivers = drivers.keys.map { |key| key.inspect }
73
81
  raise SeleniumPlus::Exceptions::DriverNotFoundError, "Driver #{driver} was not found. Available types: #{other_drivers.join(', ')}"
74
82
  end
75
- @driver = drivers[driver].call
83
+ if @driver.nil? || @driver.native.browser != driver
84
+ @driver = drivers[driver].call
85
+ end
76
86
  end
77
87
  end
78
- end
79
88
 
89
+ end
80
90
 
81
91
  SeleniumPlus.configure do |config|
82
92
  config.default_wait_time =10
83
93
  config.enable_highlight_element = true
84
94
  end
85
95
 
86
- SeleniumPlus.register_driver :firefox_driver do
96
+ SeleniumPlus.register_driver :firefox do
87
97
  SeleniumPlus::Driver.new(:browser => :firefox)
98
+ end
99
+
100
+ SeleniumPlus.register_driver :chrome do
101
+ SeleniumPlus::Driver.new(:browser => :chrome)
102
+ end
103
+
104
+ SeleniumPlus.register_driver :ie do
105
+ SeleniumPlus::Driver.new(:browser => :ie)
88
106
  end
@@ -0,0 +1,20 @@
1
+ if defined?(Cucumber)
2
+
3
+ Before do |scenario|
4
+ SeleniumPlus.use_default_driver
5
+ end
6
+
7
+ After do |scenario|
8
+ SeleniumPlus.driver.reset!
9
+ end
10
+
11
+ Before do |scenario|
12
+ scenario.source_tag_names.each do |tag|
13
+ driver_name = tag.sub(/^@/, '').to_sym
14
+ if SeleniumPlus.drivers.has_key?(driver_name)
15
+ SeleniumPlus.current_driver = driver_name
16
+ end
17
+ end
18
+ SeleniumPlus.using_driver(SeleniumPlus.current_driver)
19
+ end
20
+ end
@@ -1,6 +1,7 @@
1
1
  module SeleniumPlus
2
2
 
3
3
  class Driver
4
+ include Finders
4
5
 
5
6
  DEFAULT_OPTIONS = { :browser => :firefox }
6
7
 
@@ -12,6 +13,9 @@ module SeleniumPlus
12
13
  @options = DEFAULT_OPTIONS.merge(options)
13
14
  end
14
15
 
16
+ # Start Selenium::Webdriver::Driver
17
+ #
18
+ # @return [Selenium::Webdriver::Driver]
15
19
  def native
16
20
  unless @native
17
21
  @native = Selenium::WebDriver.for(options[:browser])
@@ -31,15 +35,33 @@ module SeleniumPlus
31
35
  native.get(url)
32
36
  end
33
37
 
34
- def find(*args)
35
- native.find_element(*args)
36
- #highlight_element(el) if enable_highlight_element
37
- #el
38
- end
38
+ #def find(*args)
39
+ # if self.class.superclass == SeleniumPlus::Section
40
+ # @el =root_element.find_element(*args)
41
+ # else
42
+ # @el = native.find_element(*args)
43
+ # end
44
+ # highlight_element(@el) if SeleniumPlus.enable_highlight_element
45
+ # @el
46
+ #end
47
+ #
48
+ #def all(*args)
49
+ # if self.class.superclass == SeleniumPlus::Section
50
+ # root_element.find_elements(*args)
51
+ # else
52
+ # native.find_elements(*args)
53
+ # end
54
+ #end
39
55
 
40
- def all(*args)
41
- native.find_elements(*args)
42
- end
56
+ #def find(*args)
57
+ # el = native.find_element(*args)
58
+ # highlight_element(el) if SeleniumPlus.enable_highlight_element
59
+ # el
60
+ #end
61
+ #
62
+ #def all(*args)
63
+ # native.find_elements(*args)
64
+ #end
43
65
 
44
66
  def active_element
45
67
  native.switch_to.active_element
@@ -0,0 +1,21 @@
1
+ module SeleniumPlus
2
+ module Finders
3
+ def find(*args)
4
+ if self.class.superclass == SeleniumPlus::Section
5
+ @el =root_element.find_element(*args)
6
+ else
7
+ @el = SeleniumPlus.driver.native.find_element(*args)
8
+ end
9
+ SeleniumPlus.driver.highlight_element(@el) if SeleniumPlus.enable_highlight_element
10
+ @el
11
+ end
12
+
13
+ def all(*args)
14
+ if self.class.superclass == SeleniumPlus::Section
15
+ root_element.find_elements(*args)
16
+ else
17
+ SeleniumPlus.driver.native.find_elements(*args)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,18 +1,19 @@
1
1
  module SeleniumPlus
2
2
  class Page
3
+ include Finders
3
4
  extend Container
4
5
 
5
6
  def goto(url)
6
7
  SeleniumPlus.driver.visit(url)
7
8
  end
8
9
 
9
- private
10
- def find(*args)
11
- SeleniumPlus.driver.find(*args)
12
- end
13
-
14
- def all(*args)
15
- SeleniumPlus.driver.all(*args)
16
- end
10
+ #private
11
+ #def find(*args)
12
+ # SeleniumPlus.driver.find(*args)
13
+ #end
14
+ #
15
+ #def all(*args)
16
+ # SeleniumPlus.driver.all(*args)
17
+ #end
17
18
  end
18
19
  end
@@ -1,5 +1,6 @@
1
1
  module SeleniumPlus
2
2
  class Section
3
+ include Finders
3
4
  extend Container
4
5
 
5
6
  attr_reader :root_element
@@ -8,13 +9,14 @@ module SeleniumPlus
8
9
  @root_element = root_element
9
10
  end
10
11
 
11
- private
12
- def find(*args)
13
- root_element.find(*args)
14
- end
15
-
16
- def all(*args)
17
- root_element.all(*args)
18
- end
12
+ #private
13
+ #
14
+ #def find(*args)
15
+ # root_element.find(*args)
16
+ #end
17
+ #
18
+ #def all(*args)
19
+ # root_element.all(*args)
20
+ #end
19
21
  end
20
22
  end
@@ -1,6 +1,7 @@
1
1
  # Public: Add extension method to Element class
2
2
  #
3
3
  class Selenium::WebDriver::Element
4
+ # include SeleniumPlus::Finders
4
5
  include SeleniumPlus::Elements::Table
5
6
 
6
7
  # Retrieve the given attribute
@@ -1,14 +1,32 @@
1
1
  module SeleniumPlus
2
2
  module Elements
3
3
  module Table
4
- # Raw elements of table
4
+
5
+ # Raw Selenium::WebDriver::Element of the table
6
+ #
7
+ # Examples:
8
+ # A html table:
9
+ # | id | name |
10
+ # | 1 | alex |
11
+ # | 2 | smith |
12
+ #
13
+ # gets converted into the following:
14
+ # #=> [[Element, Element],[Element, Element], [Element, Element]]
5
15
  #
6
16
  # @return [Array[Array<Selenium::WebDriver::Element>]]
7
17
  def raw
8
18
  self.all(:css, 'tr').map{ |row| row.all(:css, 'th,td')}
9
19
  end
10
20
 
11
- # Raw text of table
21
+ # Raw text of this table
22
+ # Examples:
23
+ # A html table:
24
+ # | id | name |
25
+ # | 1 | alex |
26
+ # | 2 | smith |
27
+ #
28
+ # gets converted into the following:
29
+ # #=> [['id', 'name'],['1', 'alex'], ['2', 'smith']]
12
30
  #
13
31
  # @return [Array[Array<String>]]
14
32
  def raw_text
@@ -45,21 +63,54 @@ module SeleniumPlus
45
63
  end
46
64
  end
47
65
 
48
- # Text of table header
66
+ # Table headers text
67
+ # Examples:
68
+ # A html table header with horizontal headers
69
+ # | id | name |
70
+ #
71
+ # and
72
+ #
73
+ # A html table header with vertical headers
74
+ # | id |
75
+ # | name |
76
+ #
77
+ # get converted into the following:
78
+ # #=> ['id', 'name']
49
79
  #
50
80
  # @return [Array<String>]
51
81
  def headers_text
52
82
  headers.map { |cell| cell.text.strip }
53
83
  end
54
84
 
55
- # Text of table rows
85
+ # Table body rows text
86
+ # Examples:
87
+ # A html table body with horizontal headers
88
+ # | 1 | alex |
89
+ # | 2 | smith |
90
+ #
91
+ # and
92
+ #
93
+ # A html table body with vertical headers
94
+ # | 1 | 2 |
95
+ # | alex | smith |
96
+ #
97
+ # get converted into the following:
98
+ # #=> [['1', 'alex'], ['2', 'smith']]
56
99
  #
57
100
  # @return [Array[Array<String>]]
58
101
  def rows_text
59
102
  rows.map { |row| row.map { |cell| cell.text.strip } }
60
103
  end
61
104
 
62
- # Array of Hash where the keys of each Hash are the headers in the table
105
+ # Converts this table into an Array of Hash where the keys of each Hash are the headers in the table.
106
+ # Examples:
107
+ # A html table:
108
+ # | id | name | age |
109
+ # | 1 | alex | 10 |
110
+ # | 2 | smith | 16 |
111
+ #
112
+ # Gets converted into the following:
113
+ # # => [{'id' => '1', 'name' => 'alex', 'age' => '10'}, {'id' => '2', 'name' => 'smith', 'age' => '16'}]
63
114
  #
64
115
  # @return [Array<Hash>]
65
116
  def hashes
@@ -1,3 +1,3 @@
1
1
  module SeleniumPlus
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -8,9 +8,9 @@ Gem::Specification.new do |gem|
8
8
  gem.version = SeleniumPlus::VERSION
9
9
  gem.authors = ['SparkYao']
10
10
  gem.email = %w(shipuyao@gmail.com)
11
- gem.description = ''
11
+ gem.description = 'SeleniumPlus creates a very thin layer between Selenium and your applications, it gives your a simple and quick way to describe your web site using the Page Object Model.'
12
12
  gem.summary = ''
13
- gem.homepage = ''
13
+ gem.homepage = 'https://github.com/shipuyao/selenium_plus'
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -9,8 +9,10 @@
9
9
  </script>
10
10
  </head>
11
11
  <body>
12
+ <div class='title'>Test Home Page</div>
12
13
  <input type='submit' name='Show First Table' value='Show' onclick="showFirstTable('first')"/>
13
14
  <div id='info'>
15
+ <div class='title'>Information tables</div>
14
16
  <table id="first" class='horizontal_headers' style="display: none">
15
17
  <tr>
16
18
  <th>ID:</th>
@@ -2,11 +2,23 @@ module Test
2
2
  class HomePage < SeleniumPlus::Page
3
3
 
4
4
  section(:info_section, InfoSection, :id, 'info')
5
+
5
6
  element(:show_btn, :css, 'input[value=Show]')
6
7
 
8
+ element(:title_div, :css, 'div.title')
9
+ elements(:title_divs, :css, 'div.title')
10
+
7
11
  def show_first_table
8
12
  show_btn.click
9
13
  end
14
+
15
+ def title
16
+ title_div.text
17
+ end
18
+
19
+ def titles
20
+ title_divs.map{ |cell| cell.text.strip }
21
+ end
10
22
  end
11
23
  end
12
24
 
@@ -4,6 +4,10 @@ module Test
4
4
 
5
5
  element(:h_table, :css, 'table.horizontal_headers')
6
6
  element(:v_table, :css, 'table.vertical_headers')
7
+ element(:title_div, :css, 'div.title')
7
8
 
9
+ def title
10
+ title_div.text
11
+ end
8
12
  end
9
13
  end
@@ -8,5 +8,5 @@ end
8
8
  driver = SeleniumPlus.using_driver(:firefox_driver)
9
9
 
10
10
  driver.visit('http://www.google.com.hk')
11
- driver.find(:id, 'lst-ib')
12
-
11
+ driver.find(:id, 'lst-ib').type('Selenium')
12
+ driver.find(:css, 'input[name=btnK]').click
@@ -1,10 +1,7 @@
1
- $:.unshift(File.dirname(__FILE__))
2
-
3
1
  require 'selenium_plus'
4
- require 'sections/info_section'
5
- require 'pages/login_page'
6
- require 'pages/home_page'
7
2
 
3
+ Dir.glob("#{File.dirname(__FILE__)}/sections/*.rb").each{ |file| require file }
4
+ Dir.glob("#{File.dirname(__FILE__)}/pages/*.rb").each{ |file| require file }
8
5
 
9
6
  class TestSite
10
7
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selenium_plus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-05 00:00:00.000000000 Z
12
+ date: 2013-03-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70285072777900 !ruby/object:Gem::Requirement
16
+ requirement: &70240881264280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70285072777900
24
+ version_requirements: *70240881264280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: selenium-webdriver
27
- requirement: &70285072776760 !ruby/object:Gem::Requirement
27
+ requirement: &70240881262740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.25.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70285072776760
35
+ version_requirements: *70240881262740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70285072775160 !ruby/object:Gem::Requirement
38
+ requirement: &70240881261720 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.1.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70285072775160
46
+ version_requirements: *70240881261720
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: cucumber
49
- requirement: &70285072774360 !ruby/object:Gem::Requirement
49
+ requirement: &70240881260520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,8 +54,10 @@ dependencies:
54
54
  version: 1.2.1
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70285072774360
58
- description: ''
57
+ version_requirements: *70240881260520
58
+ description: SeleniumPlus creates a very thin layer between Selenium and your applications,
59
+ it gives your a simple and quick way to describe your web site using the Page Object
60
+ Model.
59
61
  email:
60
62
  - shipuyao@gmail.com
61
63
  executables: []
@@ -68,14 +70,18 @@ files:
68
70
  - README.md
69
71
  - Rakefile
70
72
  - features/drivers.feature
73
+ - features/finders.feature
74
+ - features/step_definitions/finder_steps.rb
71
75
  - features/step_definitions/general_steps.rb
72
76
  - features/step_definitions/tables_steps.rb
73
77
  - features/support/env.rb
74
78
  - features/support/hooks.rb
75
79
  - features/tables.feature
76
80
  - lib/selenium_plus.rb
81
+ - lib/selenium_plus/cucumber.rb
77
82
  - lib/selenium_plus/driver.rb
78
83
  - lib/selenium_plus/exceptions.rb
84
+ - lib/selenium_plus/finders.rb
79
85
  - lib/selenium_plus/page_obj/container.rb
80
86
  - lib/selenium_plus/page_obj/page.rb
81
87
  - lib/selenium_plus/page_obj/section.rb
@@ -90,7 +96,7 @@ files:
90
96
  - test_site/sections/info_section.rb
91
97
  - test_site/test_project.rb
92
98
  - test_site/test_site.rb
93
- homepage: ''
99
+ homepage: https://github.com/shipuyao/selenium_plus
94
100
  licenses: []
95
101
  post_install_message:
96
102
  rdoc_options: []
@@ -116,6 +122,8 @@ specification_version: 3
116
122
  summary: ''
117
123
  test_files:
118
124
  - features/drivers.feature
125
+ - features/finders.feature
126
+ - features/step_definitions/finder_steps.rb
119
127
  - features/step_definitions/general_steps.rb
120
128
  - features/step_definitions/tables_steps.rb
121
129
  - features/support/env.rb