webdriver-user-agent 6.6.6 → 7.0
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.
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -2
- data/HISTORY.md +9 -1
- data/README.md +67 -1
- data/lib/webdriver-user-agent.rb +8 -51
- data/lib/webdriver-user-agent/browser_options.rb +47 -0
- data/lib/webdriver-user-agent/core_ext/symbol.rb +8 -0
- data/lib/webdriver-user-agent/devices.rb +40 -0
- data/lib/webdriver-user-agent/driver.rb +39 -0
- data/webdriver-user-agent.gemspec +5 -5
- metadata +27 -7
- checksums.yaml +0 -15
- data/.rvmrc +0 -2
data/.rspec
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
webdriver-user-agent
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-1.9.3-p429
|
data/Gemfile
CHANGED
data/HISTORY.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Gem History
|
2
2
|
|
3
|
+
## 7.0 - 8 June 2013
|
4
|
+
|
5
|
+
* Withdraw deprecation
|
6
|
+
|
7
|
+
## 6.6.6 - 15 March 2013
|
8
|
+
|
9
|
+
* Announce deprecation
|
10
|
+
|
3
11
|
## 0.2.2 - 15 March 2013
|
4
12
|
|
5
13
|
* Updated iPad user agent
|
@@ -30,4 +38,4 @@
|
|
30
38
|
|
31
39
|
## 0.0.1 - 25 March 2012
|
32
40
|
|
33
|
-
* Initial version of gem released
|
41
|
+
* Initial version of gem released
|
data/README.md
CHANGED
@@ -1,3 +1,69 @@
|
|
1
1
|
# Webdriver::User::Agent
|
2
2
|
|
3
|
-
|
3
|
+
A helper gem to emulate populate device user agents and resolutions when using webdriver
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'webdriver-user-agent'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install webdriver-user-agent
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
provides a UserAgent.driver method to return a new web-driver with user agent and screen resolution mimicking a mobile device.
|
22
|
+
|
23
|
+
### Options
|
24
|
+
|
25
|
+
* :browser
|
26
|
+
* :firefox (default)
|
27
|
+
* :chrome
|
28
|
+
* :agent
|
29
|
+
* :iphone (default)
|
30
|
+
* :ipad
|
31
|
+
* :android_phone
|
32
|
+
* :android_tablet
|
33
|
+
* :random
|
34
|
+
* :orientation
|
35
|
+
* :portrait (default)
|
36
|
+
* :landscape
|
37
|
+
|
38
|
+
### Example using selenium-webdriver
|
39
|
+
|
40
|
+
require 'selenium-webdriver'
|
41
|
+
require 'webdriver-user-agent'
|
42
|
+
driver = UserAgent.driver(:browser => :chrome, :agent => :iphone, :orientation => :landscape)
|
43
|
+
driver.get 'http://tiffany.com'
|
44
|
+
driver.current_url.should == 'http://m.tiffany.com/International.aspx'
|
45
|
+
|
46
|
+
### Example using random user agent
|
47
|
+
|
48
|
+
require 'selenium-webdriber'
|
49
|
+
require 'webdriver-user-agent'
|
50
|
+
driver = UserAgent.driver(:agent => :random)
|
51
|
+
driver.execute_script('return navigator.userAgent')
|
52
|
+
# random agent like "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1"
|
53
|
+
|
54
|
+
### Example using watir-webdriver
|
55
|
+
|
56
|
+
require 'watir-webdriver'
|
57
|
+
require 'webdriver-user-agent'
|
58
|
+
driver = UserAgent.driver(:browser => :chrome, :agent => :iphone, :orientation => :landscape)
|
59
|
+
browser = Watir::Browser.new driver
|
60
|
+
browser.goto 'tiffany.com'
|
61
|
+
browser.url.should == 'http://m.tiffany.com/International.aspx'
|
62
|
+
|
63
|
+
## Contributing
|
64
|
+
|
65
|
+
1. Fork it
|
66
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
67
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
68
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
69
|
+
5. Create new Pull Request
|
data/lib/webdriver-user-agent.rb
CHANGED
@@ -1,66 +1,23 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require 'yaml'
|
4
|
-
require 'json'
|
1
|
+
require 'webdriver-user-agent/core_ext/symbol'
|
2
|
+
require 'webdriver-user-agent/driver'
|
5
3
|
|
6
4
|
module Webdriver
|
7
5
|
module UserAgent
|
8
|
-
def self.driver options={}
|
9
|
-
options
|
10
|
-
options[:agent] ||= :iphone
|
11
|
-
options[:orientation] ||= :portrait
|
12
|
-
|
13
|
-
user_agent_string = agent_string_for options[:agent]
|
14
|
-
|
15
|
-
case options[:browser]
|
16
|
-
when :firefox
|
17
|
-
options[:profile] ||= Selenium::WebDriver::Firefox::Profile.new
|
18
|
-
options[:profile]['general.useragent.override'] = user_agent_string
|
19
|
-
when :chrome
|
20
|
-
options[:switches] ||= []
|
21
|
-
options[:switches] << "--user-agent=#{user_agent_string}"
|
22
|
-
else
|
23
|
-
raise "WebDriver UserAgent currently only supports :firefox and :chrome."
|
24
|
-
end
|
25
|
-
driver = Selenium::WebDriver.for options[:browser], options.except(:browser, :agent, :orientation)
|
26
|
-
resize_inner_window(driver, *resolution_for(options[:agent], options[:orientation])) unless (downcase_sym(options[:agent]) == :random)
|
27
|
-
driver
|
6
|
+
def self.driver options={}
|
7
|
+
Driver.instance.for options
|
28
8
|
end
|
29
9
|
|
30
10
|
def self.devices
|
31
|
-
|
11
|
+
Driver.instance.devices
|
32
12
|
end
|
33
13
|
|
34
14
|
def self.resolution_for device_name, orientation
|
35
|
-
|
36
|
-
[device[:width],device[:height]]
|
15
|
+
Driver.instance.resolution_for device_name, orientation
|
37
16
|
end
|
38
17
|
|
39
18
|
def self.agent_string_for device
|
40
|
-
|
41
|
-
raise "Unsupported user agent: '#{options[:agent]}'." unless user_agent_string
|
42
|
-
user_agent_string
|
19
|
+
Driver.instance.agent_string_for device
|
43
20
|
end
|
44
21
|
|
45
|
-
private
|
46
|
-
|
47
|
-
def self.resize_inner_window driver, width, height
|
48
|
-
if driver.browser == :firefox or :chrome
|
49
|
-
driver.execute_script("window.open(#{driver.current_url.to_json},'_blank');")
|
50
|
-
driver.close
|
51
|
-
driver.switch_to.window driver.window_handles.first
|
52
|
-
end
|
53
|
-
driver.execute_script("window.innerWidth = #{width}; window.innerHeight = #{height};")
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.downcase_sym sym
|
57
|
-
sym.to_s.downcase.to_sym #to support ruby 1.8.x
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.random_user_agent
|
61
|
-
File.foreach(File.expand_path("../device-info/user_agents.txt", __FILE__)).each_with_index.reduce(nil) { |picked,pair|
|
62
|
-
rand < 1.0/(1+pair[1]) ? pair[0] : picked }
|
63
|
-
end
|
64
|
-
|
65
22
|
end
|
66
|
-
end
|
23
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'facets/hash/except'
|
2
|
+
|
3
|
+
module Webdriver
|
4
|
+
module UserAgent
|
5
|
+
class BrowserOptions
|
6
|
+
|
7
|
+
def initialize(opts, user_agent_string)
|
8
|
+
@options = opts
|
9
|
+
options[:browser] ||= :firefox
|
10
|
+
options[:agent] ||= :iphone
|
11
|
+
options[:orientation] ||= :portrait
|
12
|
+
initialize_for_browser(user_agent_string)
|
13
|
+
end
|
14
|
+
|
15
|
+
def method_missing(*args, &block)
|
16
|
+
m = args.first
|
17
|
+
value = options[m]
|
18
|
+
super unless value
|
19
|
+
value.downcase
|
20
|
+
end
|
21
|
+
|
22
|
+
def browser_options
|
23
|
+
options.except(:browser, :agent, :orientation)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def options
|
29
|
+
@options ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize_for_browser(user_agent_string)
|
33
|
+
case options[:browser]
|
34
|
+
when :firefox
|
35
|
+
options[:profile] ||= Selenium::WebDriver::Firefox::Profile.new
|
36
|
+
options[:profile]['general.useragent.override'] = user_agent_string
|
37
|
+
when :chrome
|
38
|
+
options[:switches] ||= []
|
39
|
+
options[:switches] << "--user-agent=#{user_agent_string}"
|
40
|
+
else
|
41
|
+
raise "WebDriver UserAgent currently only supports :firefox and :chrome."
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Webdriver
|
4
|
+
module UserAgent
|
5
|
+
module Devices
|
6
|
+
|
7
|
+
def devices
|
8
|
+
YAML.load_file devices_file
|
9
|
+
end
|
10
|
+
|
11
|
+
def resolution_for(device_name, orientation)
|
12
|
+
device = devices[device_name.downcase][orientation.downcase]
|
13
|
+
[device[:width],device[:height]]
|
14
|
+
end
|
15
|
+
|
16
|
+
def agent_string_for(device)
|
17
|
+
device = (device ? device.downcase : :iphone)
|
18
|
+
user_agent_string = (device == :random ? random_user_agent : devices[device][:user_agent])
|
19
|
+
raise "Unsupported user agent: '#{device}'." unless user_agent_string
|
20
|
+
user_agent_string
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def random_user_agent
|
26
|
+
File.foreach(user_agents_file).each_with_index.reduce(nil) do |picked,pair|
|
27
|
+
rand < 1.0/(1+pair[1]) ? pair[0] : picked
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def user_agents_file
|
32
|
+
File.expand_path("../../device-info/user_agents.txt", __FILE__)
|
33
|
+
end
|
34
|
+
|
35
|
+
def devices_file
|
36
|
+
File.expand_path("../../device-info/devices.yaml", __FILE__)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'selenium-webdriver'
|
3
|
+
require 'webdriver-user-agent/browser_options'
|
4
|
+
require 'webdriver-user-agent/devices'
|
5
|
+
|
6
|
+
module Webdriver
|
7
|
+
module UserAgent
|
8
|
+
class Driver
|
9
|
+
include Singleton
|
10
|
+
include Devices
|
11
|
+
|
12
|
+
def for(opts)
|
13
|
+
user_agent_string = agent_string_for opts[:agent]
|
14
|
+
options = BrowserOptions.new(opts, user_agent_string)
|
15
|
+
build_driver_using options
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def resize_inner_window(driver, width, height)
|
21
|
+
if driver.browser == :firefox or :chrome
|
22
|
+
driver.execute_script("window.open(#{driver.current_url.to_json},'_blank');")
|
23
|
+
driver.close
|
24
|
+
driver.switch_to.window driver.window_handles.first
|
25
|
+
end
|
26
|
+
driver.execute_script("window.innerWidth = #{width}; window.innerHeight = #{height};")
|
27
|
+
end
|
28
|
+
|
29
|
+
def build_driver_using(options)
|
30
|
+
driver = Selenium::WebDriver.for options.browser, options.browser_options
|
31
|
+
unless options.agent == :random
|
32
|
+
resize_inner_window(driver, *resolution_for(options.agent, options.orientation))
|
33
|
+
end
|
34
|
+
driver
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
|
-
gem.authors = ["Alister Scott"]
|
5
|
-
gem.email = ["alister.scott@gmail.com"]
|
4
|
+
gem.authors = ["Alister Scott", "Jeff Morgan"]
|
5
|
+
gem.email = ["alister.scott@gmail.com", "jeff.morgan@leandog.com"]
|
6
6
|
gem.description = %q{A helper gem to emulate populate device user agents and resolutions when using webdriver}
|
7
7
|
gem.summary = %q{A helper gem to emulate populate device user agents and resolutions when using webdriver}
|
8
8
|
gem.homepage = "https://github.com/alisterscott/webdriver-user-agent"
|
@@ -12,11 +12,11 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
13
13
|
gem.name = "webdriver-user-agent"
|
14
14
|
gem.require_paths = ["lib"]
|
15
|
-
gem.version = "
|
15
|
+
gem.version = "7.0"
|
16
16
|
gem.add_dependency 'selenium-webdriver'
|
17
17
|
gem.add_dependency 'facets'
|
18
18
|
gem.add_dependency 'json'
|
19
19
|
gem.add_development_dependency 'rspec'
|
20
20
|
gem.add_development_dependency 'watir-webdriver'
|
21
|
-
|
22
|
-
end
|
21
|
+
|
22
|
+
end
|
metadata
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webdriver-user-agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '7.0'
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Alister Scott
|
9
|
+
- Jeff Morgan
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date: 2013-
|
13
|
+
date: 2013-06-08 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: selenium-webdriver
|
15
17
|
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
16
19
|
requirements:
|
17
20
|
- - ! '>='
|
18
21
|
- !ruby/object:Gem::Version
|
@@ -20,6 +23,7 @@ dependencies:
|
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
23
27
|
requirements:
|
24
28
|
- - ! '>='
|
25
29
|
- !ruby/object:Gem::Version
|
@@ -27,6 +31,7 @@ dependencies:
|
|
27
31
|
- !ruby/object:Gem::Dependency
|
28
32
|
name: facets
|
29
33
|
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
30
35
|
requirements:
|
31
36
|
- - ! '>='
|
32
37
|
- !ruby/object:Gem::Version
|
@@ -34,6 +39,7 @@ dependencies:
|
|
34
39
|
type: :runtime
|
35
40
|
prerelease: false
|
36
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
37
43
|
requirements:
|
38
44
|
- - ! '>='
|
39
45
|
- !ruby/object:Gem::Version
|
@@ -41,6 +47,7 @@ dependencies:
|
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: json
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
44
51
|
requirements:
|
45
52
|
- - ! '>='
|
46
53
|
- !ruby/object:Gem::Version
|
@@ -48,6 +55,7 @@ dependencies:
|
|
48
55
|
type: :runtime
|
49
56
|
prerelease: false
|
50
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
51
59
|
requirements:
|
52
60
|
- - ! '>='
|
53
61
|
- !ruby/object:Gem::Version
|
@@ -55,6 +63,7 @@ dependencies:
|
|
55
63
|
- !ruby/object:Gem::Dependency
|
56
64
|
name: rspec
|
57
65
|
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
58
67
|
requirements:
|
59
68
|
- - ! '>='
|
60
69
|
- !ruby/object:Gem::Version
|
@@ -62,6 +71,7 @@ dependencies:
|
|
62
71
|
type: :development
|
63
72
|
prerelease: false
|
64
73
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
65
75
|
requirements:
|
66
76
|
- - ! '>='
|
67
77
|
- !ruby/object:Gem::Version
|
@@ -69,6 +79,7 @@ dependencies:
|
|
69
79
|
- !ruby/object:Gem::Dependency
|
70
80
|
name: watir-webdriver
|
71
81
|
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
72
83
|
requirements:
|
73
84
|
- - ! '>='
|
74
85
|
- !ruby/object:Gem::Version
|
@@ -76,6 +87,7 @@ dependencies:
|
|
76
87
|
type: :development
|
77
88
|
prerelease: false
|
78
89
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
79
91
|
requirements:
|
80
92
|
- - ! '>='
|
81
93
|
- !ruby/object:Gem::Version
|
@@ -84,12 +96,15 @@ description: A helper gem to emulate populate device user agents and resolutions
|
|
84
96
|
using webdriver
|
85
97
|
email:
|
86
98
|
- alister.scott@gmail.com
|
99
|
+
- jeff.morgan@leandog.com
|
87
100
|
executables: []
|
88
101
|
extensions: []
|
89
102
|
extra_rdoc_files: []
|
90
103
|
files:
|
91
104
|
- .gitignore
|
92
|
-
- .
|
105
|
+
- .rspec
|
106
|
+
- .ruby-gemset
|
107
|
+
- .ruby-version
|
93
108
|
- Gemfile
|
94
109
|
- HISTORY.md
|
95
110
|
- LICENSE
|
@@ -98,30 +113,35 @@ files:
|
|
98
113
|
- lib/device-info/devices.yaml
|
99
114
|
- lib/device-info/user_agents.txt
|
100
115
|
- lib/webdriver-user-agent.rb
|
116
|
+
- lib/webdriver-user-agent/browser_options.rb
|
117
|
+
- lib/webdriver-user-agent/core_ext/symbol.rb
|
118
|
+
- lib/webdriver-user-agent/devices.rb
|
119
|
+
- lib/webdriver-user-agent/driver.rb
|
101
120
|
- spec/webdriver-user-agent_spec.rb
|
102
121
|
- webdriver-user-agent.gemspec
|
103
122
|
homepage: https://github.com/alisterscott/webdriver-user-agent
|
104
123
|
licenses: []
|
105
|
-
|
106
|
-
post_install_message: THIS GEM HAS BEEN DEPRECATED AND NO LONGER MAINTAINED
|
124
|
+
post_install_message:
|
107
125
|
rdoc_options: []
|
108
126
|
require_paths:
|
109
127
|
- lib
|
110
128
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
111
130
|
requirements:
|
112
131
|
- - ! '>='
|
113
132
|
- !ruby/object:Gem::Version
|
114
133
|
version: '0'
|
115
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
116
136
|
requirements:
|
117
137
|
- - ! '>='
|
118
138
|
- !ruby/object:Gem::Version
|
119
139
|
version: '0'
|
120
140
|
requirements: []
|
121
141
|
rubyforge_project:
|
122
|
-
rubygems_version:
|
142
|
+
rubygems_version: 1.8.25
|
123
143
|
signing_key:
|
124
|
-
specification_version:
|
144
|
+
specification_version: 3
|
125
145
|
summary: A helper gem to emulate populate device user agents and resolutions when
|
126
146
|
using webdriver
|
127
147
|
test_files:
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ZjYxMTkxODdmYjlmOTkyZTViMWUwNTM2OTljNGVlZmY0OGE4ODM1YQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZjMzY2ZmMzg0YjU4ZGVjN2I3NjVlYWQ5NzE2YzYxZTIzYjA4NmFkZg==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
MDk3OTAzOTlmNWYwNWI4ZDU3MWVmYzEzZmI0YjVlNDQzNmE1MjBhZGI1MjEz
|
10
|
-
Y2RiYmNlZjlhZWNhNmIxMGQ4MDU0MmQxZjQwZWUxYTRjZmYzYzQyYjkxYzIx
|
11
|
-
MTIxZTAyOGY3OWY5MjA0OWQ2NTUxYzEwZGY0OTI5OGY4MWU3MDM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NTZiYjQ2NzdjZmRkOTlkODVlNjEyYjg1NmJkNzNkYzE5MGNjYTg5ZDNjYWEz
|
14
|
-
OTkwNWRiZWYyOTYyODZiYjg4NmIwYTc5ZDExYWUxZmQ4NWNmMGMyNmJlMDFi
|
15
|
-
MWVkZmNkNjk3YjI3ZTAzYmJhYTY2MGQ1YzM3NmMwNDA1NjZlZDc=
|
data/.rvmrc
DELETED