browserstack-cucumber 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YjQwMzNjMzg0ZWYwYTkyZTQ0MGJlODVhMGU1MTE3NjY4MjBiOTljMA==
5
+ data.tar.gz: !binary |-
6
+ ZDRmMTllMDE2YTRmNjU2MzczYzczZWJhNzA0MDkxMzA2OTkzMGQ0OA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MDZlM2Y2Zjg0MGVlNmI5NmFkYjI3Njg2ZDllZjdmNmNjMGViYjgwOTlkMjAz
10
+ ZmQ2NDIzYmVkMGNjOGM3Njg4NTA4YWY0NTViYzM3YzY5YmU4MTNjNWM1MWEz
11
+ ZTg2OTc5Y2FiOGIxMWVjNzI4YjFkMzE0N2EwNmU2Yjc1Y2I2N2U=
12
+ data.tar.gz: !binary |-
13
+ M2VlZTZkZjk3ZWViYmNkZThmZjJlY2U5YTc1MzJiYmUzZjJjYzg4Y2U4NTQ0
14
+ ZTkyNmEwNjg3NTcxYzI3NDMwYzFlYzE1MTVkNTRjMDBjYTZmMGYzMTUxNmEy
15
+ ZjI2YTRlM2E1NzM1Yjk2NDE0YTY3N2IyMDg0MjJhMTI2NzE5YTA=
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'rspec'
6
+ gem 'cucumber'
7
+ gem 'page-object'
8
+ gem 'rest-client'
9
+ gem 'json'
10
+
11
+
12
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Long Tail Ad Solutions
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # BrowserStackCucumber
2
+
3
+ A Ruby helper for running tests in BrowserStack Automate browser testing cloud service.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'browserstack-cucumber'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install browserstack-cucumber
18
+
19
+ ## Usage
20
+
21
+ browserstack-cucumber designed to get configuration from environment variables set by Jenkins.
22
+
23
+ ###Code changes:
24
+ See features/support/env.rb on how to add BrowserStack support to your cucumber tests:
25
+
26
+ ```ruby
27
+ require'rspec/expectations'
28
+ require'page-object'
29
+ require 'BrowserStack/browserstack.rb'
30
+ require'selenium/webdriver'
31
+
32
+ World(PageObject::PageFactory)
33
+
34
+ #Installing Cucumber hooks
35
+ Before('@selenium') do
36
+ @browser = ::BrowserStackCucumber.before_hook_impl
37
+ end
38
+
39
+ Around('@selenium') do |scenario, block|
40
+ ::BrowserStackCucumber.around_hook_impl(scenario, block)
41
+ end
42
+
43
+ at_exit do
44
+ ::BrowserStackCucumber.at_exit_impl()
45
+ end
46
+ ```
47
+
48
+
49
+ ###Running tests:
50
+
51
+ You'll need to set the following environment variables (the following values are used http://saucelabs.com/rest/v1/info/browsers/webdriver)
52
+ * SELENIUM_PLATFORM (os)
53
+ * SELENIUM_BROWSER (api_name)
54
+ * SELENIUM_VERSION (short_version)
55
+ * BROWSER_STACK_USER_NAME
56
+ * BROWSER_STACK_API_KEY
57
+
58
+ To run cucumber tests suite:
59
+
60
+ $ cucumber SELENIUM_PLATFORM="Windows 2008" SELENIUM_BROWSER="firefox" SELENIUM_VERSION="24" BROWSER_STACK_API_KEY="<your browserstack api key>" BROWSER_STACK_USER_NAME="<browserstack username>"
61
+
62
+ ## Testing the Gem:
63
+
64
+ set the following env variables
65
+ run tests with
66
+
67
+ $ bundle exec cucumber SELENIUM_PLATFORM="Windows 2008" SELENIUM_BROWSER="firefox" SELENIUM_VERSION="24" BROWSER_STACK_API_KEY="<your browserstack api key>" BROWSER_STACK_USER_NAME="<browserstack username>"
68
+
69
+
70
+ ## Contributing
71
+
72
+ 1. Fork it
73
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
74
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
75
+ 4. Push to the branch (`git push origin my-new-feature`)
76
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'browserstack/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'browserstack-cucumber'
8
+ spec.version = BrowserStackCucumber::VERSION
9
+ spec.authors = ['Vladimir Vladimirov']
10
+ #noinspection RubyLiteralArrayInspection
11
+ spec.email = ['vladimir@jwplayer.com']
12
+ spec.description = %q{A Ruby helper for running tests in BrowserStack}
13
+ spec.summary = %q{A Ruby helper for running tests in BrowserStack Automate browser testing cloud service}
14
+ spec.homepage = 'https://github.com/JWPlayer/browserstack-cucumber'
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files`.split($/)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ #noinspection RubyLiteralArrayInspection
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.3'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'cucumber'
27
+ spec.add_development_dependency 'page-object'
28
+ spec.add_dependency 'rest-client'
29
+ spec.add_dependency 'json'
30
+ end
@@ -0,0 +1,12 @@
1
+ Given(/^I am on the yahoo page$/) do
2
+ visit(YahooMainPage)
3
+ end
4
+
5
+ When(/^I do search for phrase "([^"]*)"$/) do |search_phrase|
6
+ on(YahooMainPage).search_query = search_phrase
7
+ on(YahooMainPage).do_search
8
+ end
9
+
10
+ Then(/^I should see more then "([^"]*)" result$/) do |arg|
11
+ on(YahooResultsPage).search_results.count.should > arg.to_i
12
+ end
@@ -0,0 +1,29 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__),'..','..','lib'))
2
+
3
+ require'rspec/expectations'
4
+ require'page-object'
5
+ require 'BrowserStack/browserstack.rb'
6
+ require'selenium/webdriver'
7
+
8
+ World(PageObject::PageFactory)
9
+
10
+ #Installing Cucumber hooks
11
+ begin
12
+ if ENV['SELENIUM_PLATFORM'] and !$0.include? 'app_checker.rb'
13
+ Before('@selenium') do
14
+ @browser = ::BrowserStackCucumber.before_hook_impl
15
+ end
16
+
17
+ Around('@selenium') do |scenario, block|
18
+ ::BrowserStackCucumber.around_hook_impl(scenario, block)
19
+ end
20
+
21
+ at_exit do
22
+ ::BrowserStackCucumber.at_exit_impl()
23
+ end
24
+ end
25
+
26
+ rescue NoMethodError=>e
27
+ puts e
28
+ end
29
+
@@ -0,0 +1,11 @@
1
+ class YahooMainPage
2
+ include PageObject
3
+
4
+ page_url 'http://yahoo.com'
5
+
6
+
7
+ text_field(:search_query, name: 'p')
8
+
9
+ button(:do_search, id: 'search-submit')
10
+
11
+ end
@@ -0,0 +1,23 @@
1
+ class YahooResultsPage
2
+ include PageObject
3
+
4
+ expected_title 'why yahoo changed the logo - Yahoo Search Results'
5
+
6
+ def search_results
7
+ @browser.find_elements(css: 'li > div > div > h3 > a')
8
+ end
9
+
10
+ def initialize_page
11
+ #has_expected_title_wait? if self.respond_to?("has_expected_title_wait?")
12
+
13
+ has_expected_title? if self.respond_to?('has_expected_title?')
14
+
15
+ #has_expected_element? if self.respond_to?("has_expected_element?")
16
+
17
+ #has_expected_element_visible? if self.respond_to?("has_expected_element_visible?")
18
+
19
+
20
+ end
21
+
22
+
23
+ end
@@ -0,0 +1,9 @@
1
+ @selenium
2
+ Feature: trying to figure out why Yahoo changed logo
3
+
4
+
5
+ Scenario: let's ask yahoo do they know
6
+ Given I am on the yahoo page
7
+ When I do search for phrase "why yahoo changed the logo"
8
+ Then I should see more then "1" result
9
+
@@ -0,0 +1,226 @@
1
+ require 'rubygems'
2
+ require 'rest-client'
3
+ require 'json'
4
+ require 'BrowserStack/wait_until'
5
+
6
+ module BrowserStackCucumber
7
+
8
+ class Config
9
+ attr_reader :browser
10
+
11
+ @test_url = 'https://account.jwplayer.com/sign-in'
12
+ @test_substring = 'sign in'
13
+ @browser = nil
14
+
15
+ def test_url=(url)
16
+ @test_url = url
17
+ end
18
+
19
+ def self.name_from_scenario(scenario)
20
+ # Special behavior to handle Scenario Outlines
21
+ if scenario.instance_of? ::Cucumber::Ast::OutlineTable::ExampleRow
22
+ table = scenario.instance_variable_get(:@table)
23
+ outline = table.instance_variable_get(:@scenario_outline)
24
+ return "#{outline.feature.file} - #{outline.title} - #{table.headers} -> #{scenario.name}"
25
+ end
26
+ scenario, feature = _scenario_and_feature_name(scenario)
27
+ return "#{feature} - #{scenario}"
28
+ end
29
+
30
+ def self._scenario_and_feature_name(scenario)
31
+ scenario_name = scenario.name.split("\n").first
32
+ feature_name = scenario.feature.short_name
33
+ return scenario_name, feature_name
34
+ end
35
+
36
+ def self.selenium_username
37
+ ENV['BROWSER_STACK_USER_NAME']
38
+ end
39
+
40
+ def self.selenium_apikey
41
+ ENV['BROWSER_STACK_API_KEY']
42
+ end
43
+
44
+ def self.selenium_os
45
+ #TODO: Windows 8 doesn't match BS
46
+ #'Windows XP' => Windows
47
+ ENV['SELENIUM_PLATFORM'].split(' ')[0]
48
+ end
49
+
50
+ def self.selenium_os_version
51
+ #'Windows XP' => XP
52
+ r = ENV['SELENIUM_PLATFORM'].split(' ')[1]
53
+ return 'XP' if (r=='2003')
54
+ return '7' if (r=='2008')
55
+ return '8' if (r=='2012')
56
+ r
57
+ end
58
+
59
+ def self.selenium_browser
60
+ #firefox
61
+ ENV['SELENIUM_BROWSER']
62
+ end
63
+
64
+ def self.selenium_browser_version
65
+ #21
66
+ ENV['SELENIUM_VERSION']
67
+ end
68
+
69
+
70
+ def self.capabilities
71
+
72
+ capabilities = ::Selenium::WebDriver::Remote::Capabilities.new
73
+ capabilities[:name] = 'Testing Selenium 2 with Ruby on BrowserStack'
74
+ capabilities['os'] = selenium_os
75
+ capabilities['os_version'] = selenium_os_version
76
+ capabilities['browser'] = selenium_browser
77
+ capabilities['browser_version'] = selenium_browser_version
78
+ capabilities['browserstack.user'] = selenium_username
79
+ capabilities['browserstack.key'] = selenium_apikey
80
+ capabilities['browserstack.debug'] = 'true'
81
+ capabilities['acceptSslCerts'] = 'true'
82
+ capabilities['Idle timeout'] = 30
83
+ capabilities['build'] = ENV['BUILD_NUMBER']
84
+ capabilities['project'] = ENV['JOB_NAME']
85
+ capabilities
86
+ end
87
+ def self.url
88
+ 'http://hub.browserstack.com/wd/hub'
89
+ end
90
+
91
+ def self.init_browser(scenario)
92
+ my_capabilities = capabilities()
93
+ my_url = url()
94
+ my_capabilities[:name] = name_from_scenario(scenario)
95
+ @browser = nil
96
+ count=0
97
+ try_count=0
98
+
99
+ #check for session limit before starting the test
100
+ wait_till_session_is_available()
101
+
102
+ WaitUntil::wait_until(500) do
103
+ count+=1
104
+ puts "try #{count} to init browser" if count>1
105
+
106
+ begin
107
+ try_count+=1
108
+ @browser = Selenium::WebDriver.for(:remote, :url => my_url, :desired_capabilities => my_capabilities)
109
+ @browser.get @test_url
110
+ raise "Network connection issue. Failed to open #{@test_url} and find '#{@test_substring}' substring" if !@browser.page_source.downcase.include? @test_substring
111
+ @browser
112
+ rescue =>e
113
+ if e.message.include? 'sessions are currently being used. Please upgrade to add more parallel sessions'
114
+ puts "Run out of sessions: '#{e.message}'"
115
+ else
116
+ puts "Exception while initializing Selenium session: #{e.class }#{e}"
117
+ puts e.backtrace
118
+ @browser.quit if !@browser.nil?
119
+ raise if try_count>30
120
+ end
121
+ end
122
+ end
123
+
124
+ if @browser.nil?
125
+ puts 'failed to init browser'
126
+ raise 'failed to initiate remote browser session after 300 seconds'
127
+ end
128
+
129
+ unless @browser.is_a? ::Selenium::WebDriver::Driver
130
+ puts 'invalid browser'
131
+ raise 'invalid browser'
132
+ end
133
+
134
+ @browser.instance_variable_get(:'@bridge').maximizeWindow
135
+ #puts my_capabilities['name']
136
+ #puts @browser.session_id
137
+ ENV['browser_session_id'] = @browser.session_id
138
+ @browser
139
+ end
140
+
141
+ def self.wait_till_session_is_available
142
+ ::BrowserStackCucumber::WaitUntil::wait_until(500) do
143
+ url = "https://#{selenium_username}:#{selenium_apikey}@api.browserstack.com/3/status"
144
+ r = RestClient.get(url)
145
+ parsed_r = JSON.parse(r.body)
146
+ puts "no free BrowserStack session available now#{parsed_r}" if (parsed_r['sessions_limit']==parsed_r['running_sessions'])
147
+ parsed_r['sessions_limit']-parsed_r['running_sessions']>0
148
+ end
149
+ rescue RestClient::Unauthorized=>e
150
+ puts "Error: Failed to access BrowserStack account, please check username and api key: #{e}"
151
+ raise
152
+ end
153
+
154
+ def self.browser
155
+ @browser
156
+ end
157
+
158
+ def self.close_browser
159
+ @browser.quit if !@browser.nil?
160
+ @browser = nil
161
+ end
162
+
163
+ def self.close_browser_force
164
+ unless @browser.nil?
165
+ puts @browser.title
166
+ STDERR.puts 'Something went wrong and selenium session was not closed. Closing it now.'
167
+ ::BrowserStackCucumber::Config.close_browser
168
+ end
169
+
170
+ end
171
+
172
+ end
173
+
174
+
175
+ module_function
176
+ def before_hook_impl
177
+ #::Capybara.default_driver = :browser_stack
178
+ #::Capybara.current_driver = :browser_stack
179
+ @browser = BrowserStackCucumber::Config.browser
180
+ end
181
+
182
+ module_function
183
+ def around_hook_impl(scenario, block)
184
+ #::Capybara.current_driver = :browser_stack
185
+
186
+ #set additional job details here (project, build, name etc)
187
+ #init selenium session
188
+
189
+ #driver = ::Capybara.current_session.driver
190
+ #noinspection RubyUnusedLocalVariable
191
+ my_browser = BrowserStackCucumber::Config.init_browser(scenario)
192
+
193
+ #set sessions details for BrowserStack here
194
+ #Job = ...
195
+
196
+ # This allow us to execute steps (n) times
197
+ unless scenario.instance_of? ::Cucumber::Ast::OutlineTable::ExampleRow
198
+ scenario.steps.each do |step|
199
+ step.instance_variable_set(:@skip_invoke, false)
200
+ end
201
+ end
202
+
203
+ block.call
204
+
205
+ # Quit the driver to allow for the generation of a new session_id
206
+ BrowserStackCucumber::Config.close_browser
207
+
208
+ #report job status to BrowserStack
209
+ #unless job.nil?
210
+ # job.passed = !scenario.failed?
211
+ # job.save
212
+ #end
213
+
214
+
215
+
216
+ end
217
+
218
+ module_function
219
+ def at_exit_impl
220
+ ::BrowserStackCucumber::Config.close_browser_force
221
+ #do global shutdown (i.e. tunnel)
222
+ #check for global errors
223
+ end
224
+
225
+
226
+ end
@@ -0,0 +1,3 @@
1
+ module BrowserStackCucumber
2
+ VERSION = '0.1'
3
+ end
@@ -0,0 +1,9 @@
1
+ module BrowserStackCucumber
2
+ module WaitUntil
3
+
4
+ def self.wait_until(timeout = 10, message=nil, &block)
5
+ wait = Selenium::WebDriver::Wait.new(:timeout => timeout, :message => message)
6
+ wait.until &block
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,34 @@
1
+ module BrowserStackCucumber
2
+ module RetryHelper
3
+ def self.with_rescue(exception, limit=1, &block)
4
+
5
+ try=0
6
+ begin
7
+ block.call(try)
8
+ rescue exception
9
+ try+=1
10
+ retry if try<=limit
11
+ end
12
+ end
13
+
14
+ def self.with_rescue_many(exceptions, limit=1, &block)
15
+
16
+ try=0
17
+ begin
18
+ block.call(try)
19
+ rescue *exceptions
20
+ try+=1
21
+ retry if try<=limit
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+
28
+ =begin
29
+ usage example
30
+ RetryHelper::with_rescue(Selenium::WebDriver::Error::StaleElementReferenceError, 5) do
31
+ page_headline.include?('Your Billing Information')
32
+ end
33
+
34
+ =end
@@ -0,0 +1,4 @@
1
+ require 'browsrstack/version'
2
+ require 'browsrstack/browserstack'
3
+
4
+
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: browserstack-cucumber
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Vladimir Vladimirov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: page-object
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rest-client
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: json
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: A Ruby helper for running tests in BrowserStack
112
+ email:
113
+ - vladimir@jwplayer.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - Gemfile
120
+ - LICENSE.txt
121
+ - README.md
122
+ - Rakefile
123
+ - browserstack-cucumber.gemspec
124
+ - features/step_definitions/yahoo_test_steps.rb
125
+ - features/support/env.rb
126
+ - features/support/pages/yahoo_main_page.rb
127
+ - features/support/pages/yahoo_results_page.rb
128
+ - features/testing_yahoo.feature
129
+ - lib/browserstack.rb
130
+ - lib/browserstack/browserstack.rb
131
+ - lib/browserstack/version.rb
132
+ - lib/browserstack/wait_until.rb
133
+ - lib/browserstack/with_rescue.rb
134
+ homepage: https://github.com/JWPlayer/browserstack-cucumber
135
+ licenses:
136
+ - MIT
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ! '>='
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.1.9
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: A Ruby helper for running tests in BrowserStack Automate browser testing
158
+ cloud service
159
+ test_files:
160
+ - features/step_definitions/yahoo_test_steps.rb
161
+ - features/support/env.rb
162
+ - features/support/pages/yahoo_main_page.rb
163
+ - features/support/pages/yahoo_results_page.rb
164
+ - features/testing_yahoo.feature