webdrivers 2.4.0 → 3.0.0.beta1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fcddb954704b678fab85d7ae639d1c093387e30a
4
- data.tar.gz: 27c68403706b2b469a0e4d643318321a8a3dfc88
3
+ metadata.gz: 28974e49008ce2ee61b8456679884651537c5527
4
+ data.tar.gz: 2c4a8ce5c5ec17a568a4dd966de0594a2490d15f
5
5
  SHA512:
6
- metadata.gz: 4a4562dc88f07adacffd0566765813ae34e9c58bdd75243e5f9dafe28b8759d2b01c7f3ae1f41dce39735a5e6c40c8032234ed1d8fa7198720ca38245a3567a3
7
- data.tar.gz: 4fda0ac9518d6f57e8a55a620a467db14dd107deb5a08842975abc6c12eca71fc4c6c309f97ef1e5346f0d56ae2351c02bc8d4c60e8748a6ec1610a1fbe46211
6
+ metadata.gz: 24676074712c8cc796347070ea7aef26388ca1c10a834a456cb10a9d1c661d21bddb4cf67e776aff37b29f092dca9fe1c1441163d245f6db3ffe1f6b83fbffdb
7
+ data.tar.gz: f0e5923038eb6f006f283c876d6d317e1b8b1cfe40d3d715982a0d224bc5f4aaef1c8beda52a0ad43327ecdf751932b66aefb3695998efd3b37b1727a5670f56
data/.travis.yml CHANGED
@@ -1,3 +1,6 @@
1
+ sudo: required
2
+ dist: trusty
1
3
  language: ruby
4
+ cache: bundler
2
5
  rvm:
3
- - 2.2.6
6
+ - 2.4.1
data/CHANGELOG.md CHANGED
@@ -1,114 +1,5 @@
1
- Changelog
2
- ==========
1
+ ### 3.0.0.beta1 (2017-08-15)
3
2
 
