superbot 0.1.10 → 0.1.11
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 +4 -4
- data/Gemfile.lock +2 -2
- data/lib/superbot/cli/run_command.rb +0 -2
- data/lib/superbot/cli/teleport_command.rb +3 -1
- data/lib/superbot/version.rb +1 -1
- data/lib/superbot/web.rb +29 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f71e13691620164c6f8ccb20568412b28edd9fbf6a8c8284dd7f1ba728dbdecf
|
4
|
+
data.tar.gz: afb80afe5c87473d1bd43b33b5d2a4bf5306f6577b01f415055a5ca33fd0e8dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09789a18105dba7f043de350645a527a299dcc86525a62ee99b31b3ca805dfb7c6ec8c13f2b5fee8c31df2da6a721ffd51c88f119e729bc25db9bab07e1ddb39'
|
7
|
+
data.tar.gz: f3ec0a6cba8bf4f2986d8c96767dccfe7853acaf3cdfcc026dec2332043f77e24761875207fcc2bd0b4b4dd405a9a7cbc60fb61d8ce626886d178b8d49b08ca0
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
superbot (0.1.
|
4
|
+
superbot (0.1.11)
|
5
5
|
clamp (= 1.2.1)
|
6
6
|
kommando (~> 0.1)
|
7
7
|
launchy (= 2.4.3)
|
@@ -111,7 +111,7 @@ GEM
|
|
111
111
|
rack-protection (= 2.0.3)
|
112
112
|
tilt (~> 2.0)
|
113
113
|
sinatra-silent (0.0.1)
|
114
|
-
superbot-cloud (0.1.
|
114
|
+
superbot-cloud (0.1.6)
|
115
115
|
marcel (= 0.3.3)
|
116
116
|
multipart-post (= 2.0.0)
|
117
117
|
thor (0.20.0)
|
@@ -13,8 +13,6 @@ module Superbot
|
|
13
13
|
validates_browser_type browser
|
14
14
|
end
|
15
15
|
option ['--region'], 'REGION', 'Region for remote webdriver'
|
16
|
-
option ['-u', '--user'], 'AUTH_USER_NAME', 'Cloud webdriver auth credentials', environment_variable: 'AUTH_USER_NAME', attribute_name: :auth_user
|
17
|
-
option ['-p', '--password'], 'AUTH_USER_PASSWORD', 'Cloud webdriver auth credentials', environment_variable: 'AUTH_USER_PASSWORD', attribute_name: :auth_password
|
18
16
|
|
19
17
|
def execute
|
20
18
|
script = File.read(File.join(path, 'main.rb'))
|
@@ -11,9 +11,11 @@ module Superbot
|
|
11
11
|
option ['--region'], 'REGION', 'Region for remote webdriver'
|
12
12
|
|
13
13
|
def execute
|
14
|
-
@web = Superbot::Web.new(webdriver_type: browser)
|
14
|
+
@web = Superbot::Web.new(webdriver_type: browser, region: region)
|
15
|
+
@web.run_async_after_running!
|
15
16
|
|
16
17
|
@chromedriver = Kommando.run_async 'chromedriver --silent --port=9515' if browser == 'local'
|
18
|
+
|
17
19
|
puts "", "🤖 Teleport is active ☁️ "
|
18
20
|
puts "", "Configure your webdriver to http://localhost:4567/wd/hub"
|
19
21
|
|
data/lib/superbot/version.rb
CHANGED
data/lib/superbot/web.rb
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
|
3
3
|
require "sinatra/base"
|
4
4
|
require "sinatra/silent"
|
5
|
-
require
|
5
|
+
require "net/http"
|
6
6
|
|
7
7
|
require_relative "capybara/convert"
|
8
8
|
require_relative "capybara/runner"
|
9
9
|
|
10
10
|
module Superbot
|
11
11
|
class Web
|
12
|
-
def initialize(webdriver_type: 'cloud')
|
12
|
+
def initialize(webdriver_type: 'cloud', region: nil)
|
13
13
|
@sinatra = Sinatra.new
|
14
14
|
@sinatra.set :bind, "127.0.0.1"
|
15
15
|
@sinatra.set :silent_sinatra, true
|
@@ -37,20 +37,23 @@ module Superbot
|
|
37
37
|
instance.capybara_runner.run(converted_script)
|
38
38
|
end
|
39
39
|
|
40
|
-
|
40
|
+
@webdriver_type = webdriver_type
|
41
|
+
webdriver_uri = URI.parse(Superbot.webdriver_endpoint(@webdriver_type))
|
41
42
|
@request_settings = {
|
42
43
|
host: webdriver_uri.host,
|
43
44
|
port: webdriver_uri.port,
|
44
45
|
path: webdriver_uri.path
|
45
46
|
}
|
47
|
+
@region = region
|
46
48
|
|
47
49
|
%w(get post put patch delete).each do |verb|
|
48
50
|
@sinatra.send(verb, "/wd/hub/*") do
|
49
51
|
begin
|
52
|
+
request_path = request.path_info.gsub('/wd/hub', '')
|
50
53
|
content_type 'application/json'
|
51
54
|
response = instance.remote_webdriver_request(
|
52
55
|
verb.capitalize,
|
53
|
-
|
56
|
+
request_path,
|
54
57
|
request.query_string,
|
55
58
|
request.body,
|
56
59
|
instance.incomming_headers(request)
|
@@ -58,9 +61,9 @@ module Superbot
|
|
58
61
|
status response.code
|
59
62
|
headers instance.all_headers(response)
|
60
63
|
response.body
|
61
|
-
rescue
|
64
|
+
rescue StandardError => e
|
62
65
|
error_message = "Remote webdriver doesn't responding"
|
63
|
-
puts error_message
|
66
|
+
puts error_message, e
|
64
67
|
halt 500, { message: error_message }.to_json
|
65
68
|
end
|
66
69
|
end
|
@@ -74,23 +77,39 @@ module Superbot
|
|
74
77
|
def remote_webdriver_request(type, path, query_string, body, new_headers)
|
75
78
|
uri = URI::HTTP.build(
|
76
79
|
@request_settings.merge(
|
77
|
-
path:
|
80
|
+
path: @request_settings[:path] + path,
|
78
81
|
query: query_string.empty? ? nil : query_string
|
79
82
|
)
|
80
83
|
)
|
81
84
|
req = Net::HTTP.const_get(type).new(uri, new_headers.merge('Content-Type' => 'application/json'))
|
82
85
|
|
83
|
-
|
84
|
-
|
86
|
+
request_body = body.read
|
87
|
+
if cloud_teleport?
|
88
|
+
user_auth_creds = Superbot::Cloud.credentials&.slice(:username, :token)
|
89
|
+
req.basic_auth(*user_auth_creds.values) if user_auth_creds
|
90
|
+
|
91
|
+
if @region && creating_session?(type, path)
|
92
|
+
parsed_body = JSON.parse(request_body)
|
93
|
+
parsed_body['desiredCapabilities']['superOptions'] = { 'region': @region }
|
94
|
+
request_body = parsed_body.to_json
|
95
|
+
end
|
85
96
|
end
|
97
|
+
req.body = request_body
|
86
98
|
|
87
|
-
req.body = body.read
|
88
99
|
Net::HTTP.new(uri.hostname, uri.port).start do |http|
|
89
100
|
http.read_timeout = Superbot.cloud_timeout
|
90
101
|
http.request(req)
|
91
102
|
end
|
92
103
|
end
|
93
104
|
|
105
|
+
def cloud_teleport?
|
106
|
+
%w(cloud local_cloud).include?(@webdriver_type)
|
107
|
+
end
|
108
|
+
|
109
|
+
def creating_session?(method, path)
|
110
|
+
method.casecmp?('post') && path == '/session'
|
111
|
+
end
|
112
|
+
|
94
113
|
def all_headers(response)
|
95
114
|
header_list = {}
|
96
115
|
response.header.each_capitalized do |k, v|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: superbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Superbots
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|