percy-appium-app 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.
- checksums.yaml +7 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +55 -0
- data/.github/dependabot.yml +14 -0
- data/.github/release-drafter.yml +28 -0
- data/.github/workflows/Semgrep.yml +48 -0
- data/.github/workflows/changelog.yml +11 -0
- data/.github/workflows/release.yml +22 -0
- data/.github/workflows/stale.yml +30 -0
- data/.github/workflows/test.yml +40 -0
- data/Gemfile +13 -0
- data/LICENSE +21 -0
- data/Makefile +3 -0
- data/README.md +1 -0
- data/Rakefile +1 -0
- data/percy/common/common.rb +19 -0
- data/percy/configs/devices.json +232 -0
- data/percy/environment.rb +25 -0
- data/percy/exceptions/exceptions.rb +13 -0
- data/percy/lib/app_percy.rb +55 -0
- data/percy/lib/cache.rb +53 -0
- data/percy/lib/cli_wrapper.rb +132 -0
- data/percy/lib/ignore_region.rb +8 -0
- data/percy/lib/percy_automate.rb +59 -0
- data/percy/lib/percy_options.rb +37 -0
- data/percy/lib/region.rb +22 -0
- data/percy/lib/tile.rb +28 -0
- data/percy/metadata/android_metadata.rb +79 -0
- data/percy/metadata/driver_metadata.rb +40 -0
- data/percy/metadata/ios_metadata.rb +83 -0
- data/percy/metadata/metadata.rb +108 -0
- data/percy/metadata/metadata_resolver.rb +21 -0
- data/percy/providers/app_automate.rb +159 -0
- data/percy/providers/generic_provider.rb +205 -0
- data/percy/providers/provider_resolver.rb +17 -0
- data/percy/screenshot.rb +23 -0
- data/percy/version.rb +5 -0
- data/percy-appium-app.gemspec +37 -0
- data/specs/android_metadata.rb +79 -0
- data/specs/app_automate.rb +124 -0
- data/specs/app_percy.rb +175 -0
- data/specs/cache.rb +56 -0
- data/specs/cli_wrapper.rb +135 -0
- data/specs/driver_metadata.rb +71 -0
- data/specs/generic_providers.rb +370 -0
- data/specs/ignore_regions.rb +51 -0
- data/specs/ios_metadata.rb +88 -0
- data/specs/metadata.rb +105 -0
- data/specs/metadata_resolver.rb +41 -0
- data/specs/mocks/mock_methods.rb +147 -0
- data/specs/percy_options.rb +114 -0
- data/specs/screenshot.rb +342 -0
- data/specs/tile.rb +33 -0
- metadata +194 -0
data/specs/app_percy.rb
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/MethodLength
|
4
|
+
|
5
|
+
require 'minitest/autorun'
|
6
|
+
# require 'webmock/minitest'
|
7
|
+
require_relative '../percy/lib/app_percy'
|
8
|
+
require_relative '../percy/metadata/android_metadata'
|
9
|
+
require_relative '../percy/metadata/ios_metadata'
|
10
|
+
require_relative '../percy/providers/app_automate'
|
11
|
+
require_relative '../percy/providers/generic_provider'
|
12
|
+
require_relative '../percy/lib/cli_wrapper'
|
13
|
+
require_relative 'mocks/mock_methods'
|
14
|
+
|
15
|
+
# Test suite for the AppPercy class
|
16
|
+
class TestAppPercy < Minitest::Test
|
17
|
+
COMPARISON_RESPONSE = { 'link' => 'https://snapshot_url', 'success' => true }.freeze
|
18
|
+
|
19
|
+
def setup
|
20
|
+
@mock_android_webdriver = Minitest::Mock.new
|
21
|
+
@mock_ios_webdriver = Minitest::Mock.new
|
22
|
+
@bridge = Minitest::Mock.new
|
23
|
+
@http = Minitest::Mock.new
|
24
|
+
@server_url = Minitest::Mock.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_android_on_app_automate
|
28
|
+
3.times do
|
29
|
+
@mock_android_webdriver.expect(:instance_variable_get, @bridge, [:@bridge])
|
30
|
+
@http.expect(:instance_variable_get, @server_url, [:@server_url])
|
31
|
+
@bridge.expect(:instance_variable_get, @http, [:@http])
|
32
|
+
@server_url.expect(:to_s, 'url-of-browserstack-cloud')
|
33
|
+
end
|
34
|
+
@mock_android_webdriver.expect(:is_a?, true, [Appium::Core::Base::Driver])
|
35
|
+
5.times do
|
36
|
+
@mock_android_webdriver.expect(:capabilities, get_android_capabilities)
|
37
|
+
end
|
38
|
+
|
39
|
+
ENV['PERCY_DISABLE_REMOTE_UPLOADS'] = 'true'
|
40
|
+
|
41
|
+
app_percy = AppPercy.new(@mock_android_webdriver)
|
42
|
+
|
43
|
+
assert_instance_of(AndroidMetadata, app_percy.metadata)
|
44
|
+
assert_instance_of(AppAutomate, app_percy.provider)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_android_on_non_app_automate
|
48
|
+
3.times do
|
49
|
+
@mock_android_webdriver.expect(:instance_variable_get, @bridge, [:@bridge])
|
50
|
+
@http.expect(:instance_variable_get, @server_url, [:@server_url])
|
51
|
+
@bridge.expect(:instance_variable_get, @http, [:@http])
|
52
|
+
@server_url.expect(:to_s, 'some-remote-url')
|
53
|
+
end
|
54
|
+
2.times do
|
55
|
+
@mock_android_webdriver.expect(:is_a?, true, [Appium::Core::Base::Driver])
|
56
|
+
end
|
57
|
+
5.times do
|
58
|
+
@mock_android_webdriver.expect(:capabilities, get_android_capabilities)
|
59
|
+
end
|
60
|
+
app_percy = AppPercy.new(@mock_android_webdriver)
|
61
|
+
assert_instance_of(AndroidMetadata, app_percy.metadata)
|
62
|
+
assert_instance_of(GenericProvider, app_percy.provider)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_ios_on_app_automate
|
66
|
+
mock_driver_remote_url(@mock_ios_webdriver, 'url-of-browserstack-cloud')
|
67
|
+
@mock_ios_webdriver.expect(:is_a?, true, [Appium::Core::Base::Driver])
|
68
|
+
5.times do
|
69
|
+
@mock_ios_webdriver.expect(:capabilities, get_ios_capabilities)
|
70
|
+
end
|
71
|
+
app_percy = AppPercy.new(@mock_ios_webdriver)
|
72
|
+
assert_instance_of(IOSMetadata, app_percy.metadata)
|
73
|
+
assert_instance_of(AppAutomate, app_percy.provider)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_ios_on_non_app_automate
|
77
|
+
2.times do
|
78
|
+
@mock_ios_webdriver.expect(:instance_variable_get, @bridge, [:@bridge])
|
79
|
+
@http.expect(:instance_variable_get, @server_url, [:@server_url])
|
80
|
+
@bridge.expect(:instance_variable_get, @http, [:@http])
|
81
|
+
@server_url.expect(:to_s, 'some-remote-url')
|
82
|
+
end
|
83
|
+
@mock_ios_webdriver.expect(:is_a?, true, [Appium::Core::Base::Driver])
|
84
|
+
3.times do
|
85
|
+
@mock_ios_webdriver.expect(:capabilities, get_ios_capabilities)
|
86
|
+
end
|
87
|
+
app_percy = AppPercy.new(@mock_ios_webdriver)
|
88
|
+
assert_instance_of(IOSMetadata, app_percy.metadata)
|
89
|
+
assert_instance_of(GenericProvider, app_percy.provider)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_screenshot_with_percy_options_disabled
|
93
|
+
disable_percy_options(@mock_android_webdriver, num = 5)
|
94
|
+
make_mock_driver_appium(@mock_android_webdriver)
|
95
|
+
mock_driver_remote_url(@mock_android_webdriver, 'some-other-url', num = 2)
|
96
|
+
app_percy = AppPercy.new(@mock_android_webdriver)
|
97
|
+
assert_nil app_percy.screenshot('screenshot 1')
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_screenshot_with_percyoptions_disabled
|
101
|
+
disable_percy_options(@mock_android_webdriver, num = 5)
|
102
|
+
make_mock_driver_appium(@mock_android_webdriver)
|
103
|
+
mock_driver_remote_url(@mock_android_webdriver, 'some-other-url', num = 2)
|
104
|
+
app_percy = AppPercy.new(@mock_android_webdriver)
|
105
|
+
assert_nil app_percy.screenshot('screenshot 1')
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_percy_options_ignore_errors
|
109
|
+
@mock_android_webdriver.expect(:capabilities, {
|
110
|
+
'platformName': 'android',
|
111
|
+
'percy:options' => { 'ignoreErrors' => false }
|
112
|
+
})
|
113
|
+
|
114
|
+
assert_raises(Exception) do
|
115
|
+
AppPercy.screenshot(@mock_android_webdriver, 'screenshot')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_invalid_provider
|
120
|
+
url = 'some-cloud-url'
|
121
|
+
mock_driver_remote_url(@mock_android_webdriver, url, 2)
|
122
|
+
@mock_android_webdriver.expect(:is_a?, true, [Appium::Core::Base::Driver])
|
123
|
+
caps = get_android_capabilities
|
124
|
+
4.times do
|
125
|
+
@mock_android_webdriver.expect(:capabilities, caps)
|
126
|
+
end
|
127
|
+
|
128
|
+
GenericProvider.stub(:supports, false) do
|
129
|
+
assert_raises(UnknownProvider) do
|
130
|
+
_provider = AppPercy.new(@mock_android_webdriver).provider
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_invalid_driver
|
136
|
+
assert_raises(DriverNotSupported) do
|
137
|
+
AppPercy.new(Object.new)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
private
|
142
|
+
|
143
|
+
def disable_percy_options(mock_webdriver, num = 1)
|
144
|
+
num.times do
|
145
|
+
mock_webdriver.expect(:capabilities, {
|
146
|
+
'platformName' => 'android',
|
147
|
+
'percy:options' => { 'enabled' => false }
|
148
|
+
})
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def mock_driver_remote_url(mock_webdriver, url, num = 1)
|
153
|
+
num.times do
|
154
|
+
mock_webdriver.expect(:instance_variable_get, @bridge, [:@bridge])
|
155
|
+
@http.expect(:instance_variable_get, @server_url, [:@server_url])
|
156
|
+
@bridge.expect(:instance_variable_get, @http, [:@http])
|
157
|
+
@server_url.expect(:to_s, url)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def make_mock_driver_appium(mock_driver)
|
162
|
+
mock_driver.expect(:is_a?, true, [Appium::Core::Base::Driver])
|
163
|
+
end
|
164
|
+
|
165
|
+
def ignore_errors_test(mock_webdriver)
|
166
|
+
mock_webdriver.expect(:capabilities, {
|
167
|
+
'platformName': 'android',
|
168
|
+
'percy:options' => { 'ignoreErrors' => false }
|
169
|
+
})
|
170
|
+
|
171
|
+
assert_raises(Exception) do
|
172
|
+
AppPercy.screenshot(mock_webdriver, 'screenshot')
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
data/specs/cache.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/mock'
|
5
|
+
require 'time'
|
6
|
+
require_relative '../percy/lib/cache'
|
7
|
+
|
8
|
+
# Test suite for the Cache class
|
9
|
+
class TestCache < Minitest::Test
|
10
|
+
def setup
|
11
|
+
@cache = Cache.new
|
12
|
+
@session_id = 'session_id_123'
|
13
|
+
@prop = 'window_size'
|
14
|
+
@value = { 'top' => 'Top Value' }
|
15
|
+
Cache.set_cache(@session_id, @prop, @value)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_set_cache
|
19
|
+
assert_raises(Exception) { Cache.set_cache(123, 123, 123) }
|
20
|
+
assert_raises(Exception) { Cache.set_cache(@session_id, 123, 123) }
|
21
|
+
|
22
|
+
assert_includes @cache.cache, @session_id
|
23
|
+
assert_equal @cache.cache[@session_id][@prop], @value
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_get_cache_invalid_args
|
27
|
+
assert_raises(Exception) { Cache.get_cache(123, 123) }
|
28
|
+
assert_raises(Exception) { Cache.get_cache(@session_id, 123) }
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_get_cache_success
|
32
|
+
mock_cleanup_cache = Minitest::Mock.new
|
33
|
+
mock_cleanup_cache.expect(:call, nil)
|
34
|
+
|
35
|
+
Cache.stub(:cleanup_cache, -> { mock_cleanup_cache.call }) do
|
36
|
+
window_size = Cache.get_cache(@session_id, @prop)
|
37
|
+
assert_equal @value, window_size
|
38
|
+
mock_cleanup_cache.verify
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_cleanup_cache
|
43
|
+
previous_value = Cache::CACHE_TIMEOUT
|
44
|
+
Cache.send(:remove_const, :CACHE_TIMEOUT)
|
45
|
+
Cache.const_set(:CACHE_TIMEOUT, 1)
|
46
|
+
|
47
|
+
cache_timeout = Cache::CACHE_TIMEOUT
|
48
|
+
sleep(cache_timeout + 1)
|
49
|
+
assert_includes @cache.cache, @session_id
|
50
|
+
Cache.cleanup_cache
|
51
|
+
refute_includes @cache.cache, @session_id
|
52
|
+
|
53
|
+
Cache.send(:remove_const, :CACHE_TIMEOUT)
|
54
|
+
Cache.const_set(:CACHE_TIMEOUT, previous_value)
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/MethodLength
|
4
|
+
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require 'webmock/minitest'
|
7
|
+
require 'json'
|
8
|
+
require_relative '../percy/lib/cli_wrapper'
|
9
|
+
require_relative '../percy/lib/tile'
|
10
|
+
|
11
|
+
def mock_screenshot(fail: false)
|
12
|
+
stub_request(:post, 'http://localhost:5338/percy/comparison')
|
13
|
+
.to_return(body: '{"link": "snapshot-url-link", "success": true}', status: (fail ? 500 : 200))
|
14
|
+
end
|
15
|
+
|
16
|
+
def mock_poa_screenshot(fail: false)
|
17
|
+
stub_request(:post, 'http://localhost:5338/percy/automateScreenshot')
|
18
|
+
.to_return(body: "{\"success\": #{fail ? 'false, "error": "test"' : 'true'}}", status: (fail ? 500 : 200))
|
19
|
+
end
|
20
|
+
|
21
|
+
# Test suite for the CLIWrapper class
|
22
|
+
class TestCLIWrapper < Minitest::Test
|
23
|
+
def setup
|
24
|
+
@cli_wrapper = CLIWrapper.new
|
25
|
+
@ignored_elements_data = {
|
26
|
+
'ignore_elements_data' => {
|
27
|
+
'selector' => 'xpath: some_xpath',
|
28
|
+
'coOrdinates' => { 'top' => 123, 'bottom' => 234, 'left' => 234, 'right' => 455 }
|
29
|
+
}
|
30
|
+
}
|
31
|
+
@considered_elements_data = {
|
32
|
+
'consider_elements_data' => {
|
33
|
+
'selector' => 'xpath: some_xpath',
|
34
|
+
'coOrdinates' => { 'top' => 50, 'bottom' => 100, 'left' => 0, 'right' => 100 }
|
35
|
+
}
|
36
|
+
}
|
37
|
+
WebMock.enable!
|
38
|
+
end
|
39
|
+
|
40
|
+
def teardown
|
41
|
+
WebMock.disable!
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_post_screenshot_throws_error
|
45
|
+
mock_screenshot(fail: true)
|
46
|
+
|
47
|
+
assert_raises(CLIException) do
|
48
|
+
@cli_wrapper.post_screenshots('some-name', {}, [], 'some-debug-url')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_post_failed_event
|
53
|
+
mock_poa_screenshot(fail: true)
|
54
|
+
@snapshot_name = 'test_snapshot'
|
55
|
+
@session_id = 'test_session_id'
|
56
|
+
@command_executor_url = 'http://example.com'
|
57
|
+
@capabilities = { 'browser' => 'chrome' }
|
58
|
+
@desired_capabilities = { 'platform' => 'Windows' }
|
59
|
+
@options = { 'option_key' => 'option_value' }
|
60
|
+
|
61
|
+
expected_request_body = {
|
62
|
+
'sessionId' => @session_id,
|
63
|
+
'commandExecutorUrl' => @command_executor_url,
|
64
|
+
'capabilities' => @capabilities,
|
65
|
+
'sessionCapabilities' => @desired_capabilities,
|
66
|
+
'snapshotName' => @snapshot_name,
|
67
|
+
'options' => @options,
|
68
|
+
'client_info' => 'your_mocked_client_info',
|
69
|
+
'environment_info' => 'your_mocked_environment_info'
|
70
|
+
}
|
71
|
+
|
72
|
+
assert_raises(CLIException, 'TestError') do
|
73
|
+
@cli_wrapper.post_poa_screenshots(
|
74
|
+
@snapshot_name,
|
75
|
+
@session_id,
|
76
|
+
@command_executor_url,
|
77
|
+
@capabilities,
|
78
|
+
@desired_capabilities,
|
79
|
+
@options
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_post_screenshot_with_ignore_region_null
|
85
|
+
mock_screenshot
|
86
|
+
|
87
|
+
assert_equal(
|
88
|
+
@cli_wrapper.post_screenshots('some-name', {}, [Tile.new(10, 10, 20, 20, filepath: 'some-file-path')],
|
89
|
+
'some-debug-url'),
|
90
|
+
{ 'link' => 'snapshot-url-link', 'success' => true }
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_post_screenshot_with_ignore_region_present
|
95
|
+
mock_screenshot
|
96
|
+
|
97
|
+
assert_equal(
|
98
|
+
@cli_wrapper.post_screenshots('some-name', {}, [Tile.new(10, 10, 20, 20, filepath: 'some-file-path')],
|
99
|
+
'some-debug-url', @ignored_elements_data),
|
100
|
+
{ 'link' => 'snapshot-url-link', 'success' => true }
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_request_body
|
105
|
+
tile = Tile.new(10, 10, 20, 20, filepath: 'some-file-path')
|
106
|
+
tag = { 'name' => 'Tag' }
|
107
|
+
name = 'some-name'
|
108
|
+
debug_url = 'debug-url'
|
109
|
+
response = @cli_wrapper.request_body(name, tag, [tile], debug_url, @ignored_elements_data,
|
110
|
+
@considered_elements_data)
|
111
|
+
assert_equal response['name'], name
|
112
|
+
assert_equal response['external_debug_url'], debug_url
|
113
|
+
assert_equal response['tag'], tag
|
114
|
+
assert_equal response['tiles'], [tile.to_h]
|
115
|
+
assert_equal response['ignored_elements_data'], @ignored_elements_data
|
116
|
+
assert_equal response['considered_elements_data'], @considered_elements_data
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_request_body_when_optional_values_are_null
|
120
|
+
tile = Tile.new(10, 10, 20, 20, filepath: 'some-file-path')
|
121
|
+
tag = { 'name' => 'Tag' }
|
122
|
+
name = 'some-name'
|
123
|
+
debug_url = nil
|
124
|
+
ignored_elements_data = nil
|
125
|
+
considered_elements_data = nil
|
126
|
+
response = @cli_wrapper.send(:request_body, name, tag, [tile], debug_url, ignored_elements_data,
|
127
|
+
considered_elements_data)
|
128
|
+
assert_equal response['name'], name
|
129
|
+
assert_equal response['external_debug_url'], debug_url
|
130
|
+
assert_equal response['tag'], tag
|
131
|
+
assert_equal response['tiles'], [tile.to_h]
|
132
|
+
assert_nil response['ignored_elements_data']
|
133
|
+
assert_nil response['considered_elements_data']
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/MethodLength
|
4
|
+
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require 'minitest/mock'
|
7
|
+
require 'appium_lib'
|
8
|
+
|
9
|
+
require_relative '../percy/metadata/driver_metadata'
|
10
|
+
|
11
|
+
# Test suite for the DriverMetadata class
|
12
|
+
class TestDriverMetadata < Minitest::Test
|
13
|
+
def setup
|
14
|
+
@mock_webdriver = Minitest::Mock.new
|
15
|
+
@http = Minitest::Mock.new
|
16
|
+
@bridge = Minitest::Mock.new
|
17
|
+
@server_url = Minitest::Mock.new
|
18
|
+
|
19
|
+
@metadata = DriverMetadata.new(@mock_webdriver)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_session_id
|
23
|
+
session_id = 'session_id_123'
|
24
|
+
@mock_webdriver.expect(:session_id, session_id)
|
25
|
+
|
26
|
+
assert(session_id, @metadata.session_id)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_command_executor_url
|
30
|
+
url = 'https://example-hub:4444/wd/hub'
|
31
|
+
session_id = 'session_id_123'
|
32
|
+
2.times do
|
33
|
+
@mock_webdriver.expect(:session_id, session_id)
|
34
|
+
end
|
35
|
+
@mock_webdriver.expect(:instance_variable_get, @bridge, [:@bridge])
|
36
|
+
@http.expect(:instance_variable_get, @server_url, [:@server_url])
|
37
|
+
@bridge.expect(:instance_variable_get, @http, [:@http])
|
38
|
+
@server_url.expect(:to_s, url)
|
39
|
+
|
40
|
+
assert(url, @metadata.command_executor_url)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_capabilities
|
44
|
+
session_id = 'session_id_123'
|
45
|
+
2.times do
|
46
|
+
@mock_webdriver.expect(:session_id, session_id)
|
47
|
+
end
|
48
|
+
capabilities = { 'platform' => 'chrome_android', 'browserVersion' => '115.0.1' }
|
49
|
+
@mock_webdriver.expect(:capabilities, capabilities)
|
50
|
+
|
51
|
+
assert(capabilities, @metadata.capabilities)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_session_capabilities
|
55
|
+
session_id = 'session_id_123'
|
56
|
+
@mock_webdriver.expect(:session_id, session_id)
|
57
|
+
@mock_webdriver.expect(:session_id, session_id)
|
58
|
+
@mock_webdriver.expect(:desired_capabilities, {
|
59
|
+
'platform' => 'chrome_android',
|
60
|
+
'browserVersion' => '115.0.1',
|
61
|
+
'session_name' => 'abc'
|
62
|
+
})
|
63
|
+
session_caps = {
|
64
|
+
'platform' => 'chrome_android',
|
65
|
+
'browserVersion' => '115.0.1',
|
66
|
+
'session_name' => 'abc'
|
67
|
+
}
|
68
|
+
|
69
|
+
assert(session_caps, @metadata.session_capabilities)
|
70
|
+
end
|
71
|
+
end
|