percy-appium-app 0.0.9.beta0 → 0.0.9.beta.2
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/.github/workflows/Semgrep.yml +1 -2
- data/percy/metadata/android_metadata.rb +5 -2
- data/percy/metadata/metadata_resolver.rb +2 -1
- data/percy/providers/generic_provider.rb +4 -1
- data/percy/version.rb +1 -1
- data/specs/android_metadata.rb +9 -1
- data/specs/app_automate.rb +5 -2
- data/specs/generic_providers.rb +3 -3
- data/specs/metadata_resolver.rb +45 -0
- data/specs/screenshot.rb +1 -1
- 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: c6f74600a42302bf5300a766e19c17ebdd04b7458ce55f8685acf7f674f96e43
|
|
4
|
+
data.tar.gz: 9b4442060ca02d391eb2ee5863989f0736dabe38e58fa0d4b83e43c51af042e7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 25b974f6c6de47ec6ecf38547296cbc280ca85a24b356b907fce4db8d416588197d786fddd38df5ec2297e26b28a42eb0aebaed6c6a8591f379f3f9c5d84fe71
|
|
7
|
+
data.tar.gz: 40e6e18819248f11358abd3aa2b0047cfda9062a9519858aad2eeb7a36d92809763bc46f6f68bf0f2dd830b9c33c36bbca2cd0e59aeba10483dbc46713e85e0e
|
|
@@ -27,8 +27,7 @@ jobs:
|
|
|
27
27
|
|
|
28
28
|
container:
|
|
29
29
|
# A Docker image with Semgrep installed. Do not change this.
|
|
30
|
-
image: returntocorp/semgrep
|
|
31
|
-
|
|
30
|
+
image: returntocorp/semgrep:1.166.0
|
|
32
31
|
# Skip any PR created by dependabot to avoid permission issues:
|
|
33
32
|
if: (github.actor != 'dependabot[bot]')
|
|
34
33
|
|
|
@@ -15,12 +15,15 @@ module Percy
|
|
|
15
15
|
def device_screen_size
|
|
16
16
|
caps = capabilities
|
|
17
17
|
caps = caps.as_json unless caps.is_a?(Hash)
|
|
18
|
+
# Use string keys to match the IosMetadata implementation and every
|
|
19
|
+
# consumer (generic_provider, app_automate, _get_tag), all of which read
|
|
20
|
+
# device_screen_size['width'] / ['height'].
|
|
18
21
|
if caps['deviceScreenSize'].nil?
|
|
19
22
|
size = driver.window_size
|
|
20
|
-
{ width
|
|
23
|
+
{ 'width' => size.width.to_i, 'height' => size.height.to_i }
|
|
21
24
|
else
|
|
22
25
|
width, height = caps['deviceScreenSize'].split('x')
|
|
23
|
-
{ width
|
|
26
|
+
{ 'width' => width.to_i, 'height' => height.to_i }
|
|
24
27
|
end
|
|
25
28
|
end
|
|
26
29
|
|
|
@@ -9,7 +9,8 @@ module Percy
|
|
|
9
9
|
def self.resolve(driver)
|
|
10
10
|
capabilities = driver.capabilities
|
|
11
11
|
capabilities = capabilities.as_json unless capabilities.is_a?(Hash)
|
|
12
|
-
|
|
12
|
+
key = capabilities.keys.find { |k| k.downcase.gsub('_', '') == 'platformname' }
|
|
13
|
+
platform_name = capabilities[key]&.downcase
|
|
13
14
|
case platform_name
|
|
14
15
|
when 'android'
|
|
15
16
|
Percy::AndroidMetadata.new(driver)
|
|
@@ -137,7 +137,10 @@ module Percy
|
|
|
137
137
|
|
|
138
138
|
def get_regions_by_xpath(elements_array, xpaths)
|
|
139
139
|
xpaths.each do |xpath|
|
|
140
|
-
|
|
140
|
+
# Pass the :xpath finder symbol directly. appium_lib_core 12.x removed
|
|
141
|
+
# Appium::Core::Base::SearchContext::FINDERS; the symbol form works
|
|
142
|
+
# across all supported appium_lib versions.
|
|
143
|
+
element = driver.find_element(:xpath, xpath)
|
|
141
144
|
selector = "xpath: #{xpath}"
|
|
142
145
|
if element
|
|
143
146
|
region = get_region_object(selector, element)
|
data/percy/version.rb
CHANGED
data/specs/android_metadata.rb
CHANGED
|
@@ -46,13 +46,21 @@ class TestAndroidMetadata < Minitest::Test
|
|
|
46
46
|
|
|
47
47
|
# Call the method and assert the result
|
|
48
48
|
result = @android_metadata.device_screen_size
|
|
49
|
-
assert_equal({ width
|
|
49
|
+
assert_equal({ 'width' => 1080, 'height' => 1920 }, result)
|
|
50
50
|
|
|
51
51
|
# Verify mocks
|
|
52
52
|
mock_window_size.verify
|
|
53
53
|
@mock_webdriver.verify
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
+
def test_device_screen_size_when_device_screen_size_is_present
|
|
57
|
+
# 'deviceScreenSize' => '1080x2280' from get_android_capabilities; parsed into string-keyed hash
|
|
58
|
+
@mock_webdriver.expect(:capabilities, get_android_capabilities)
|
|
59
|
+
result = @android_metadata.device_screen_size
|
|
60
|
+
assert_equal({ 'width' => 1080, 'height' => 2280 }, result)
|
|
61
|
+
@mock_webdriver.verify
|
|
62
|
+
end
|
|
63
|
+
|
|
56
64
|
def test_get_system_bars
|
|
57
65
|
system_bars = {
|
|
58
66
|
'statusBar' => { 'height' => 83 },
|
data/specs/app_automate.rb
CHANGED
|
@@ -67,9 +67,12 @@ class TestAppAutomate < Minitest::Test
|
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def test_execute_percy_screenshot_end
|
|
70
|
-
|
|
70
|
+
# Wrap the stub return hashes in explicit braces. Under Ruby 3 keyword
|
|
71
|
+
# argument separation, a bare trailing hash is otherwise parsed as keyword
|
|
72
|
+
# args to Minitest's stub, raising ArgumentError.
|
|
73
|
+
@app_automate.stub(:execute_percy_screenshot_begin, { 'deviceName' => 'abc', 'osVersion' => '123' }) do
|
|
71
74
|
@app_automate.stub(:execute_percy_screenshot_end, nil) do
|
|
72
|
-
@app_automate.stub(:screenshot, 'link' => 'https://link') do
|
|
75
|
+
@app_automate.stub(:screenshot, { 'link' => 'https://link' }) do
|
|
73
76
|
@app_automate.screenshot('name')
|
|
74
77
|
end
|
|
75
78
|
end
|
data/specs/generic_providers.rb
CHANGED
|
@@ -256,7 +256,7 @@ class TestGenericProvider < Minitest::Test
|
|
|
256
256
|
end
|
|
257
257
|
|
|
258
258
|
@mock_webdriver.expect(:find_element, mock_element,
|
|
259
|
-
[
|
|
259
|
+
[:xpath, '//path/to/element'])
|
|
260
260
|
|
|
261
261
|
elements_array = []
|
|
262
262
|
xpaths = ['//path/to/element']
|
|
@@ -271,7 +271,7 @@ class TestGenericProvider < Minitest::Test
|
|
|
271
271
|
end
|
|
272
272
|
|
|
273
273
|
def test_get_regions_by_xpath_with_non_existing_element
|
|
274
|
-
@mock_webdriver.expect(:find_element, [
|
|
274
|
+
@mock_webdriver.expect(:find_element, [:xpath, '//path/to/element']) do
|
|
275
275
|
raise Appium::Core::Error::NoSuchElementError, 'Test error'
|
|
276
276
|
end
|
|
277
277
|
elements_array = []
|
|
@@ -309,7 +309,7 @@ class TestGenericProvider < Minitest::Test
|
|
|
309
309
|
mock_element.expect(:size, Selenium::WebDriver::Dimension.new(100, 200))
|
|
310
310
|
end
|
|
311
311
|
|
|
312
|
-
@mock_webdriver.expect(:find_element, [
|
|
312
|
+
@mock_webdriver.expect(:find_element, [:accessibility_id, 'id1']) do
|
|
313
313
|
raise Appium::Core::Error::NoSuchElementError, 'Test error'
|
|
314
314
|
end
|
|
315
315
|
|
data/specs/metadata_resolver.rb
CHANGED
|
@@ -20,6 +20,24 @@ class MetadataResolverTestCase < Minitest::Test
|
|
|
20
20
|
assert_instance_of(Percy::AndroidMetadata, resolved_metadata)
|
|
21
21
|
@mock_webdriver.verify
|
|
22
22
|
end
|
|
23
|
+
|
|
24
|
+
def test_android_resolved_with_PLATFORM_NAME
|
|
25
|
+
@mock_webdriver.expect(:capabilities, { 'PLATFORM_NAME' => 'Android' })
|
|
26
|
+
@mock_webdriver.expect(:capabilities, { 'PLATFORM_NAME' => 'Android' })
|
|
27
|
+
resolved_metadata = Percy::MetadataResolver.resolve(@mock_webdriver)
|
|
28
|
+
|
|
29
|
+
assert_instance_of(Percy::AndroidMetadata, resolved_metadata)
|
|
30
|
+
@mock_webdriver.verify
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_android_resolved_with_platform_name
|
|
34
|
+
@mock_webdriver.expect(:capabilities, { 'platform_name' => 'Android' })
|
|
35
|
+
@mock_webdriver.expect(:capabilities, { 'platform_name' => 'Android' })
|
|
36
|
+
resolved_metadata = Percy::MetadataResolver.resolve(@mock_webdriver)
|
|
37
|
+
|
|
38
|
+
assert_instance_of(Percy::AndroidMetadata, resolved_metadata)
|
|
39
|
+
@mock_webdriver.verify
|
|
40
|
+
end
|
|
23
41
|
|
|
24
42
|
def test_ios_resolved
|
|
25
43
|
@mock_webdriver.expect(:capabilities, { 'platformName' => 'iOS' })
|
|
@@ -29,6 +47,23 @@ class MetadataResolverTestCase < Minitest::Test
|
|
|
29
47
|
@mock_webdriver.verify
|
|
30
48
|
end
|
|
31
49
|
|
|
50
|
+
def test_ios_resolved_with_platform_name
|
|
51
|
+
@mock_webdriver.expect(:capabilities, { 'platform_name' => 'iOS' })
|
|
52
|
+
resolved_metadata = Percy::MetadataResolver.resolve(@mock_webdriver)
|
|
53
|
+
|
|
54
|
+
assert_instance_of(Percy::IOSMetadata, resolved_metadata)
|
|
55
|
+
@mock_webdriver.verify
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_platformName_precedence_over_platform_name
|
|
59
|
+
@mock_webdriver.expect(:capabilities, { 'platformName' => 'Android', 'platform_name' => 'iOS' })
|
|
60
|
+
@mock_webdriver.expect(:capabilities, { 'platformName' => 'Android', 'platform_name' => 'iOS' })
|
|
61
|
+
resolved_metadata = Percy::MetadataResolver.resolve(@mock_webdriver)
|
|
62
|
+
|
|
63
|
+
assert_instance_of(Percy::AndroidMetadata, resolved_metadata)
|
|
64
|
+
@mock_webdriver.verify
|
|
65
|
+
end
|
|
66
|
+
|
|
32
67
|
def test_unknown_platform_exception
|
|
33
68
|
@mock_webdriver.expect(:capabilities, { 'platformName' => 'Something Random' })
|
|
34
69
|
|
|
@@ -38,4 +73,14 @@ class MetadataResolverTestCase < Minitest::Test
|
|
|
38
73
|
|
|
39
74
|
@mock_webdriver.verify
|
|
40
75
|
end
|
|
76
|
+
|
|
77
|
+
def test_unknown_platform_exception_with_platform_name
|
|
78
|
+
@mock_webdriver.expect(:capabilities, { 'platform_name' => 'Something Random' })
|
|
79
|
+
|
|
80
|
+
assert_raises(PlatformNotSupported) do
|
|
81
|
+
Percy::MetadataResolver.resolve(@mock_webdriver)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
@mock_webdriver.verify
|
|
85
|
+
end
|
|
41
86
|
end
|
data/specs/screenshot.rb
CHANGED
|
@@ -383,7 +383,7 @@ class TestPercyScreenshot < Minitest::Test
|
|
|
383
383
|
})
|
|
384
384
|
end
|
|
385
385
|
driver.expect(:find_element, mock_element,
|
|
386
|
-
[
|
|
386
|
+
[:xpath, '//path/to/element'])
|
|
387
387
|
|
|
388
388
|
percy_screenshot(driver, 'screenshot 1', ignore_regions_xpaths: xpaths)
|
|
389
389
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: percy-appium-app
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.9.
|
|
4
|
+
version: 0.0.9.beta.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- BroswerStack
|
|
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
200
200
|
- !ruby/object:Gem::Version
|
|
201
201
|
version: '0'
|
|
202
202
|
requirements: []
|
|
203
|
-
rubygems_version: 3.6.
|
|
203
|
+
rubygems_version: 3.6.9
|
|
204
204
|
specification_version: 4
|
|
205
205
|
summary: Percy visual testing for Ruby Appium Mobile Apps
|
|
206
206
|
test_files: []
|