webdriver-user-agent 0.2.0 → 0.2.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.
- data/HISTORY.md +4 -0
- data/lib/webdriver-user-agent.rb +50 -48
- data/spec/webdriver-user-agent_spec.rb +8 -8
- data/webdriver-user-agent.gemspec +1 -1
- metadata +2 -2
data/HISTORY.md
CHANGED
data/lib/webdriver-user-agent.rb
CHANGED
@@ -3,62 +3,64 @@ require 'facets/hash/except'
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'json'
|
5
5
|
|
6
|
-
module
|
7
|
-
|
8
|
-
options
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
6
|
+
module Webdriver
|
7
|
+
module UserAgent
|
8
|
+
def self.driver options={}
|
9
|
+
options[:browser] ||= :firefox
|
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
|
23
28
|
end
|
24
|
-
driver = Selenium::WebDriver.for options[:browser], options.except(:browser, :agent, :orientation)
|
25
|
-
resize_inner_window(driver, *resolution_for(options[:agent], options[:orientation])) unless (downcase_sym(options[:agent]) == :random)
|
26
|
-
driver
|
27
|
-
end
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
def self.devices
|
31
|
+
@devices ||= YAML.load_file File.expand_path("../device-info/devices.yaml", __FILE__)
|
32
|
+
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
def self.resolution_for device_name, orientation
|
35
|
+
device = devices[downcase_sym device_name][downcase_sym orientation]
|
36
|
+
[device[:width],device[:height]]
|
37
|
+
end
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
def self.agent_string_for device
|
40
|
+
user_agent_string = downcase_sym(device) == :random ? random_user_agent : devices[downcase_sym device][:user_agent]
|
41
|
+
raise "Unsupported user agent: '#{options[:agent]}'." unless user_agent_string
|
42
|
+
user_agent_string
|
43
|
+
end
|
43
44
|
|
44
|
-
|
45
|
+
private
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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};")
|
51
54
|
end
|
52
|
-
driver.execute_script("window.innerWidth = #{width}; window.innerHeight = #{height};")
|
53
|
-
end
|
54
55
|
|
55
|
-
|
56
|
-
|
57
|
-
|
56
|
+
def self.downcase_sym sym
|
57
|
+
sym.to_s.downcase.to_sym #to support ruby 1.8.x
|
58
|
+
end
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
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
|
63
64
|
|
65
|
+
end
|
64
66
|
end
|
@@ -12,7 +12,7 @@ describe "webdriver user agent" do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "can create a new webdriver driver using firefox and iphone (portrait) by default" do
|
15
|
-
@driver = UserAgent.driver
|
15
|
+
@driver = Webdriver::UserAgent.driver
|
16
16
|
@driver.browser.should == :firefox
|
17
17
|
@driver.execute_script('return navigator.userAgent').should include 'iPhone'
|
18
18
|
@driver.execute_script('return window.innerWidth').should == 320
|
@@ -20,7 +20,7 @@ describe "webdriver user agent" do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it "can create a new webdriver driver using chrome and iPad (landscape)" do
|
23
|
-
@driver = UserAgent.driver(:browser => :chrome, :agent => :iPad, :orientation => :landscape)
|
23
|
+
@driver = Webdriver::UserAgent.driver(:browser => :chrome, :agent => :iPad, :orientation => :landscape)
|
24
24
|
@driver.browser.should == :chrome
|
25
25
|
@driver.execute_script('return navigator.userAgent').should include 'iPad'
|
26
26
|
@driver.execute_script('return window.innerWidth').should == 1024
|
@@ -28,7 +28,7 @@ describe "webdriver user agent" do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "can create a new webdriver driver using firefox and android phone (landscape)" do
|
31
|
-
@driver = UserAgent.driver(:browser => :chrome, :agent => :android_phone, :orientation => :landscape)
|
31
|
+
@driver = Webdriver::UserAgent.driver(:browser => :chrome, :agent => :android_phone, :orientation => :landscape)
|
32
32
|
@driver.browser.should == :chrome
|
33
33
|
@driver.execute_script('return navigator.userAgent').should include 'Android'
|
34
34
|
@driver.execute_script('return window.innerWidth').should == 480
|
@@ -36,7 +36,7 @@ describe "webdriver user agent" do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "can create a new webdriver driver using firefox and android tablet (portrait)" do
|
39
|
-
@driver = UserAgent.driver(:browser => :chrome, :agent => :android_tablet, :orientation => :portrait)
|
39
|
+
@driver = Webdriver::UserAgent.driver(:browser => :chrome, :agent => :android_tablet, :orientation => :portrait)
|
40
40
|
@driver.browser.should == :chrome
|
41
41
|
@driver.execute_script('return navigator.userAgent').should include 'Android'
|
42
42
|
@driver.execute_script('return window.innerWidth').should == 768
|
@@ -44,7 +44,7 @@ describe "webdriver user agent" do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it "can create a new webdriver driver using firefox and random user agent" do
|
47
|
-
@driver = UserAgent.driver(:agent => :random)
|
47
|
+
@driver = Webdriver::UserAgent.driver(:agent => :random)
|
48
48
|
@driver.browser.should == :firefox
|
49
49
|
@driver.execute_script('return navigator.userAgent').should_not be_nil
|
50
50
|
@driver.execute_script('return window.innerWidth').should_not == 320
|
@@ -52,7 +52,7 @@ describe "webdriver user agent" do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
it "can create a new webdriver driver using chrome and random user agent" do
|
55
|
-
@driver = UserAgent.driver(:browser => :chrome, :agent => :random)
|
55
|
+
@driver = Webdriver::UserAgent.driver(:browser => :chrome, :agent => :random)
|
56
56
|
@driver.browser.should == :chrome
|
57
57
|
@driver.execute_script('return navigator.userAgent').should_not be_nil
|
58
58
|
@driver.execute_script('return window.innerWidth').should_not == 320
|
@@ -62,7 +62,7 @@ describe "webdriver user agent" do
|
|
62
62
|
it "can create a new webdriver driver using an existing firefox profile" do
|
63
63
|
profile = Selenium::WebDriver::Firefox::Profile.new
|
64
64
|
profile['browser.startup.homepage'] = "data:text/html,<title>hello</title>"
|
65
|
-
@driver = UserAgent.driver(:browser => :firefox, :profile => profile)
|
65
|
+
@driver = Webdriver::UserAgent.driver(:browser => :firefox, :profile => profile)
|
66
66
|
@driver.browser.should == :firefox
|
67
67
|
@driver.execute_script('return navigator.userAgent').should include 'iPhone'
|
68
68
|
@driver.execute_script('return window.innerWidth').should == 320
|
@@ -71,7 +71,7 @@ describe "webdriver user agent" do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
it "can allow using selenium driver for watir browser" do
|
74
|
-
@driver = UserAgent.driver(:browser => :firefox, :agent => :iphone, :orientation => :portrait)
|
74
|
+
@driver = Webdriver::UserAgent.driver(:browser => :firefox, :agent => :iphone, :orientation => :portrait)
|
75
75
|
@browser = Watir::Browser.new @driver
|
76
76
|
@browser.url.should == "about:blank"
|
77
77
|
end
|
@@ -12,7 +12,7 @@ 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 = "0.2.
|
15
|
+
gem.version = "0.2.1"
|
16
16
|
gem.add_dependency 'selenium-webdriver'
|
17
17
|
gem.add_dependency 'facets'
|
18
18
|
gem.add_dependency 'json'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webdriver-user-agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: selenium-webdriver
|