4
- 2.4.0 - 2016-12-18
5
- ----------
6
-
7
- * Update MicrosoftWebDriver version
8
- * Use rubyzip gem instead of zip
9
- * Bug fixes for download method
10
-
11
-
12
- 2.3.2 - 2016-11-26
13
- ----------
14
-
15
- * Bug fixes for Windows
16
-
17
-
18
- 2.3.1 - 2016-11-26
19
- ----------
20
-
21
- * Bug fixes for Windows
22
-
23
-
24
- 2.3.0 - 2016-11-26
25
- ----------
26
-
27
- * Implement IEDriver support
28
- * Implement MicrosoftWebDriver support
29
-
30
-
31
- 2.2.1 - 2016-11-26
32
- ----------
33
-
34
- * Bug fixes for Windows
35
-
36
-
37
- 2.2.0 - 2016-11-26
38
- ----------
39
-
40
- * Implement phantomjs support
41
-
42
-
43
- 2.1.1 - 2016-11-26
44
- ----------
45
-
46
- * Improve Decompression Approach
47
-
48
-
49
- 2.1.0 - 2016-11-25
50
- ----------
51
-
52
- * Implemented geckodriver support
53
-
54
-
55
- 2.0.0 - 2016-11-25
56
- ----------
57
-
58
- * Renamed fork from chromedriver-helper to webdrivers
59
- * Re-implemented chromedriver usage
60
-
61
-
62
- 1.0.0 - 2015-06-06
63
- ----------
64
-
65
- * Updated gemspec info. Happy 1.0!
66
-
67
-
68
- 0.0.9 - 2015-06-06
69
- ----------
70
-
71
- * No longer require 'curl' or 'wget', or 'unzip' utilities to be installed. You know, for Windows. (Thanks, @elementc!)
72
- * Support JRuby by removing dependency on native-C-extension gem. (Thanks, Marques Lee!)
73
-
74
-
75
- 0.0.8 - 2015-01-23
76
- ----------
77
-
78
- * Guaranteeing that we get the *latest* version of chromedriver. (#15) (Thanks, @AlexRiedler!)
79
-
80
-
81
- 0.0.7 - 26 Aug 2014
82
- ----------
83
-
84
- * Added support for windows binaries. (Thanks, @elementc!)
85
-
86
-
87
- 0.0.6 - 26 Aug 2014
88
- ----------
89
-
90
- * Fixed to work with new Google download page. #7 (Thanks, @mars!)
91
-
92
-
93
- 0.0.5 - 15 Aug 2012
94
- ----------
95
-
96
- * Fixed support for JRuby on non-Windows platforms. #4 (Thanks, Tim Olsen!)
97
-
98
-
99
- 0.0.4 - 1 Aug 2012
100
- ----------
101
-
102
- * Including `chromedriver-update` to easily allow people to force-upgrade. #3
103
-
104
-
105
- 0.0.3 - 20 Mar 2012
106
- ----------
107
-
108
- * Updated download URL. #2 (Thanks, Alistair Hutchison!)
109
-
110
-
111
- 0.0.2 - 6 December 2011
112
- ----------
113
-
114
- * Birthday!
3
+ * Complete Rewrite of 2.x
4
+ * Implemented with Monkey Patch not Shims
5
+ * Supports chromedriver on
data/LICENSE.txt CHANGED
@@ -1,7 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2011,2012,2013,2014,2015: [Mike Dalessio](http://mike.daless.io)
4
- Copyright (c) 2016: Titus Fortner
3
+ Copyright (c) 2017: Titus Fortner
5
4
 
6
5
  Permission is hereby granted, free of charge, to any person obtaining
7
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -6,26 +6,25 @@ Run Selenium tests more easily with automatic installation and updates for all s
6
6
 
7
7
  # Description
8
8
 
9
- `webdrivers` installs driver executables, in your gem path.
9
+ `webdrivers` downloads drivers and directs Selenium to use them.
10
10
 
11
11
  Currently supported:
12
12
  * `chromedriver`
13
13
  * `geckodriver`
14
- * `phantomjs`
15
14
  * `IEDriverServer`
16
15
  * `MicrosoftWebDriver`
17
16
 
18
- Drivers are stored in `~/.webdrivers/platform` directory and used within the context of your gem path
19
-
17
+ Drivers are stored in `~/.webdrivers` directory
20
18
 
21
19
  # Usage
22
20
 
23
- `gem install webdrivers`
21
+ in your Gemfile:
24
22
 
25
- or in your Gemfile:
23
+ `gem "webdrivers", "~> 3.0"`
26
24
 
27
- `gem "webdrivers", "~> 2.3"`
25
+ in your project:
28
26
 
27
+ `require 'webdrivers'`
29
28
 
30
29
  # License
31
30
 
@@ -38,6 +37,7 @@ see LICENSE.txt for full details and copyright.
38
37
  Bug reports and pull requests are welcome [on GitHub](https://github.com/titusfortner/webdrivers).
39
38
 
40
39
 
41
- # Credit
40
+ ## Copyright
42
41
 
43
- This is a fork of [chromedriver-helper](https://github.com/flavorjones/chromedriver-helper) gem
42
+ Copyright (c) 2017 Titus Fortner
43
+ See LICENSE for details
@@ -1,41 +1,149 @@
1
1
  require 'nokogiri'
2
+ require 'open-uri'
3
+ require 'zip'
2
4
 
3
- module Webdrivers
4
- class Chromedriver < Common
5
5
 
6
+ module Webdrivers
7
+ class Chromedriver
6
8
  class << self
7
- def file_name
8
- platform == "win" ? "chromedriver.exe" : "chromedriver"
9
+
10
+ def update
11
+ unless site_available?
12
+ return current.nil? ? nil : binary
13
+ end
14
+ return binary if current == latest
15
+ remove && download
9
16
  end
10
17
 
11
- def current_version
12
- return nil unless File.exists?(binary_path)
13
- %x(#{binary_path} --version).match(/ChromeDriver (\d\.\d+)/)[1]
18
+ def current
19
+ return nil unless downloaded?
20
+ puts binary
21
+ string = %x(#{binary} --version)
22
+ puts string
23
+ normalize string.match(/ChromeDriver (\d\.\d+)/)[1]
14
24
  end
15
25
 
16
- def newest_version
17
- padded = downloads.keys.each_with_object({}) do |version, hash|
18
- matched = version.match(/^(\d+)\.(\d+)$/)
19
- minor = sprintf '%02d', matched[2]
20
- hash["#{matched[1]}.#{minor}"] = version
21
- end
22
- padded.keys.sort.last
26
+ def latest
27
+ downloads.keys.sort.last
23
28
  end
24
29
 
25
- def downloads
26
- doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
27
- items = doc.css("Contents Key").collect(&:text)
28
- items.select! { |item| item.include?(platform) }
29
- items.each_with_object({}) do |item, hash|
30
- hash[item[/^[^\/]+/]] = "#{base_url}/#{item}"
30
+ def remove
31
+ FileUtils.rm_f binary
32
+ end
33
+
34
+ def download(version = nil)
35
+ url = downloads[version || latest]
36
+ filename = File.basename url
37
+
38
+ Dir.chdir install_dir do
39
+ FileUtils.rm_f filename
40
+ File.open(filename, "wb") do |saved_file|
41
+ URI.parse(url).open("rb") do |read_file|
42
+ saved_file.write(read_file.read)
43
+ end
44
+ end
45
+ raise "Could not download #{url}" unless File.exists? filename
46
+ dcf = decompress_file(filename)
47
+ extract_file(dcf) if respond_to? :extract_file
31
48
  end
49
+ raise "Could not unzip #{filename} to get #{binary}" unless File.exists?(binary)
50
+ FileUtils.chmod "ugo+rx", binary
51
+ binary
52
+ end
53
+
54
+ private
55
+
56
+ def normalize(string)
57
+ string.size == 3 ? string.gsub('.', '.0').to_f : string.to_f
58
+ end
59
+
60
+ def file_name
61
+ 'chromedriver'
62
+ end
63
+
64
+ def downloaded?
65
+ File.exist? binary
66
+ end
67
+
68
+ def binary
69
+ File.join install_dir, file_name
32
70
  end
33
71
 
34
72
  def base_url
35
73
  'http://chromedriver.storage.googleapis.com'
36
74
  end
37
75
 
38
- end
76
+ def site_available?
77
+ true if open(base_url)
78
+ rescue
79
+ false
80
+ end
81
+
82
+ def platform
83
+ cfg = RbConfig::CONFIG
84
+ case cfg['host_os']
85
+ when /linux/
86
+ cfg['host_cpu'] =~ /x86_64|amd64/ ? "linux64" : "linux32"
87
+ when /darwin/
88
+ "mac"
89
+ else
90
+ "win"
91
+ end
92
+ end
39
93
 
94
+ def decompress_file(filename)
95
+ case filename
96
+ when /tar\.gz$/
97
+ untargz_file(filename)
98
+ when /tar\.bz2$/
99
+ system "tar xjf #{filename}"
100
+ filename.gsub('.tar.bz2', '')
101
+ when /\.zip$/
102
+ unzip_file(filename)
103
+ end
104
+ end
105
+
106
+ def untargz_file(filename)
107
+ tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename))
108
+ tar_extract.rewind
109
+
110
+ ucf = File.open(file_name, "w+")
111
+ tar_extract.each {|entry| ucf << entry.read}
112
+ ucf.close
113
+ File.basename ucf
114
+ end
115
+
116
+ def unzip_file(filename)
117
+ Zip::File.open("#{Dir.pwd}/#{filename}") do |zip_file|
118
+ zip_file.each do |f|
119
+ @top_path ||= f.name
120
+ f_path = File.join(Dir.pwd, f.name)
121
+ FileUtils.rm_rf(f_path) if File.exist?(f_path)
122
+ FileUtils.mkdir_p(File.dirname(f_path)) unless File.exist?(File.dirname(f_path))
123
+ zip_file.extract(f, f_path)
124
+ end
125
+ end
126
+ @top_path
127
+ end
128
+
129
+ def install_dir
130
+ File.expand_path(File.join(ENV['HOME'], ".webdrivers")).tap {|dir| FileUtils.mkdir_p dir}
131
+ end
132
+
133
+ def downloads
134
+ raise StandardError, "Can not reach site" unless site_available?
135
+
136
+ @downloads ||= begin
137
+ doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
138
+ items = doc.css("Contents Key").collect(&:text)
139
+ items.select! {|item| item.include?('linux64')}
140
+ items.each_with_object({}) do |item, hash|
141
+ key = normalize item[/^[^\/]+/]
142
+ hash[key] = "#{base_url}/#{item}"
143
+ end
144
+ end
145
+ end
146
+
147
+ end
40
148
  end
41
149
  end
@@ -0,0 +1,11 @@
1
+ require 'selenium-webdriver'
2
+
3
+ module Selenium
4
+ module WebDriver
5
+ module Chrome
6
+ def self.driver_path
7
+ @driver_path ||= Webdrivers::Chromedriver.update
8
+ end
9
+ end
10
+ end
11
+ end
data/lib/webdrivers.rb CHANGED
@@ -1,9 +1,2 @@
1
- require "webdrivers/common"
1
+ require "webdrivers/selenium"
2
2
  require "webdrivers/chromedriver"
3
- require "webdrivers/edgedriver"
4
- require "webdrivers/geckodriver"
5
- require "webdrivers/iedriver"
6
- require "webdrivers/phantomjs"
7
- require 'fileutils'
8
- require 'rbconfig'
9
- require 'open-uri'
@@ -4,35 +4,41 @@ describe Webdrivers::Chromedriver do
4
4
 
5
5
  let(:chromedriver) { Webdrivers::Chromedriver }
6
6
 
7
- it 'downloads' do
8
- chromedriver.download
9
- suffix = chromedriver.platform == 'win' ? '.exe' : ''
10
- file = "#{chromedriver.platform_install_dir}/chromedriver#{suffix}"
11
- expect(File.exist?(file)).to eq true
12
- FileUtils.rm(file)
7
+ it 'parses chromedriver versions before 2.10' do
8
+ expect(chromedriver.send :normalize, '2.9').to eq 2.09
13
9
  end
14
10
 
15
- it { expect(chromedriver.newest_version.to_f).to be >= 2.25 }
16
-
17
- it { expect(chromedriver.downloads.size).to be >= 25 }
18
-
19
- context "on a linux platform" do
20
- before { allow(chromedriver).to receive(:platform) { "linux32" } }
21
-
22
- it { expect(chromedriver.file_name).to match(/chromedriver$/) }
11
+ it 'finds latest version' do
12
+ expect(chromedriver.latest).to be > 2.30
13
+ expect(chromedriver.latest).to be < 2.9
14
+ end
23
15
 
24
- it { expect(chromedriver.binary_path).to match '.webdrivers/linux32/chromedriver' }
16
+ it 'downloads latest version by default' do
17
+ chromedriver.download
18
+ expect(chromedriver.current).to eq chromedriver.latest
19
+ end
25
20
 
26
- it { expect(chromedriver.download_url('2.24')).to match("2.24/chromedriver_linux32.zip") }
21
+ it 'downloads specified version' do
22
+ chromedriver.remove
23
+ chromedriver.download(2.29)
24
+ expect(chromedriver.current).to eq 2.29
27
25
  end
28
26
 
29
- context "on a windows platform" do
30
- before { allow(chromedriver).to receive(:platform) { "win" } }
27
+ it 'removes chromedriver' do
28
+ chromedriver.remove
29
+ expect(chromedriver.current).to be_nil
30
+ end
31
31
 
32
- it { expect(chromedriver.file_name).to match(/chromedriver\.exe$/) }
32
+ context 'when offline' do
33
+ before { allow(chromedriver).to receive(:site_available?).and_return(false) }
33
34
 
34
- it { expect(chromedriver.binary_path).to match '.webdrivers/win/chromedriver' }
35
+ it 'raises exception finding latest version' do
36
+ expect {chromedriver.latest}.to raise_error(StandardError, "Can not reach site")
37
+ end
35
38
 
36
- it { expect(chromedriver.download_url('2.24')).to match("2.24/chromedriver_win32.zip") }
39
+ it 'raises exception downloading' do
40
+ expect {chromedriver.download}.to raise_error(StandardError, "Can not reach site")
41
+ end
37
42
  end
43
+
38
44
  end
data/webdrivers.gemspec CHANGED
@@ -3,11 +3,11 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "webdrivers"
6
- s.version = "2.4.0"
6
+ s.version = "3.0.0.beta1"
7
7
  s.authors = ["Titus Fortner"]
8
8
  s.email = ["titusfortner@gmail.com"]
9
9
  s.homepage = "https://github.com/titusfortner/webdrivers"
10
- s.summary = "Easy installation and use of webdrivers."
10
+ s.summary = "Easy download and use of browser drivers."
11
11
  s.description = "Run Selenium tests more easily with install and updates for all supported webdrivers."
12
12
  s.licenses = ["MIT"]
13
13
 
@@ -21,4 +21,5 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_runtime_dependency "nokogiri", "~> 1.6"
23
23
  s.add_runtime_dependency "rubyzip", "~> 1.0"
24
+ s.add_runtime_dependency "selenium-webdriver", "~> 3.0"
24
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webdrivers
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 3.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Titus Fortner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-19 00:00:00.000000000 Z
11
+ date: 2017-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -66,16 +66,25 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.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: '3.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
69
83
  description: Run Selenium tests more easily with install and updates for all supported
70
84
  webdrivers.
71
85
  email:
72
86
  - titusfortner@gmail.com
73
- executables:
74
- - IEDriverServer
75
- - MicrosoftWebDriver
76
- - chromedriver
77
- - geckodriver
78
- - phantomjs
87
+ executables: []
79
88
  extensions: []
80
89
  extra_rdoc_files: []
81
90
  files:
@@ -86,23 +95,10 @@ files:
86
95
  - LICENSE.txt
87
96
  - README.md
88
97
  - Rakefile
89
- - bin/IEDriverServer
90
- - bin/MicrosoftWebDriver
91
- - bin/chromedriver
92
- - bin/geckodriver
93
- - bin/phantomjs
94
98
  - lib/webdrivers.rb
95
99
  - lib/webdrivers/chromedriver.rb
96
- - lib/webdrivers/common.rb
97
- - lib/webdrivers/edgedriver.rb
98
- - lib/webdrivers/geckodriver.rb
99
- - lib/webdrivers/iedriver.rb
100
- - lib/webdrivers/phantomjs.rb
100
+ - lib/webdrivers/selenium.rb
101
101
  - spec/chromedriver_spec.rb
102
- - spec/edgedriver_spec.rb
103
- - spec/geckodriver_spec.rb
104
- - spec/iedriver_spec.rb
105
- - spec/phantomjs_spec.rb
106
102
  - spec/spec_helper.rb
107
103
  - webdrivers.gemspec
108
104
  homepage: https://github.com/titusfortner/webdrivers
@@ -120,19 +116,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
116
  version: '0'
121
117
  required_rubygems_version: !ruby/object:Gem::Requirement
122
118
  requirements:
123
- - - ">="
119
+ - - ">"
124
120
  - !ruby/object:Gem::Version
125
- version: '0'
121
+ version: 1.3.1
126
122
  requirements: []
127
123
  rubyforge_project:
128
- rubygems_version: 2.6.8
124
+ rubygems_version: 2.5.2
129
125
  signing_key:
130
126
  specification_version: 4
131
- summary: Easy installation and use of webdrivers.
127
+ summary: Easy download and use of browser drivers.
132
128
  test_files:
133
129
  - spec/chromedriver_spec.rb
134
- - spec/edgedriver_spec.rb
135
- - spec/geckodriver_spec.rb
136
- - spec/iedriver_spec.rb
137
- - spec/phantomjs_spec.rb
138
130
  - spec/spec_helper.rb
data/bin/IEDriverServer DELETED
@@ -1,5 +0,0 @@
1
- #! /usr/bin/env ruby
2
-
3
- require "webdrivers"
4
-
5
- Webdrivers::IEDriver.install(*ARGV) if Webdrivers::IEDriver.platform == 'win'
@@ -1,5 +0,0 @@
1
- #! /usr/bin/env ruby
2
-
3
- require "webdrivers"
4
-
5
- Webdrivers::Edgedriver.install(*ARGV) if Webdrivers::IEDriver.platform == 'win'
data/bin/chromedriver DELETED
@@ -1,5 +0,0 @@
1
- #! /usr/bin/env ruby
2
-
3
- require "webdrivers"
4
-
5
- Webdrivers::Chromedriver.install *ARGV
data/bin/geckodriver DELETED
@@ -1,5 +0,0 @@
1
- #! /usr/bin/env ruby
2
-
3
- require "webdrivers"
4
-
5
- Webdrivers::Geckodriver.install *ARGV
data/bin/phantomjs DELETED
@@ -1,5 +0,0 @@
1
- #! /usr/bin/env ruby
2
-
3
- require "webdrivers"
4
-
5
- Webdrivers::PhantomJS.install *ARGV
@@ -1,106 +0,0 @@
1
- require 'rubygems/package'
2
- require 'zip'
3
-
4
- module Webdrivers
5
- class Common
6
-
7
- class << self
8
- def install *args
9
- download
10
- exec binary_path, *args
11
- end
12
-
13
- def download
14
- return if File.exists?(binary_path) && !internet_connection?
15
- raise StandardError, "Unable to Reach #{base_url}" unless internet_connection?
16
- return if newest_version == current_version
17
-
18
- url = download_url
19
- filename = File.basename url
20
- Dir.chdir platform_install_dir do
21
- FileUtils.rm_f filename
22
- File.open(filename, "wb") do |saved_file|
23
- URI.parse(url).open("rb") do |read_file|
24
- saved_file.write(read_file.read)
25
- end
26
- end
27
- raise "Could not download #{url}" unless File.exists? filename
28
- dcf = decompress_file(filename)
29
- extract_file(dcf) if respond_to? :extract_file
30
- end
31
- raise "Could not unzip #{filename} to get #{binary_path}" unless File.exists? binary_path
32
- FileUtils.chmod "ugo+rx", binary_path
33
- end
34
-
35
- def decompress_file(filename)
36
- case filename
37
- when /tar\.gz$/
38
- untargz_file(filename)
39
- when /tar\.bz2$/
40
- system "tar xjf #{filename}"
41
- filename.gsub('.tar.bz2', '')
42
- when /\.zip$/
43
- unzip_file(filename)
44
- end
45
- end
46
-
47
- def untargz_file(filename)
48
- tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename))
49
- tar_extract.rewind
50
-
51
- ucf = File.open(file_name, "w+")
52
- tar_extract.each { |entry| ucf << entry.read }
53
- ucf.close
54
- File.basename ucf
55
- end
56
-
57
- def unzip_file(filename)
58
- Zip::File.open("#{Dir.pwd}/#{filename}") do |zip_file|
59
- zip_file.each do |f|
60
- @top_path ||= f.name
61
- f_path = File.join(Dir.pwd, f.name)
62
- FileUtils.rm_rf(f_path) if File.exist?(f_path)
63
- FileUtils.mkdir_p(File.dirname(f_path)) unless File.exist?(File.dirname(f_path))
64
- zip_file.extract(f, f_path)
65
- end
66
- end
67
- @top_path
68
- end
69
-
70
- def download_url(version = nil)
71
- downloads[version || newest_version]
72
- end
73
-
74
- def binary_path
75
- File.join platform_install_dir, file_name
76
- end
77
-
78
- def platform_install_dir
79
- File.join(install_dir, platform).tap { |dir| FileUtils.mkdir_p dir }
80
- end
81
-
82
- def install_dir
83
- File.expand_path(File.join(ENV['HOME'], ".webdrivers")).tap { |dir| FileUtils.mkdir_p dir }
84
- end
85
-
86
- def platform
87
- cfg = RbConfig::CONFIG
88
- case cfg['host_os']
89
- when /linux/
90
- cfg['host_cpu'] =~ /x86_64|amd64/ ? "linux64" : "linux32"
91
- when /darwin/
92
- "mac"
93
- else
94
- "win"
95
- end
96
- end
97
-
98
- def internet_connection?
99
- true #if open(base_url)
100
- rescue
101
- false
102
- end
103
- end
104
-
105
- end
106
- end
@@ -1,34 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module Webdrivers
4
- class Edgedriver < Common
5
-
6
- class << self
7
- def file_name
8
- "MicrosoftWebDriver.exe"
9
- end
10
-
11
- def current_version
12
- # No version information available
13
- end
14
-
15
- def newest_version
16
- version = %x(ver)
17
- version[/\d+\.\d+\.\d+/][/[^\.]\d+$/]
18
- end
19
-
20
- def download_url(version = nil)
21
- if newest_version.to_i >= 14986
22
- 'https://download.microsoft.com/download/1/4/1/14156DA0-D40F-460A-B14D-1B264CA081A5/MicrosoftWebDriver.exe'
23
- else
24
- 'https://download.microsoft.com/download/3/2/D/32D3E464-F2EF-490F-841B-05D53C848D15/MicrosoftWebDriver.exe'
25
- end
26
- end
27
-
28
- def base_url
29
- 'http://google.com'
30
- end
31
- end
32
-
33
- end
34
- end
@@ -1,42 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module Webdrivers
4
- class Geckodriver < Common
5
-
6
- class << self
7
- def file_name
8
- platform == "win" ? "geckodriver.exe" : "geckodriver"
9
- end
10
-
11
- def current_version
12
- return nil unless File.exists?(binary_path)
13
- %x(#{binary_path} --version).match(/geckodriver (\d\.\d+\.\d+)/)[1]
14
- end
15
-
16
- def newest_version
17
- padded = downloads.keys.each_with_object({}) do |version, hash|
18
- matched = version.match(/^(\d+)\.(\d+)\.(\d+)$/)
19
- minor = sprintf '%02d', matched[2]
20
- hash["#{matched[1]}.#{minor}.#{matched[3]}"] = version
21
- end
22
- padded.keys.sort.last
23
- end
24
-
25
- def downloads
26
- doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
27
- items = doc.css(".release-downloads a").collect {|item| item["href"]}
28
- items.reject! {|item| item.include?('archive')}
29
- items.select! {|item| item.include?(platform)}
30
- items.each_with_object({}) do |item, hash|
31
- hash[item[/v(\d+\.\d+\.\d+)/, 1]] = "https://github.com#{item}"
32
- end
33
- end
34
-
35
- def base_url
36
- 'https://github.com/mozilla/geckodriver/releases'
37
- end
38
-
39
- end
40
-
41
- end
42
- end
@@ -1,35 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module Webdrivers
4
- class IEDriver < Common
5
-
6
- class << self
7
- def file_name
8
- "IEDriverServer.exe"
9
- end
10
-
11
- def current_version
12
- return nil unless File.exists?(binary_path)
13
- %x(#{binary_path} --version).strip.match(/IEDriverServer.exe (\d\.\d+\.\d*\.\d*)/)[1]
14
- end
15
-
16
- def newest_version
17
- downloads.keys.sort.last
18
- end
19
-
20
- def downloads
21
- doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
22
- items = doc.css("Key").collect(&:text)
23
- items.select! { |item| item.include?('IEDriverServer_Win32') }
24
- items.each_with_object({}) do |item, hash|
25
- hash[item[/^[^\/]+/]] = "#{base_url}#{item}"
26
- end
27
- end
28
-
29
- def base_url
30
- 'http://selenium-release.storage.googleapis.com/'
31
- end
32
- end
33
-
34
- end
35
- end
@@ -1,40 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module Webdrivers
4
- class PhantomJS < Common
5
-
6
- class << self
7
- def file_name
8
- platform == "win" ? "phantomjs.exe" : "phantomjs"
9
- end
10
-
11
- def current_version
12
- return nil unless File.exists?(binary_path)
13
- %x(#{binary_path} --version).strip.match(/(\d\.\d+\.\d+)/)[1]
14
- end
15
-
16
- def newest_version
17
- downloads.keys.sort.last
18
- end
19
-
20
- def downloads
21
- doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
22
- items = doc.css(".execute").collect { |item| item["href"] }
23
- format_platform = platform.dup.gsub('32', '-i686').gsub('64', '-x86_64')
24
- items.select! { |item| item.include?(format_platform) }
25
- items.each_with_object({}) do |item, hash|
26
- hash[item[/-(\d+\.\d+\.\d+)-/, 1]] = "https://bitbucket.org#{item}"
27
- end
28
- end
29
-
30
- def base_url
31
- 'https://bitbucket.org/ariya/phantomjs/downloads'
32
- end
33
-
34
- def extract_file(filename)
35
- FileUtils.mv("#{platform_install_dir}/#{filename}/bin/#{file_name}", file_name)
36
- end
37
- end
38
-
39
- end
40
- end
@@ -1,28 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Webdrivers::Edgedriver do
4
-
5
- let(:edgedriver) { Webdrivers::Edgedriver }
6
-
7
- it 'downloads' do
8
- allow(edgedriver).to receive(:newest_version).and_return(0)
9
- edgedriver.download
10
- file = "#{edgedriver.platform_install_dir}/MicrosoftWebDriver.exe"
11
- expect(File.exist?(file)).to eq true
12
- FileUtils.rm(file)
13
- end
14
-
15
- it 'gets latest version' do
16
- skip unless edgedriver.platform == 'win'
17
- expect(edgedriver.newest_version.to_f).to be >= 2.25
18
- end
19
-
20
- context "on a windows platform" do
21
- before { allow(edgedriver).to receive(:platform) { "win" } }
22
-
23
- it { expect(edgedriver.file_name).to match(/MicrosoftWebDriver\.exe$/) }
24
-
25
- it { expect(edgedriver.binary_path).to match '.webdrivers/win/MicrosoftWebDriver.exe' }
26
-
27
- end
28
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Webdrivers::Geckodriver do
4
-
5
- let(:geckodriver) { Webdrivers::Geckodriver }
6
-
7
- it 'downloads' do
8
- geckodriver.download
9
- suffix = geckodriver.platform == 'win' ? '.exe' : ''
10
- file = "#{geckodriver.platform_install_dir}/geckodriver#{suffix}"
11
- expect(File.exist?(file)).to eq true
12
- FileUtils.rm(file)
13
- end
14
-
15
- it { expect(geckodriver.newest_version.to_f).to be >= 0.11 }
16
-
17
- it { expect(geckodriver.downloads.size).to be >= 4 }
18
-
19
- context "on a linux platform" do
20
- before { allow(geckodriver).to receive(:platform) { "linux32" } }
21
-
22
- it { expect(geckodriver.file_name).to match(/geckodriver$/) }
23
-
24
- it { expect(geckodriver.binary_path).to match '.webdrivers/linux32/geckodriver' }
25
-
26
- it { expect(geckodriver.download_url('0.11.0')).to match("v0.11.0/geckodriver-v0.11.0-linux32.tar.gz") }
27
- end
28
-
29
- context "on a windows platform" do
30
- before { allow(geckodriver).to receive(:platform) { "win" } }
31
-
32
- it { expect(geckodriver.file_name).to match(/geckodriver\.exe$/) }
33
-
34
- it { expect(geckodriver.binary_path).to match '.webdrivers/win/geckodriver' }
35
-
36
- it { expect(geckodriver.download_url('0.9.0')).to match("v0.9.0/geckodriver-v0.9.0-win64.zip") }
37
- end
38
- end
@@ -1,29 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Webdrivers::IEDriver do
4
-
5
- let(:iedriver) { Webdrivers::IEDriver }
6
-
7
- it 'downloads' do
8
- allow(iedriver).to receive(:current_version).and_return(0)
9
- iedriver.download
10
- file = "#{iedriver.platform_install_dir}/IEDriverServer.exe"
11
- expect(File.exist?(file)).to eq true
12
- FileUtils.rm(file)
13
- end
14
-
15
- it { expect(iedriver.newest_version.to_f).to be >= 2.25 }
16
-
17
-
18
- context "on a windows platform" do
19
- before { allow(iedriver).to receive(:platform) { "win" } }
20
-
21
- it { expect(iedriver.downloads.size).to be >= 16 }
22
-
23
- it { expect(iedriver.file_name).to match(/IEDriverServer\.exe$/) }
24
-
25
- it { expect(iedriver.binary_path).to match '.webdrivers/win/IEDriverServer.exe' }
26
-
27
- it { expect(iedriver.download_url('2.53')).to match("2.53/IEDriverServer_Win32") }
28
- end
29
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Webdrivers::PhantomJS do
4
-
5
- let(:phantomjs) { Webdrivers::PhantomJS }
6
-
7
- it 'downloads' do
8
- phantomjs.download
9
- suffix = phantomjs.platform == 'win' ? '.exe' : ''
10
- file = "#{phantomjs.platform_install_dir}/phantomjs#{suffix}"
11
- expect(File.exist?(file)).to eq true
12
- FileUtils.rm(file)
13
- end
14
-
15
- it { expect(phantomjs.newest_version.to_f).to be >= 0.11 }
16
-
17
- it { expect(phantomjs.downloads.size).to be >= 4 }
18
-
19
- context "on a linux platform" do
20
- before { allow(phantomjs).to receive(:platform) { "linux64" } }
21
-
22
- it { expect(phantomjs.file_name).to match(/phantomjs$/) }
23
-
24
- it { expect(phantomjs.binary_path).to match '.webdrivers/linux64/phantomjs' }
25
-
26
- it { expect(phantomjs.download_url('1.9.6')).to match("phantomjs-1.9.6-linux-") }
27
- end
28
-
29
- context "on a windows platform" do
30
- before { allow(phantomjs).to receive(:platform) { "win" } }
31
-
32
- it { expect(phantomjs.file_name).to match(/phantomjs\.exe$/) }
33
-
34
- it { expect(phantomjs.binary_path).to match '.webdrivers/win/phantomjs' }
35
-
36
- it { expect(phantomjs.download_url('1.9.7')).to match("phantomjs-1.9.7-windows.zip") }
37
- end
38
- end