eyes_selenium 1.19.0 → 1.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/eyes_selenium.rb +0 -1
- data/lib/eyes_selenium/eyes/driver.rb +7 -12
- data/lib/eyes_selenium/eyes/eyes.rb +71 -57
- data/lib/eyes_selenium/eyes/mouse_trigger.rb +2 -2
- data/lib/eyes_selenium/eyes/start_info.rb +3 -6
- data/lib/eyes_selenium/version.rb +1 -1
- metadata +2 -3
- data/lib/eyes_selenium/eyes/target_app.rb +0 -17
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDEyOTk3MGRjYmJkZGIxZDk4ZjZhODY2MjMxYjJkZDMzZTQ5NjRiOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjllN2EwMDYwZTVlZGEzMWQyMmMxMzE1Yjg0ZTY1ZGQ1MjliNGM4MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTg0NWExYmI0ZGI3N2NjYzRiZGZjOGZkMTQ5ZjExOThhN2E0YjdjZGQ5Mzc5
|
10
|
+
YTM2Y2Y4ZDI3ZWI2Y2RlOThmOWRmNTM3M2YxNGU0ZDQzZGI4MGY0NzNhMTE0
|
11
|
+
MzdhMWFhMGJmY2YyZDEzN2Q5NGRkN2M5NzZlMjk0NzU2NGQ5MzM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWRhYTk3NGUyMjc0NWIyN2JkZWE0NTUwMjgxM2UxY2M4MzQ0NTVjZTQ4M2Uw
|
14
|
+
Y2EwMDk3NTUyOGNiYTkzMzdmMTk1YzRkNTEyMzBkMTQ3NGI5NTVhMzhlZDM0
|
15
|
+
MjY2MWQ1NGNlMWE0NmJjMzI0YTZiZGI4NzgyNTY1YTg4ODZiMGE=
|
data/lib/eyes_selenium.rb
CHANGED
@@ -18,7 +18,6 @@ module Applitools
|
|
18
18
|
require 'eyes_selenium/utils'
|
19
19
|
require 'eyes_selenium/version'
|
20
20
|
require 'eyes_selenium/eyes/agent_connector'
|
21
|
-
require 'eyes_selenium/eyes/target_app'
|
22
21
|
require 'eyes_selenium/eyes/batch_info'
|
23
22
|
require 'eyes_selenium/eyes/dimension'
|
24
23
|
require 'eyes_selenium/eyes/driver'
|
@@ -4,7 +4,7 @@ class Applitools::Driver
|
|
4
4
|
|
5
5
|
include Selenium::WebDriver::DriverExtensions::HasInputDevices
|
6
6
|
|
7
|
-
attr_reader :remote_server_url, :remote_session_id, :
|
7
|
+
attr_reader :remote_server_url, :remote_session_id, :screenshot_taker, :eyes
|
8
8
|
attr_accessor :driver
|
9
9
|
|
10
10
|
DRIVER_METHODS = [
|
@@ -20,7 +20,6 @@ class Applitools::Driver
|
|
20
20
|
@eyes = eyes
|
21
21
|
@remote_server_url = address_of_remote_server
|
22
22
|
@remote_session_id = remote_session_id
|
23
|
-
@user_agent = get_user_agent
|
24
23
|
begin
|
25
24
|
if driver.capabilities.takes_screenshot?
|
26
25
|
@screenshot_taker = false
|
@@ -63,10 +62,6 @@ class Applitools::Driver
|
|
63
62
|
driver.find_elements(by, selector).map { |el| Applitools::Element.new(self, el) }
|
64
63
|
end
|
65
64
|
|
66
|
-
def create_application
|
67
|
-
Applitools::TargetApp.new(remote_server_url, remote_session_id, user_agent)
|
68
|
-
end
|
69
|
-
|
70
65
|
def ie?
|
71
66
|
driver.to_s == 'ie'
|
72
67
|
end
|
@@ -75,6 +70,12 @@ class Applitools::Driver
|
|
75
70
|
driver.to_s == 'firefox'
|
76
71
|
end
|
77
72
|
|
73
|
+
def user_agent
|
74
|
+
execute_script "return navigator.userAgent"
|
75
|
+
rescue => e
|
76
|
+
puts "getUserAgent(): Failed to obtain user-agent string (#{e.message})"
|
77
|
+
end
|
78
|
+
|
78
79
|
private
|
79
80
|
|
80
81
|
def address_of_remote_server
|
@@ -93,12 +94,6 @@ class Applitools::Driver
|
|
93
94
|
driver.remote_session_id
|
94
95
|
end
|
95
96
|
|
96
|
-
def get_user_agent
|
97
|
-
execute_script "return navigator.userAgent"
|
98
|
-
rescue => e
|
99
|
-
puts "getUserAgent(): Failed to obtain user-agent string (#{e.message})"
|
100
|
-
end
|
101
|
-
|
102
97
|
def get_local_ip
|
103
98
|
begin
|
104
99
|
Socket.ip_address_list.detect do |intf|
|
@@ -1,39 +1,51 @@
|
|
1
1
|
class Applitools::Eyes
|
2
|
+
|
2
3
|
DEFAULT_MATCH_TIMEOUT = 2.0
|
3
4
|
AGENT_ID = 'eyes.selenium.ruby/' + Applitools::VERSION
|
5
|
+
DEFAULT_EYES_SERVER = 'https://eyes.applitools.com'
|
4
6
|
|
5
7
|
class << self
|
6
|
-
attr_accessor :config
|
8
|
+
attr_accessor :config, :api_key
|
7
9
|
|
8
10
|
def log_handler=(handler)
|
9
11
|
EyesLogger.log_handler = handler
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
# Class instance variables (static variables)
|
16
|
+
@config = {}
|
17
|
+
@api_key = nil
|
18
|
+
|
19
|
+
private
|
20
|
+
attr_reader :agent_connector
|
21
|
+
attr_accessor :session, :session_start_info, :match_window_task, :should_match_window_run_once_on_timeout
|
18
22
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
:should_match_window_run_once_on_timeout, :session_start_info, :match_window_task, :user_inputs
|
23
|
+
public
|
24
|
+
attr_reader :disabled, :app_name, :test_name, :is_open, :viewport_size, :failure_reports, :match_level, :driver
|
25
|
+
attr_accessor :match_timeout, :batch, :host_os, :host_app, :branch_name, :parent_branch_name, :user_inputs
|
23
26
|
|
24
27
|
def config
|
25
28
|
self.class.config
|
26
29
|
end
|
27
30
|
|
31
|
+
def api_key
|
32
|
+
self.class.api_key
|
33
|
+
end
|
34
|
+
|
28
35
|
def initialize(params={})
|
29
|
-
raise "Please supply an apikey: Eyes.config[:apikey] = ..." unless config[:apikey]
|
30
36
|
|
31
37
|
@disabled = params[:disabled]
|
32
38
|
|
33
39
|
return if disabled?
|
34
40
|
|
41
|
+
# TODO Remove this when possible. Allows setting API key using "config" for backwards compatibility.
|
42
|
+
self.class.api_key ||= config[:apikey]
|
43
|
+
|
44
|
+
raise 'Please supply an apikey: Eyes.config[:apikey] = ...' unless api_key
|
45
|
+
|
35
46
|
@user_inputs = []
|
36
|
-
|
47
|
+
server_url = params.fetch(:server_url, DEFAULT_EYES_SERVER)
|
48
|
+
@agent_connector = Applitools::AgentConnector.new(server_url, AGENT_ID, api_key)
|
37
49
|
@match_timeout = DEFAULT_MATCH_TIMEOUT
|
38
50
|
@failure_reports = Applitools::FailureReports::ON_CLOSE
|
39
51
|
end
|
@@ -43,29 +55,29 @@ class Applitools::Eyes
|
|
43
55
|
return driver if disabled?
|
44
56
|
|
45
57
|
if driver.nil? || !driver.is_a?(Selenium::WebDriver::Driver)
|
46
|
-
raise Applitools::EyesError.new(
|
58
|
+
raise Applitools::EyesError.new('driver/browser must be a valid Selenium webdriver')
|
47
59
|
end
|
48
60
|
|
49
|
-
@driver = Applitools::Driver.new(self, {driver:
|
61
|
+
@driver = Applitools::Driver.new(self, {driver: driver})
|
50
62
|
|
51
63
|
if open?
|
52
64
|
abort_if_not_closed
|
53
|
-
msg = 'a test is
|
65
|
+
msg = 'a test is already running'
|
54
66
|
EyesLogger.info(msg) and raise Applitools::EyesError.new(msg)
|
55
67
|
end
|
56
68
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
69
|
+
@app_name = params.fetch(:app_name)
|
70
|
+
@test_name = params.fetch(:test_name)
|
71
|
+
@failure_reports = params.fetch(:failure_reports, self.failure_reports)
|
72
|
+
@match_level = params.fetch(:match_level,MatchLevel::EXACT)
|
73
|
+
@viewport_size = params.fetch(:viewport_size, nil)
|
62
74
|
|
63
|
-
|
75
|
+
@is_open = true
|
64
76
|
driver
|
65
77
|
end
|
66
78
|
|
67
79
|
def open?
|
68
|
-
|
80
|
+
is_open
|
69
81
|
end
|
70
82
|
|
71
83
|
def clear_user_inputs
|
@@ -74,20 +86,20 @@ class Applitools::Eyes
|
|
74
86
|
|
75
87
|
def check_window(tag)
|
76
88
|
return if disabled?
|
77
|
-
raise Applitools::EyesError.new(
|
78
|
-
|
89
|
+
raise Applitools::EyesError.new('Eyes not open') if !open?
|
90
|
+
unless session
|
79
91
|
start_session
|
80
92
|
self.match_window_task = Applitools::MatchWindowTask.new(agent_connector, session, driver, match_timeout)
|
81
93
|
end
|
82
94
|
|
83
95
|
as_expected = match_window_task.match_window(tag, should_match_window_run_once_on_timeout)
|
84
|
-
|
96
|
+
unless as_expected
|
85
97
|
self.should_match_window_run_once_on_timeout = true
|
86
|
-
|
87
|
-
EyesLogger.info %( "mismatch #{ tag ?
|
98
|
+
unless session.new_session?
|
99
|
+
EyesLogger.info %( "mismatch #{ tag ? '' : "(#{tag})" } )
|
88
100
|
if failure_reports.to_i == Applitools::FailureReports::IMMEDIATE
|
89
|
-
raise Applitools::TestFailedError.new("Mismatch found in '#{
|
90
|
-
" of '#{
|
101
|
+
raise Applitools::TestFailedError.new("Mismatch found in '#{session_start_info.scenario_id_or_name}'"\
|
102
|
+
" of '#{session_start_info.app_id_or_name}'")
|
91
103
|
end
|
92
104
|
end
|
93
105
|
end
|
@@ -95,7 +107,9 @@ class Applitools::Eyes
|
|
95
107
|
|
96
108
|
def close
|
97
109
|
return if disabled?
|
98
|
-
|
110
|
+
@is_open = false
|
111
|
+
|
112
|
+
# if there's no running session, the test was never started (never reached checkWindow)
|
99
113
|
return Applitools::TestResults.new if !session
|
100
114
|
|
101
115
|
session_results_url = session.url
|
@@ -128,7 +142,7 @@ class Applitools::Eyes
|
|
128
142
|
# get "http://www.google.com"
|
129
143
|
# check_window("initial")
|
130
144
|
# end
|
131
|
-
def test(params={}
|
145
|
+
def test(params={})
|
132
146
|
begin
|
133
147
|
open(params)
|
134
148
|
yield(driver)
|
@@ -139,19 +153,19 @@ class Applitools::Eyes
|
|
139
153
|
end
|
140
154
|
|
141
155
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
end
|
156
|
+
def abort_if_not_closed
|
157
|
+
return if disabled?
|
158
|
+
@is_open = false
|
159
|
+
if session
|
160
|
+
begin
|
161
|
+
agent_connector.stop_session(session,true)
|
162
|
+
rescue Applitools::EyesError => e
|
163
|
+
EyesLogger.info "Failed to abort server session -> #{e.message} "
|
164
|
+
ensure
|
165
|
+
self.session = nil
|
153
166
|
end
|
154
167
|
end
|
168
|
+
end
|
155
169
|
|
156
170
|
private
|
157
171
|
|
@@ -168,34 +182,34 @@ class Applitools::Eyes
|
|
168
182
|
params.fetch(:driver, nil)
|
169
183
|
end
|
170
184
|
|
185
|
+
def inferred_environment
|
186
|
+
user_agent = driver.user_agent
|
187
|
+
if user_agent
|
188
|
+
'useragent:' + user_agent
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
171
192
|
def start_session
|
172
193
|
assign_viewport_size
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
self.session_start_info = Applitools::StartInfo.new(AGENT_ID,
|
178
|
-
app_name, test_name, test_batch, app_env, application,
|
179
|
-
match_level,nil, branch_name, parent_branch_name
|
194
|
+
self.batch ||= Applitools::BatchInfo.new
|
195
|
+
app_env = Applitools::Environment.new(host_os, host_app, viewport_size, inferred_environment)
|
196
|
+
self.session_start_info = Applitools::StartInfo.new(
|
197
|
+
AGENT_ID, app_name, test_name, batch, app_env, match_level, nil, branch_name, parent_branch_name
|
180
198
|
)
|
181
199
|
self.session = agent_connector.start_session(session_start_info)
|
182
200
|
self.should_match_window_run_once_on_timeout = session.new_session?
|
183
201
|
end
|
184
202
|
|
185
203
|
def viewport_size?
|
186
|
-
|
204
|
+
viewport_size
|
187
205
|
end
|
188
206
|
|
189
207
|
def assign_viewport_size
|
190
208
|
if viewport_size?
|
191
|
-
|
192
|
-
|
209
|
+
@viewport_size = Applitools::ViewportSize.new(driver, viewport_size)
|
210
|
+
viewport_size.set
|
193
211
|
else
|
194
|
-
|
212
|
+
@viewport_size = Applitools::ViewportSize.new(driver).extract_viewport_from_browser!
|
195
213
|
end
|
196
214
|
end
|
197
|
-
|
198
|
-
def to_hash
|
199
|
-
Hash[dimension.each_pair.to_a]
|
200
|
-
end
|
201
215
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
class Applitools::MouseTrigger
|
2
2
|
|
3
|
-
|
3
|
+
MOUSE_ACTION = { click: 'Click', right_click: 'RightClick', double_click: 'DoubleClick', move: 'Move', down: 'Down', up: 'Up' }
|
4
4
|
|
5
5
|
attr_reader :mouse_action, :control, :location
|
6
6
|
|
7
7
|
def initialize(mouse_action, control, location)
|
8
|
-
@mouse_action =
|
8
|
+
@mouse_action = MOUSE_ACTION[mouse_action]
|
9
9
|
@control = control
|
10
10
|
@location = location
|
11
11
|
end
|
@@ -8,16 +8,14 @@ class Applitools::StartInfo
|
|
8
8
|
end
|
9
9
|
|
10
10
|
## add a config file with this stuff, and use hash arg
|
11
|
-
def initialize(agent_id, app_id_or_name, scenario_id_or_name, batch_info, environment,
|
12
|
-
|
13
|
-
parent_branch_name=nil)
|
11
|
+
def initialize(agent_id, app_id_or_name, scenario_id_or_name, batch_info, environment, match_level, ver_id=nil,
|
12
|
+
branch_name=nil, parent_branch_name=nil)
|
14
13
|
@agent_id = agent_id
|
15
14
|
@app_id_or_name = app_id_or_name
|
16
15
|
@ver_id = ver_id
|
17
16
|
@scenario_id_or_name = scenario_id_or_name
|
18
17
|
@batch_info = batch_info
|
19
18
|
@environment = environment
|
20
|
-
@application = application
|
21
19
|
@match_level = match_level
|
22
20
|
@branch_name = branch_name
|
23
21
|
@parent_branch_name = parent_branch_name
|
@@ -26,8 +24,7 @@ class Applitools::StartInfo
|
|
26
24
|
def to_hash
|
27
25
|
{
|
28
26
|
AgentId: agent_id, AppIdOrName: app_id_or_name, VerId: ver_id, ScenarioIdOrName: scenario_id_or_name,
|
29
|
-
BatchInfo: batch_info.to_hash, Environment: environment.to_hash,
|
30
|
-
Application: application.to_hash, matchLevel: match_level, branchName: branch_name,
|
27
|
+
BatchInfo: batch_info.to_hash, Environment: environment.to_hash, matchLevel: match_level, branchName: branch_name,
|
31
28
|
parentBranchName: parent_branch_name
|
32
29
|
}
|
33
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eyes_selenium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Applitools team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: selenium-webdriver
|
@@ -157,7 +157,6 @@ files:
|
|
157
157
|
- lib/eyes_selenium/eyes/screenshot_taker.rb
|
158
158
|
- lib/eyes_selenium/eyes/session.rb
|
159
159
|
- lib/eyes_selenium/eyes/start_info.rb
|
160
|
-
- lib/eyes_selenium/eyes/target_app.rb
|
161
160
|
- lib/eyes_selenium/eyes/test_results.rb
|
162
161
|
- lib/eyes_selenium/eyes/text_trigger.rb
|
163
162
|
- lib/eyes_selenium/eyes/viewport_size.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
class Applitools::TargetApp
|
2
|
-
|
3
|
-
attr_reader :url, :session_id, :user_agent
|
4
|
-
|
5
|
-
def initialize(url, session_id, user_agent)
|
6
|
-
@url = url
|
7
|
-
@session_id = session_id
|
8
|
-
@user_agent = user_agent
|
9
|
-
end
|
10
|
-
|
11
|
-
def to_hash
|
12
|
-
{
|
13
|
-
"$type" => "Applitools.Framework.TargetWebDriverApplication, Core",
|
14
|
-
url: URI.encode(url.to_s), sessionId: session_id, userAgent: user_agent
|
15
|
-
}
|
16
|
-
end
|
17
|
-
end
|