webdriver-firefox 0.0.5
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,44 @@
|
|
1
|
+
# This file subject to Apache License 2.0; see LICENSE.txt
|
2
|
+
|
3
|
+
module Selenium
|
4
|
+
module WebDriver
|
5
|
+
class Driver
|
6
|
+
class << self
|
7
|
+
def for(browser, opts = {})
|
8
|
+
listener = opts.delete(:listener)
|
9
|
+
|
10
|
+
bridge = case browser
|
11
|
+
when :firefox, :ff
|
12
|
+
Firefox::Bridge.new(opts)
|
13
|
+
when :firefox_tddium
|
14
|
+
pool = ::NoLockFirefox::PortPool.new
|
15
|
+
opts[:port] = pool.find_free_port
|
16
|
+
::NoLockFirefox::NoLockFirefoxBridge.new(opts)
|
17
|
+
when :remote
|
18
|
+
Remote::Bridge.new(opts)
|
19
|
+
when :ie, :internet_explorer
|
20
|
+
IE::Bridge.new(opts)
|
21
|
+
when :chrome
|
22
|
+
Chrome::Bridge.new(opts)
|
23
|
+
when :android
|
24
|
+
Android::Bridge.new(opts)
|
25
|
+
when :iphone
|
26
|
+
IPhone::Bridge.new(opts)
|
27
|
+
when :opera
|
28
|
+
Opera::Bridge.new(opts)
|
29
|
+
when :phantomjs
|
30
|
+
PhantomJS::Bridge.new(opts)
|
31
|
+
when :safari
|
32
|
+
Safari::Bridge.new(opts)
|
33
|
+
else
|
34
|
+
raise ArgumentError, "unknown driver: #{browser.inspect}"
|
35
|
+
end
|
36
|
+
|
37
|
+
bridge = Support::EventFiringBridge.new(bridge, listener) if listener
|
38
|
+
|
39
|
+
new(bridge)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# This file subject to Apache License 2.0; see LICENSE.txt
|
2
|
+
|
3
|
+
module NoLockFirefox
|
4
|
+
class NoLockFirefoxBridge < Selenium::WebDriver::Firefox::Bridge
|
5
|
+
class FakeLock
|
6
|
+
def initialize(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
def locked
|
10
|
+
yield
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class NoLockLauncher < Selenium::WebDriver::Firefox::Launcher
|
15
|
+
private
|
16
|
+
|
17
|
+
def find_free_port
|
18
|
+
end
|
19
|
+
|
20
|
+
def socket_lock
|
21
|
+
@socket_lock ||= FakeLock.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_launcher(port, profile)
|
26
|
+
NoLockLauncher.new Selenium::WebDriver::Firefox::Binary.new, port, profile
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Copyright (c) 2013 Solano Labs All Rights Reserved
|
2
|
+
|
3
|
+
require 'socket'
|
4
|
+
|
5
|
+
module NoLockFirefox
|
6
|
+
class PortPool
|
7
|
+
HOST = "127.0.0.1"
|
8
|
+
START_PORT = 24576
|
9
|
+
|
10
|
+
def initialize(path=nil)
|
11
|
+
@path_ports = path
|
12
|
+
@path_ports ||= "/tmp/webdriver-firefox.ports.json"
|
13
|
+
@random = Random.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def find_free_port
|
17
|
+
probed = nil
|
18
|
+
|
19
|
+
tid = ENV.fetch('TDDIUM_TID', 0).to_i
|
20
|
+
|
21
|
+
range = 256*tid
|
22
|
+
index = @random.rand(256)
|
23
|
+
limit = START_PORT+256*(tid+1)
|
24
|
+
|
25
|
+
timeout = Time.now+90
|
26
|
+
|
27
|
+
while Time.now < timeout do
|
28
|
+
port = START_PORT+range+index
|
29
|
+
while port < limit do
|
30
|
+
probed = probe_port(port)
|
31
|
+
if probed then
|
32
|
+
probed.close
|
33
|
+
return port
|
34
|
+
end
|
35
|
+
port += 1
|
36
|
+
Kernel.sleep(0.1)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
raise "unable to find open port in reasonable time"
|
41
|
+
end
|
42
|
+
|
43
|
+
def probe_port(port)
|
44
|
+
begin
|
45
|
+
s = TCPServer.new(HOST, port)
|
46
|
+
s.close_on_exec = true
|
47
|
+
# ChildProcess.close_on_exec s
|
48
|
+
return s
|
49
|
+
rescue SocketError, Errno::EADDRINUSE => e
|
50
|
+
return nil
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: webdriver-firefox
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 5
|
9
|
+
version: 0.0.5
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Solano Labs
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2013-08-19 00:00:00 -07:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: selenium-webdriver
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
description: Lockless Support for Webdriver and Firefox
|
34
|
+
email:
|
35
|
+
- info@solanolabs.com
|
36
|
+
executables: []
|
37
|
+
|
38
|
+
extensions: []
|
39
|
+
|
40
|
+
extra_rdoc_files: []
|
41
|
+
|
42
|
+
files:
|
43
|
+
- lib/webdriver-firefox.rb
|
44
|
+
- lib/webdriver-firefox/no_lock_driver.rb
|
45
|
+
- lib/webdriver-firefox/no_lock_firefox_bridge.rb
|
46
|
+
- lib/webdriver-firefox/port_pool.rb
|
47
|
+
- lib/webdriver-firefox/version.rb
|
48
|
+
has_rdoc: true
|
49
|
+
homepage: http://www.solanolabs.com/
|
50
|
+
licenses: []
|
51
|
+
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
version: "0"
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
version: "0"
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
rubyforge_project: tddium
|
76
|
+
rubygems_version: 1.3.7
|
77
|
+
signing_key:
|
78
|
+
specification_version: 3
|
79
|
+
summary: WebdriverFirefox
|
80
|
+
test_files: []
|
81
|
+
|