browser-provider 0.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.
@@ -0,0 +1,19 @@
1
+ class BrowserProvider
2
+ def initialize(name,platform,agent)
3
+ @name = name
4
+ @platform = platform
5
+ @agent = agent
6
+ end
7
+
8
+ def getInstance
9
+
10
+ if @name == 'IE'
11
+ puts File.dirname(__FILE__)
12
+ require File.dirname(__FILE__)+'/WatirBrowserFactory'
13
+ return WatirBrowserFactory.new(@name)
14
+ else
15
+ require File.dirname(__FILE__)+'/WebDriverBrowserFactory'
16
+ return WebDriverBrowserFactory.new(@name,@platform,@agent)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,29 @@
1
+ require 'watir'
2
+
3
+ class WatirBrowserFactory
4
+ def initialize(name)
5
+ @name = name
6
+ end
7
+
8
+ def getInstance
9
+ if @name == 'IE'
10
+ begin
11
+ @br = Watir::Browser.new :ie
12
+ rescue FFI::NotFoundError
13
+ @br = Watir::Browser.new :ie
14
+ rescue =>err
15
+ end
16
+ return @br
17
+ # elsif @name == 'FF'
18
+ # profile = Selenium::WebDriver::Firefox::Profile.new
19
+ # profile.assume_untrusted_certificate_issuer = true
20
+ # @b = Watir::Browser.new :firefox, :profile => profile
21
+ # return @br
22
+ # elsif @name == 'chrome'
23
+ # @b = Watir::Browser.new :chrome, :switches => ['--ignore-certificate-errors']
24
+ # return @br
25
+ # else
26
+ # raise ArgumentError
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,48 @@
1
+ require 'watir-webdriver'
2
+ require 'webdriver-user-agent-fil'
3
+ class WebDriverBrowserFactory
4
+ def initialize(name,platform,agent)
5
+ @name = name
6
+ @platform = platform
7
+ @agent = agent
8
+ end
9
+
10
+ def getInstance
11
+
12
+ if @platform == 'PC'
13
+ if @name == 'firefox'
14
+ profile = Selenium::WebDriver::Firefox::Profile.new
15
+ profile.assume_untrusted_certificate_issuer = true
16
+ @b = Watir::Browser.new :firefox, :profile => profile
17
+ return @b
18
+ elsif @name == 'chrome'
19
+ @b = Watir::Browser.new :chrome, :switches => ['--ignore-certificate-errors']
20
+ return @b
21
+ else
22
+ raise ArgumentError
23
+ end
24
+ elsif @platform == 'mobile'
25
+ # :browser
26
+ # :firefox (default)
27
+ # :chrome
28
+ # :agent
29
+ # :iphone (default)
30
+ # :ipad
31
+ # :android_phone
32
+ # :android_tablet
33
+ # :orientation
34
+ # :portrait (default)
35
+ # :landscape
36
+ driver = UserAgent.driver(:browser => @name.intern, :agent => @agent.intern, :orientation => :portrait)
37
+ @b = Watir::Browser.new driver
38
+ else
39
+ raise ArgumentError
40
+ end
41
+
42
+ end
43
+
44
+ def getMobileDriver()
45
+
46
+
47
+ end
48
+ end
@@ -0,0 +1,66 @@
1
+ require 'selenium-webdriver'
2
+ require 'facets/hash/except'
3
+ require 'yaml'
4
+ require 'json'
5
+
6
+ module UserAgent
7
+ def self.driver options={}
8
+ options[:browser] ||= :firefox
9
+ options[:agent] ||= :iphone
10
+ options[:orientation] ||= :portrait
11
+
12
+ user_agent_string = agent_string_for options[:agent]
13
+
14
+ case options[:browser]
15
+ when :firefox
16
+ options[:profile] ||= Selenium::WebDriver::Firefox::Profile.new
17
+ options[:profile]['general.useragent.override'] = user_agent_string
18
+ options[:profile]['assume_untrusted_certificate_issuer'] = true
19
+ when :chrome
20
+ options[:switches] ||= []
21
+ options[:switches] << "--user-agent=#{user_agent_string}"
22
+ options[:switches] << "--ignore-certificate-errors"
23
+ else
24
+ raise "WebDriver UserAgent currently only supports :firefox and :chrome."
25
+ end
26
+ driver = Selenium::WebDriver.for options[:browser], options.except(:browser, :agent, :orientation)
27
+ resize_inner_window(driver, *resolution_for(options[:agent], options[:orientation])) unless (downcase_sym(options[:agent]) == :random)
28
+ driver
29
+ end
30
+
31
+ def self.devices
32
+ @devices ||= YAML.load_file File.expand_path("../device-info/devices.yaml", __FILE__)
33
+ end
34
+
35
+ def self.resolution_for device_name, orientation
36
+ device = devices[downcase_sym device_name][downcase_sym orientation]
37
+ [device[:width],device[:height]]
38
+ end
39
+
40
+ def self.agent_string_for device
41
+ user_agent_string = downcase_sym(device) == :random ? random_user_agent : devices[downcase_sym device][:user_agent]
42
+ raise "Unsupported user agent: '#{options[:agent]}'." unless user_agent_string
43
+ user_agent_string
44
+ end
45
+
46
+ private
47
+
48
+ def self.resize_inner_window driver, width, height
49
+ if driver.browser == :firefox or :chrome
50
+ driver.execute_script("window.open(#{driver.current_url.to_json},'_blank');")
51
+ driver.close
52
+ driver.switch_to.window driver.window_handles.first
53
+ end
54
+ driver.execute_script("window.innerWidth = #{width}; window.innerHeight = #{height};")
55
+ end
56
+
57
+ def self.downcase_sym sym
58
+ sym.to_s.downcase.to_sym #to support ruby 1.8.x
59
+ end
60
+
61
+ def self.random_user_agent
62
+ File.foreach(File.expand_path("../device-info/user_agents.txt", __FILE__)).each_with_index.reduce(nil) { |picked,pair|
63
+ rand < 1.0/(1+pair[1]) ? pair[0] : picked }
64
+ end
65
+
66
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: browser-provider
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - John Jiang
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-26 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ''
15
+ email: Ruixin.Jiang@fil.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/BrowserProvider.rb
21
+ - lib/WatirBrowserFactory.rb
22
+ - lib/WebDriverBrowserFactory.rb
23
+ - lib/webdriver-user-agent-fil.rb
24
+ homepage: ''
25
+ licenses: []
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.24
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: browser-provider
48
+ test_files: []