browserstack-cucumber 0.1
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.
- checksums.yaml +15 -0
- data/.gitignore +2 -0
- data/Gemfile +12 -0
- data/LICENSE.txt +22 -0
- data/README.md +76 -0
- data/Rakefile +1 -0
- data/browserstack-cucumber.gemspec +30 -0
- data/features/step_definitions/yahoo_test_steps.rb +12 -0
- data/features/support/env.rb +29 -0
- data/features/support/pages/yahoo_main_page.rb +11 -0
- data/features/support/pages/yahoo_results_page.rb +23 -0
- data/features/testing_yahoo.feature +9 -0
- data/lib/browserstack/browserstack.rb +226 -0
- data/lib/browserstack/version.rb +3 -0
- data/lib/browserstack/wait_until.rb +9 -0
- data/lib/browserstack/with_rescue.rb +34 -0
- data/lib/browserstack.rb +4 -0
- metadata +164 -0
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
data/Gemfile
ADDED
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,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,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,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
|
data/lib/browserstack.rb
ADDED
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
|