crossbrowsify 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5294ee7d80c273b0be04f1716767fe997041e083
4
+ data.tar.gz: 8272dbbebf68c1ad72bed4074a0bb1da76a96ab3
5
+ SHA512:
6
+ metadata.gz: eb3e779115b83d7ee7411adb3b5d11b1f7586c5aec26acef243b76d5a13a74559773b0c215a5b17f19826f3fda9c9c7be999fc8d7b406cbfbbd7d4d98eb3a391
7
+ data.tar.gz: 7dd8066041c9c904eb9516afe76ab2e37bfc06d3f37bdd0e0df9c73ee01acd55285877b4a22475b465f7b05d2850ed743c29f4570fd34e1ca495c4d0e496d31e
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in crossbrowsify.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Haiku Team
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,64 @@
1
+ # Crossbrowsify
2
+
3
+ Easily integrate your app's Cucumber testing with browserstack's api.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'crossbrowsify'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install crossbrowsify
18
+
19
+ ## Usage
20
+
21
+ Put a `browsers.json` file into the root of your project - here is a short example:
22
+
23
+ {
24
+ "ie_9": {
25
+ "human": "IE 9 on Windows 7",
26
+ "browser_version":"9.0",
27
+ "browser":"IE",
28
+ "os":"Windows",
29
+ "os_version":"7"
30
+ },
31
+ "ie_8": {
32
+ "human": "IE 8 on Windows 7",
33
+ "browser_version":"8.0",
34
+ "browser":"IE",
35
+ "os":"Windows",
36
+ "os_version":"7"
37
+ },
38
+ "chrome": {
39
+ "human": "Chrome 33 on OS X Mavericks",
40
+ "browser_version":"33.0",
41
+ "browser":"chrome",
42
+ "os":"OS X",
43
+ "os_version":"Mavericks"
44
+ }
45
+ }
46
+
47
+
48
+ Add the following to your cucumber support/env.rb file:
49
+
50
+ require 'crossbrowsify/browser_setup'
51
+
52
+ Then you can run a single browser task, using the key from your browsers.json file:
53
+
54
+ rake crossbrowsify:chrome
55
+
56
+ Or you can run all the browsers in your `browsers.json` file.
57
+
58
+ ## Contributing
59
+
60
+ 1. Fork it ( https://github.com/[my-github-username]/crossbrowsify/fork )
61
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
62
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
63
+ 4. Push to the branch (`git push origin my-new-feature`)
64
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'crossbrowsify/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "crossbrowsify"
8
+ spec.version = Crossbrowsify::VERSION
9
+ spec.authors = ["Haiku Team"]
10
+ spec.summary = %q{Cross browser testing integration with browserstack}
11
+ spec.license = "BSD3"
12
+
13
+ spec.files = `git ls-files -z`.split("\x0")
14
+ # spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
15
+ # spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_development_dependency "bundler", "~> 1.6"
19
+ spec.add_development_dependency "rake"
20
+ spec.add_dependency "cucumber"
21
+ spec.add_dependency "parallel"
22
+ spec.add_dependency "selenium-webdriver"
23
+ spec.add_dependency "curb"
24
+ end
@@ -0,0 +1,10 @@
1
+ require "crossbrowsify/version"
2
+
3
+ require 'rubygems'
4
+ require 'json'
5
+
6
+ require 'rake'
7
+
8
+
9
+ require 'tasks/crossbrowsify.rake'
10
+
@@ -0,0 +1,63 @@
1
+
2
+
3
+ def remote_browser?
4
+ ENV.has_key? 'BROWSER_TASK_NAME'
5
+ end
6
+
7
+ def setup_remote_browser
8
+
9
+ raise 'Please ensure you supply ENV variables BS_USERNAME and BS_AUTHKEY from browser stack' if !ENV['BS_USERNAME'] || !ENV['BS_AUTHKEY']
10
+
11
+ url = "http://#{ENV['BS_USERNAME']}:#{ENV['BS_AUTHKEY']}@hub.browserstack.com/wd/hub"
12
+
13
+ # load browser configuration
14
+ browser_data = JSON.load(open('browsers.json'))
15
+ browser_name = ENV['BROWSER_TASK_NAME']
16
+
17
+ browser = browser_data[browser_name]
18
+
19
+ puts "Testing in #{browser['human']} (#{ENV['BROWSER_TASK_NAME']})... asefasfkljnasdfkljahsdf"
20
+
21
+ # translate into Selenium Capabilities
22
+ capabilities = Selenium::WebDriver::Remote::Capabilities.new
23
+ capabilities["os"] = browser["os"]
24
+ capabilities["browser"] = browser["browser"]
25
+
26
+ if browser["browser_version"]
27
+ capabilities["browser_version"] = browser["browser_version"]
28
+ capabilities["os_version"] = browser["os_version"]
29
+ end
30
+ if browser["device"]
31
+ capabilities["device"] = browser["device"]
32
+ end
33
+
34
+ capabilities['browserstack.debug'] = true
35
+ capabilities['browserstack.local'] = true
36
+ # capabilities['browserstack.localIdentifier'] = "#{ENV['CIRCLE_PROJECT_REPONAME']}-node-#{ENV['CIRCLE_NODE_INDEX']}"
37
+ capabilities['takesScreenshot'] = true
38
+
39
+ capabilities['project'] = ENV['CIRCLE_PROJECT_REPONAME'] if ENV['CIRCLE_PROJECT_REPONAME']
40
+ capabilities['build'] = ENV['CIRCLE_BUILD_NUM'] if ENV['CIRCLE_BUILD_NUM']
41
+
42
+ # register a driver
43
+ driver_name = "#{browser['browser']}_#{browser['browser_version']}_#{browser['os']}_#{browser['os_version']}"
44
+
45
+ driver = Capybara.register_driver(driver_name) do |app|
46
+ Capybara::Selenium::Driver.new(app, :browser => :remote, :url => url, :desired_capabilities => capabilities)
47
+ end
48
+
49
+ # use the registered driver
50
+ Capybara.default_driver = driver_name
51
+ Capybara.current_driver = driver_name
52
+ Capybara.javascript_driver = driver_name
53
+
54
+ puts "Driver: #{Capybara.default_driver}"
55
+
56
+ end
57
+
58
+
59
+
60
+ if remote_browser?
61
+ require 'crossbrowsify/speedup'
62
+ setup_remote_browser
63
+ end
@@ -0,0 +1,18 @@
1
+ require 'selenium/webdriver/remote/http/curb'
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ module Remote
6
+ class Bridge
7
+ attr_accessor :http_curb
8
+ def http
9
+ unless @http_curb
10
+ @http_curb = Http::Curb.new
11
+ @http_curb.server_url = @http.send(:server_url)
12
+ end
13
+ @http_curb
14
+ end
15
+ end # Bridge
16
+ end # Remote
17
+ end # WebDriver
18
+ end # Selenium
@@ -0,0 +1,3 @@
1
+ module Crossbrowsify
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,39 @@
1
+ require 'cucumber/rake/task'
2
+
3
+
4
+ BROWSERS = JSON.load(open('browsers.json'))
5
+
6
+ desc 'Run all cross browser tests in parallel (with ENV["nodes"] parallel limit)'
7
+ task :crossbrowsify => [:environment] do
8
+ parallel_limit = ENV["nodes"] || 2
9
+ parallel_limit = parallel_limit.to_i
10
+
11
+ sliced = BROWSERS.keys.each_slice(parallel_limit).to_a
12
+ browser_groups = sliced.first.zip(*sliced[1..-1])
13
+
14
+ browser_groups.each_with_index do |browser_group, group_index|
15
+ browser_group.compact.each do |browser_name|
16
+ if ENV['CIRCLE_NODE_INDEX'].to_i == group_index
17
+ puts "Cross browser testing against #{browser_name}."
18
+
19
+ Rake::Task["crossbrowsify:#{browser_name}"].execute
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ namespace :crossbrowsify do
26
+ BROWSERS.keys.each do |browser_name|
27
+ Cucumber::Rake::Task.new("#{browser_name}_run".to_sym) do |task|
28
+ task.cucumber_opts = ["--tags @cross_browser --tags ~@non_#{browser_name}"]
29
+ task.cucumber_opts << '-r features'
30
+ end
31
+
32
+ desc "Run cucumber against #{BROWSERS[browser_name]['human']}"
33
+ task browser_name do
34
+ ENV['BROWSER_TASK_NAME'] = browser_name
35
+
36
+ Rake::Task["crossbrowsify:#{browser_name}_run"].execute
37
+ end
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crossbrowsify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Haiku Team
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-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.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
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: cucumber
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
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: parallel
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
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: selenium-webdriver
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
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: curb
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
+ description:
98
+ email:
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - ".gitignore"
104
+ - Gemfile
105
+ - LICENSE.txt
106
+ - README.md
107
+ - Rakefile
108
+ - crossbrowsify.gemspec
109
+ - lib/crossbrowsify.rb
110
+ - lib/crossbrowsify/browser_setup.rb
111
+ - lib/crossbrowsify/speedup.rb
112
+ - lib/crossbrowsify/version.rb
113
+ - lib/tasks/crossbrowsify.rake
114
+ homepage:
115
+ licenses:
116
+ - BSD3
117
+ metadata: {}
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 2.2.2
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: Cross browser testing integration with browserstack
138
+ test_files: []