eyes_appium 6.4.2 → 6.4.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 983229f0027129770c7ba59b0adfbab752572a8b71fdb69ed2bb5ded0b785c52
4
- data.tar.gz: bcf0481f0fefef75c338cbd718c44041e64bf92d113d9399330a9bfbc218543d
3
+ metadata.gz: 5fcfa8562652c96b348aba30ea81631c693700dcdcb58a37374238bd5b4aae69
4
+ data.tar.gz: d7081f08a381fdf0f85013bac13078603b937263e3fd608e97bae977083dbcaa
5
5
  SHA512:
6
- metadata.gz: c99d3bf1a83202c37d727ec6f36a0ca3e8296ff7199157872c4290b6587db44107e68fadc42ef3c4229da117fb6a51b536f5c7e621d1a516025396d96f93ca5f
7
- data.tar.gz: 87a99f190a4a27e09e254aaddb349d0b700787ea7336f613cb59ea99a741ebeabe7bfb71f922a960bc647cfe58ca8788c6d54de210fb104bbcb3aa76d44da34f
6
+ metadata.gz: 220b47d8d64b3c1d0a0ce91121ea694619542ff66c534835553ed8847d8a4b4c064935e43a1004dd8631a46629f738a77a2a7cddab1a5c766a83068506e62a22
7
+ data.tar.gz: 6377c0649e4893e868f4c25fc85626fb869eb56e82d82d2fd87744941c4bec6489c81e0503fbc3f8940bf653001ec7eddcf28121b0902c832268dbd7d11210bc
data/CHANGELOG.md CHANGED
@@ -1,5 +1,106 @@
1
1
  # Changelog
2
2
 
3
+ ## [6.4.4](https://github.com/Applitools-Dev/sdk/compare/ruby/eyes_appium@6.4.3...ruby/eyes_appium@6.4.4) (2025-06-15)
4
+
5
+
6
+ ### Dependencies
7
+
8
+ * @applitools/dom-snapshot bumped to 4.11.22
9
+ #### Bug Fixes
10
+
11
+ * css media query group conditions | FLD-3151 ([#3023](https://github.com/Applitools-Dev/sdk/issues/3023)) ([56ec107](https://github.com/Applitools-Dev/sdk/commit/56ec107bcda6a5a330d19c278267d73de5d86d8b))
12
+
13
+
14
+
15
+ * @applitools/nml-client bumped to 1.9.5
16
+ #### Bug Fixes
17
+
18
+ * nml-client depends on core-base ([#2995](https://github.com/Applitools-Dev/sdk/issues/2995)) ([1f7cf69](https://github.com/Applitools-Dev/sdk/commit/1f7cf6930709a40a498dd1f525132648aa593af0))
19
+
20
+
21
+
22
+ * @applitools/tunnel-client bumped to 1.8.0
23
+ #### Features
24
+
25
+ * update build script to include individual zip creation ([#3008](https://github.com/Applitools-Dev/sdk/issues/3008)) ([46a0cfc](https://github.com/Applitools-Dev/sdk/commit/46a0cfcc472ab69384560095d90a7fa58b4b9186))
26
+
27
+
28
+
29
+ * @applitools/ufg-client bumped to 1.16.12
30
+ #### Bug Fixes
31
+
32
+ * remove safari-early-access browser version for js sdks | AD-10226 ([#3034](https://github.com/Applitools-Dev/sdk/issues/3034)) ([7ca09f5](https://github.com/Applitools-Dev/sdk/commit/7ca09f5c0c271570142058ea766533b86434dc2e))
33
+
34
+
35
+
36
+ * @applitools/core-base bumped to 1.25.4
37
+ #### Bug Fixes
38
+
39
+ * Differentiate Between Invalid and Missing API Key Errors ([6ac17d4](https://github.com/Applitools-Dev/sdk/commit/6ac17d40d7aff45b3de5c949dc7d4673b9739bfd))
40
+ * export issues for ts js with legacy solution ([#3016](https://github.com/Applitools-Dev/sdk/issues/3016)) ([a3a9daf](https://github.com/Applitools-Dev/sdk/commit/a3a9daf9c3361bb1f253499c1335a1434ec520d1))
41
+
42
+
43
+
44
+ * @applitools/core bumped to 4.40.0
45
+ #### Features
46
+
47
+ * update build script to include individual zip creation ([#3008](https://github.com/Applitools-Dev/sdk/issues/3008)) ([46a0cfc](https://github.com/Applitools-Dev/sdk/commit/46a0cfcc472ab69384560095d90a7fa58b4b9186))
48
+
49
+
50
+ #### Bug Fixes
51
+
52
+ * css media query group conditions | FLD-3151 ([#3023](https://github.com/Applitools-Dev/sdk/issues/3023)) ([56ec107](https://github.com/Applitools-Dev/sdk/commit/56ec107bcda6a5a330d19c278267d73de5d86d8b))
53
+ * export issues for ts js with legacy solution ([#3016](https://github.com/Applitools-Dev/sdk/issues/3016)) ([a3a9daf](https://github.com/Applitools-Dev/sdk/commit/a3a9daf9c3361bb1f253499c1335a1434ec520d1))
54
+ * extractLatestCommitInfo | FLD-3217 ([#3039](https://github.com/Applitools-Dev/sdk/issues/3039)) ([3f72a23](https://github.com/Applitools-Dev/sdk/commit/3f72a230fa0166046ea85ae004cfb544de86e628))
55
+ * handle error when sending started message in tunnel manager server ([#3019](https://github.com/Applitools-Dev/sdk/issues/3019)) ([2cdaad8](https://github.com/Applitools-Dev/sdk/commit/2cdaad896fd679187449b69abe529b006f6255ee))
56
+
57
+
58
+
59
+ * @applitools/ec-client bumped to 1.10.15
60
+
61
+ * eyes_core bumped to 6.7.2
62
+
63
+ * @applitools/test-server bumped to 1.2.3
64
+ #### Bug Fixes
65
+
66
+ * basic auth protected resources | FLD-2761 | FMRI-120 ([#2444](https://github.com/Applitools-Dev/sdk/issues/2444)) ([b48cf49](https://github.com/Applitools-Dev/sdk/commit/b48cf49dec50bbf1ed2ba111608a48cf09962565))
67
+ * export issues for ts js with legacy solution ([#3016](https://github.com/Applitools-Dev/sdk/issues/3016)) ([a3a9daf](https://github.com/Applitools-Dev/sdk/commit/a3a9daf9c3361bb1f253499c1335a1434ec520d1))
68
+ * storybook navigation timeouts ([#2701](https://github.com/Applitools-Dev/sdk/issues/2701)) ([64e3a40](https://github.com/Applitools-Dev/sdk/commit/64e3a40a524ae76ec457ae9c2d1170fbaea5e982))
69
+
70
+
71
+
72
+ * @applitools/req bumped to 1.7.13
73
+
74
+ * @applitools/dom-capture bumped to 11.5.6
75
+
76
+ * @applitools/spec-driver-webdriver bumped to 1.2.6
77
+
78
+ * @applitools/screenshoter bumped to 3.11.5
79
+
80
+ * eyes_universal bumped to 4.40.0
81
+
82
+ * eyes_selenium bumped to 6.9.2
83
+ #### Bug Fixes
84
+
85
+ * remove safari-early-access browser version (bindings) | AD-10226 ([#3033](https://github.com/Applitools-Dev/sdk/issues/3033)) ([108b805](https://github.com/Applitools-Dev/sdk/commit/108b8051986609fc701a20cee8e39cefd433c19b))
86
+
87
+
88
+
89
+
90
+ ## [6.4.3](https://github.com/Applitools-Dev/sdk/compare/ruby/eyes_appium@6.4.2...ruby/eyes_appium@6.4.3) (2025-05-22)
91
+
92
+
93
+ ### Dependencies
94
+
95
+ * eyes_universal bumped to 4.38.0
96
+ #### Features
97
+
98
+ * adding the mac-arm64 binary ([#2975](https://github.com/Applitools-Dev/sdk/issues/2975)) ([95d647f](https://github.com/Applitools-Dev/sdk/commit/95d647ff4a451309d985a786f7cec544d926f0e5))
99
+ * eyes_core bumped to 6.7.1
100
+
101
+ * eyes_selenium bumped to 6.9.1
102
+
103
+
3
104
  ## [6.4.2](https://github.com/Applitools-Dev/sdk/compare/ruby/eyes_appium@6.4.1...ruby/eyes_appium@6.4.2) (2025-04-17)
4
105
 
5
106
 
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ - -
2
+ SDK LICENSE AGREEMENT
3
+ IMPORTANT - PLEASE READ CAREFULLY THE TERMS OF THIS LICENSE AGREEMENT ("AGREEMENT"). BY INSTALLING, ACCESSING AND/OR USING THE SOFTWARE (AS DEFINED BELOW), YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT YOU, OR THE COMPANY YOU REPRESENT, ("YOU" OR "LICENSEE") ARE ENTERING INTO A LEGAL AGREEMENT WITH APPLITOOLS LTD. AND ITS AFFILIATES ("APPLITOOLS"), AND HAVE UNDERSTOOD AND AGREE TO COMPLY WITH, AND BE LEGALLY BOUND BY, THE TERMS AND CONDITIONS OF THIS AGREEMENT. YOU HEREBY WAIVE ANY RIGHTS OR REQUIREMENTS UNDER ANY LAWS OR REGULATIONS IN ANY JURISDICTION WHICH REQUIRE AN ORIGINAL (NON-ELECTRONIC) SIGNATURE OR DELIVERY OR RETENTION OF NON-ELECTRONIC RECORDS, TO THE EXTENT PERMITTED UNDER APPLICABLE LAW.
4
+ THE SOFTWARE MAY BE USED SOLELY FOR YOUR PERSONAL, NON-COMMERCIAL PURPOSES. FOR COMMERCIAL PURPOSES PLEASE CONTACT THE REGIONAL APPLITOOLS BUSINESS REPRESENTATIVE.
5
+ 1. Definitions. For purposes of this Agreement, the following capitalized terms shall have the following meaning:
6
+ 1. "Documentation" means the user's guides and technical manuals delivered by Applitools to Licensee.
7
+ 2. "Feedback" means suggestions, comments or feedback (whether orally or in writing) with respect to the Software.
8
+ 3. "Intellectual Property Rights" means all intangible legal rights, titles and interests evidenced by or embodied in all: (i) inventions (regardless of patentability and whether or not reduced to practice), improvements thereto, patents, patent applications, patent disclosures, together with all reissuances, continuations, continuations in part, revisions, extensions and reexaminations thereof; (ii) trademarks, service marks, trade dress, logos, trade names, corporate names, together with translations, adaptations, derivations and combinations thereof, including goodwill associated therewith, and applications, registrations, and renewals in connection therewith; (iii) any work of authorship, regardless of copyrightable, copyrightable works, copyrights (including moral rights), and applications, registrations and renewals in connection therewith; (iv) mask works and applications, registrations and renewals in connection therewith; (v) trade secrets and Confidential Information; and (vi) other proprietary rights and any other similar rights, in each case on a worldwide basis, and copies and tangible embodiments thereof, in whatever form or medium.
9
+ 4. "License" means the right to use the Software pursuant to Section ‎2.1 to this Agreement.
10
+ 5. "Software" means Applitools' software development kit software in object or source code version, Documentation and any updates and upgrade thereto (to the extent delivered).
11
+ 1. License
12
+ 1. Grant of License. Subject to the terms and conditions of this Agreement, Applitools grants You, during the Term, a personal, non-exclusive, non-sublicensable, non-transferable, revocable license to: (i) use the Software solely for Your own personal (non-commercial) use and (ii) use and display Applitools' Marks solely for the purpose of publicizing or advertising that You are using the Software.
13
+ 2. Documentation. Applitools may make available Documentation to Licensee for Licensee to use solely in connection with Licensee's use of the Software during the term of this Agreement. Licensee may print or copy the Documentation as needed for its own purposes provided that all copyright notices are included therein. The Documentation shall be considered the Confidential Information of Applitools.
14
+ 1. Reservation of Rights; Use Restrictions. Other than the rights explicitly granted in this Agreement, Licensee shall have no other rights, express or implied, in the Software. Without limiting the generality of the foregoing, Licensee agrees and undertakes not to: (i) allow any third party to use the Software in any manner, including but not limited to, sell, lease, sublicense or distribute the Software, or any part thereof; (ii) modify, revise, or alter the Software or reverse engineer, decompile, disassemble or otherwise reduce to human-perceivable form the Software's source code; (iii) copy or allow copies of the Software to be made; (iv) remove, alter or obscure any proprietary notice or identification, including copyright, trademark, patent or other notices, contained in or displayed on or via the Software; (v) use the Software to violate any applicable laws, rules or regulations, or for any unlawful, harmful, irresponsible, or inappropriate purpose, or in any manner that breaches this Agreement, and/or (vi) represent that it possesses any proprietary interest in the Software.
15
+ 1. Third Party Software. Licensee acknowledges and agrees that any third party software ("Third Party Software") that provided with the Software is provided under the terms of the license attached/linked thereto or, if no such license is attached, such Third Party Software is provided for free and on "AS IS" basis. Applitools is not liable for any losses or damages which may occur resulting from the use of any Third Party Software. Applitools does not possess any proprietary interest in such Third Party Software.
16
+ 1. Open Source Licenses. The Software includes certain open source code software and materials (as shall be listed in the documentation of the Software) ("Open Source Software") that are subject to their respective open source licenses ("Open Source Licenses"). Such Open Source Licenses contain a list of conditions with respect to warranty, copyright policy and other provisions. By executing this Agreement, Licensee undertakes to strictly comply with the terms and condition of the Open Source Licenses, as may be amended from time to time. In order to comply with the Open Source Licenses, Licensee shall read the respective licenses or notices, such list of Open Source Licenses may be amended from time to time by Applitools, at its sole discretion. In the event of any inconsistencies or conflicting provisions between the provisions of the Open Source Licenses and the provisions of this Agreement, the provisions of the Open Source Licenses shall prevail. Without derogating from the generality of the foregoing, it is clarified that any Open Source Software is provided on an "AS IS" basis, without indemnity or warranty of any kind, whether express or implied. For clarity, the representations and warranties set forth in Section ‎4 hereunder shall not apply to any Open Source Software.
17
+ 1. Title & Ownership. APPLITOOLS DOES NOT SELL OR TRANSFER TITLE IN THE SOFTWARE, OR ANY PART THEREOF, TO LICENSEE. The Documentation, Software (excluding any Open Source Software and Third Party Software therein which are owned by their respective licensors) and/or any copies thereof, including without limitation any derivative works made (regardless of whether such derivative works were made and/or developed pursuant to the request and/or specifications of Licensee, and irrespective of any support and/or assistance Applitools may, will or had received from Licensee, or any third party on its behalf, with respect thereto), as well as any updates or upgrades thereto, if provided to Applitools pursuant to this Agreement, shall remain Applitools' sole and exclusive property. All Intellectual Property Rights evidenced by or embodied in and/or attached/connected/related to the Software, or part thereof, are and shall be owned solely and exclusively by Applitools. Nothing in this Agreement shall constitute a waiver of Applitools' Intellectual Property Rights under any law, or be in any way construed or interpreted as such. It is further agreed that to the extent Licensee provides Applitools with Feedback, Licensee acknowledges that any and all rights, including Intellectual Property Rights in such Feedback shall belong exclusively to Applitools and Licensee hereby irrevocably and unconditionally transfers and assigns to Applitools all intellectual property rights in such Feedback and waives any and all moral rights that Licensee may have in respect thereto. It is further understood that use of Feedback, if any, may be made by Applitools at its sole discretion, and that Applitools in no way shall be obliged to make use of any kind of the Feedback or part thereof.
18
+ 1. Warranty. Applitools warrants that to its knowledge it has the right to grant the license under this Agreement. Applitools' sole liability for any breach of this warranty or any other warranty under this Agreement shall be, at Applitools' sole discretion: (i) to replace or repair the Software or the applicable portion thereof; or (ii) to terminate this Agreement.
19
+ 2. Warranty Exclusions. The warranties set forth in Section ‎4 are contingent upon Licensee's proper use of the Software, and shall not apply to damage caused by abuse, misuse, alteration, neglect or unauthorized repair or installation, or by the use or attempted use of Software other than that supplied and supported by Applitools. Applitools will use reasonable commercial efforts to repair or replace the Software or the applicable portion thereof, pursuant to the foregoing warranty within thirty (30) days of being so notified.
20
+ 1. Warranty Disclaimers. AS BETWEEN LICENSEE AND APPLITOOLS, EXCEPT AS SET IN SECTION ‎4, THE SOFTWARE IS PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS WITHOUT WARRANTIES OF ANY KIND INCLUDING, WITHOUT LIMITATION, REPRESENTATIONS, WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR INTENDED OR PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, THAT THE SOFTWARE WILL MEET LICENSEE'S REQUIREMENTS OR EXPECTATIONS OR WILL ACHIEVE ANY SPECIFIC RESULTS AND THOSE ARISING BY STATUTE OR FROM A COURSE OF DEALING OR USAGE OF TRADE. Applicable law may not allow the exclusion of certain warranties, so to that extent such exclusions may not apply.
21
+ 1. High Risk Activities. You acknowledge that the Software is not fault tolerant and is not designed, manufactured, or intended for use or resale as on-line control equipment in hazardous or high risk environments and activities requiring fail-safe performance (such as in the operation of nuclear facilities, aircraft navigation or communication systems, air traffic control, direct life support machines and/or devices, or weapons systems) in which the failure of the Software could lead directly to death, personal injury, or severe physical or environmental damage, and You agree not to use or allow the use of the Software or any portion thereof for, or in connection with, any such environment or activity.
22
+ 1. Indemnify. You agree that Applitools shall have no liability whatsoever for any use made of the Software by You or any third party. You hereby agree to defend, indemnify and hold harmless Applitools and its affiliates and their respective officers, directors, agents and employees from any and all claims, damages, liabilities, costs, and expenses (including attorney's fees) arising from claims related to Your use of the Software as well as from Your failure to comply with this Agreement.
23
+ 1. Limitation of Liability. UNDER NO CIRCUMSTANCES SHALL APPLITOOLS AND/OR ITS AFFILIATES BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR FOR ANY LOSS OF DATA, REVENUE, BUSINESS OR REPUTATION, THAT ARISES UNDER OR IN CONNECTION WITH THIS AGREEMENT, OR THAT RESULTS FROM THE USE OF, OR THE INABILITY TO USE, THE SOFTWARE. APPLITOOLS'S TOTAL AGGREGATE LIABILITY FOR ANY AND ALL DIRECT DAMAGES AND LOSSES THAT ARISE UNDER OR IN CONNECTION WITH THIS AGREEMENT SHALL NOT IN ANY CIRCUMSTANCE EXCEED THE AMOUNT OF 100.00 (ONE HUNDRED) UNITED STATES DOLLARS. THE FOREGOING LIMITATIONS AND EXCLUSIONS IN THIS SECTION ‎7 SHALL APPLY: (I) EVEN IF APPLITOOLS HAS BEEN ADVISED OF THE POSSIBILITY OF ANY DAMAGES OR LOSSES; (II) EVEN IF ANY REMEDY SET FORTH HEREIN FAILS OF ITS ESSENTIAL PURPOSE; AND (III) REGARDLESS OF THE BASIS OR THEORY OF LIABILITY.
24
+ 1. Export Laws. Licensee agrees to comply fully with all U.S., EU, Israeli, and all applicable export laws and regulations to ensure that neither the Software nor any technical data related thereto are exported or re-exported directly or indirectly in violation of, or used for any purposes prohibited by, such laws and regulations. For clarity, and without derogating from Section ‎11 below, in case of any change of any applicable law, policy or regulation, which might affect Applitools' business, Applitools will have the right to terminate this Agreement and the license granted hereunder and the Licensee shall have no claims regarding such termination.
25
+ 1. Term and Termination. This Agreement shall continue until terminated as set forth in this section (the "Term"). You may terminate this Agreement at any time by removing the Software from Your system and destroying all copies of the Software and Documentation relating to the Software. Unauthorized copying of the Software or otherwise failing to comply with this Agreement will result in automatic immediate termination of this Agreement and will make available to Applitools legal remedies. Applitools reserves the right to terminate this Agreement and the License at any time and without notice. Upon termination of this Agreement, the License will terminate and You: (i) will cease any and all rights to use the Software, and (ii) will remove the Software from all hard drives, networks and other storage media and destroy all copies of the Software in your possession or under your control. The provisions of Sections ‎2.3, ‎2.4, ‎2.5, ‎6, ‎7, ‎8, ‎9, 10, ‎11 and ‎12 shall survive the termination, expiration or other ending of this Agreement.
26
+ 1. Miscellaneous. This Agreement represents the complete agreement concerning the Software between You and Applitools and supersedes all prior agreements and representations between You and Applitools. If any provision of this Agreement is held to be unenforceable for any reason, such provision shall be reformed only to the extent necessary to make it enforceable. Any waiver of any provision of this Agreement will be effective only if in writing and signed by Applitools. This Agreement is personal to You and may not be assigned or transferred for any reason whatsoever without the consent of Applitools and any action or conduct in violation of the foregoing shall be void and without effect. Applitools expressly reserves the right to assign this Agreement and to delegate any of its obligations hereunder. This Agreement are governed by and construed under the laws of the State of Israel, excluding its conflicts of law rules. You expressly agree that the exclusive jurisdiction for any claim or action arising out of or relating to this Agreement shall be the courts located in Tel Aviv, Israel, and You further agree and submit to the exercise of personal jurisdiction of such courts for the purpose of litigating any such claim or action. In any action or proceeding to enforce rights under this Agreement, the prevailing party shall be entitled to recover costs and attorneys' fees.
data/README.md ADDED
@@ -0,0 +1,370 @@
1
+ # Applitools Eyes Appium SDK for Ruby
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/eyes_appium.svg)](https://badge.fury.io/rb/eyes_appium)
4
+
5
+ The Applitools Eyes Appium SDK for Ruby extends visual testing capabilities to mobile applications using Appium. This SDK enables automated visual testing for both native mobile apps and hybrid applications across iOS and Android platforms.
6
+
7
+ ## Table of Contents
8
+
9
+ 1. [Overview](#overview)
10
+ 2. [Installation](#installation)
11
+ 3. [Key Components](#key-components)
12
+ - [Eyes Class](#eyes-class)
13
+ - [Target Class](#target-class)
14
+ - [Driver Class](#driver-class)
15
+ - [Screenshot Classes](#screenshot-classes)
16
+ - [Region Providers](#region-providers)
17
+ 4. [Basic Usage](#basic-usage)
18
+ - [Initializing Eyes](#initializing-eyes)
19
+ - [Opening a Test](#opening-a-test)
20
+ - [Capturing Screenshots](#capturing-screenshots)
21
+ - [Configuring Match Settings](#configuring-match-settings)
22
+ - [Closing a Test](#closing-a-test)
23
+ 5. [Advanced Features](#advanced-features)
24
+ - [Handling Native and WebView Contexts](#handling-native-and-webview-contexts)
25
+ - [Region-based Testing](#region-based-testing)
26
+ - [Working with Different Mobile Platforms](#working-with-different-mobile-platforms)
27
+ - [Mobile Native Grid (MNG) Integration](#mobile-native-grid-integration)
28
+ 6. [Best Practices](#best-practices)
29
+ 7. [Troubleshooting](#troubleshooting)
30
+ 8. [FAQ](#faq)
31
+ 9. [Documentation](#documentation)
32
+ 10. [API Reference](#api-reference)
33
+
34
+ ## Overview
35
+
36
+ The Applitools Eyes Appium SDK for Ruby extends the Eyes Selenium SDK to provide visual testing capabilities for mobile applications using Appium. It seamlessly integrates with your existing Appium test automation to add AI-powered visual validations.
37
+
38
+ ### Key Features
39
+
40
+ - **Cross-Platform Support**: Works with both iOS and Android applications
41
+ - **Native & Hybrid Apps**: Supports pure native apps and hybrid apps with WebViews
42
+ - **Automatic Platform Detection**: Intelligently detects the platform and adjusts behavior accordingly
43
+ - **Region-Based Testing**: Target specific UI elements for precise visual validation
44
+ - **WebView Context Handling**: Seamlessly switch between native and WebView contexts
45
+ - **Mobile Native Grid Integration**: Leverage cloud-based device testing for scalability
46
+
47
+ The SDK handles platform-specific complexities such as status bar heights, device pixel ratios, and screenshot capture mechanisms, allowing you to focus on writing tests rather than dealing with mobile-specific implementation details.
48
+
49
+ ## Installation
50
+
51
+ Add the gem to your Gemfile:
52
+
53
+ ```ruby
54
+ gem 'eyes_appium'
55
+ ```
56
+
57
+ Or install it directly:
58
+
59
+ ```bash
60
+ gem install eyes_appium
61
+ ```
62
+
63
+ ### Dependencies
64
+
65
+ The Eyes Appium SDK has the following dependencies:
66
+ - `eyes_selenium` - Core Applitools functionality for Selenium-based testing
67
+ - `appium_lib` (>= 10.6.0) - Appium Ruby client
68
+ - `selenium-webdriver` (>= 3, < 4.30) - WebDriver implementation
69
+
70
+ > **Dependency Update:** The SDK has been optimized to reduce mandatory dependencies. WebDriver-related dependencies are now more flexible to improve compatibility across different environments.
71
+
72
+ ## Key Components
73
+
74
+ ### Eyes Class
75
+
76
+ `Applitools::Appium::Eyes` is the main class that provides the core functionality for visual testing of mobile applications. It extends `Applitools::Selenium::SeleniumEyes` and customizes the behavior for mobile applications.
77
+
78
+ Key features:
79
+ - Detects the platform (iOS or Android) automatically
80
+ - Provides native app testing capabilities
81
+ - Handles status bar height and device pixel ratio
82
+ - Manages different region providers based on the platform
83
+
84
+ ### Target Class
85
+
86
+ `Applitools::Appium::Target` extends the Selenium Target class to handle mobile-specific targeting. It provides methods to:
87
+ - Target specific elements in mobile applications
88
+ - Handle region-based checks
89
+ - Support WebView contexts
90
+ - Define areas to ignore, floating regions, and layout regions
91
+
92
+ ### Driver Class
93
+
94
+ `Applitools::Appium::Driver` extends `Applitools::Selenium::Driver` to integrate with Appium's driver. It wraps the Appium driver to provide additional functionality for visual testing.
95
+
96
+ ### Screenshot Handling
97
+
98
+ The SDK includes platform-specific screenshot handling for:
99
+ - iOS devices and simulators
100
+ - Android devices and emulators
101
+
102
+ These handle platform-specific aspects of screenshots, such as status bar height and device pixel ratio.
103
+
104
+ ## Basic Usage
105
+
106
+ ### Initializing Eyes
107
+
108
+ ```ruby
109
+ require 'eyes_appium'
110
+
111
+ # Initialize the Eyes SDK
112
+ eyes = Applitools::Appium::Eyes.new
113
+ eyes.api_key = 'YOUR_API_KEY'
114
+
115
+ # Optional: Configure logging
116
+ eyes.log_handler = Logger.new(STDOUT)
117
+ ```
118
+
119
+ ### Opening a Test
120
+
121
+ ```ruby
122
+ # Define Appium capabilities
123
+ caps = {
124
+ deviceName: 'iPhone 12',
125
+ platformName: 'iOS',
126
+ platformVersion: '14.5',
127
+ app: '/path/to/your/app.ipa',
128
+ automationName: 'XCUITest'
129
+ }
130
+
131
+ # Initialize Appium driver
132
+ appium_opts = {
133
+ server_url: 'http://127.0.0.1:4723/wd/hub'
134
+ }
135
+ driver = Appium::Driver.new({ caps: caps, appium_lib: appium_opts }, true)
136
+ driver.start_driver
137
+
138
+ # Start the test
139
+ eyes.open(
140
+ app_name: 'My Mobile App',
141
+ test_name: 'Login Screen Test',
142
+ driver: driver
143
+ )
144
+ ```
145
+
146
+ ### Capturing Screenshots
147
+
148
+ #### Full Window Check
149
+
150
+ ```ruby
151
+ # Check the entire screen
152
+ eyes.check_window('Home Screen')
153
+ ```
154
+
155
+ #### Region Check
156
+
157
+ ```ruby
158
+ # Check a specific element by accessibility ID
159
+ eyes.check('Profile Button', Applitools::Appium::Target.region(accessibility_id: 'profile_button'))
160
+
161
+ # Check a specific element by XPath
162
+ eyes.check('Login Form', Applitools::Appium::Target.region(xpath: '//android.widget.EditText'))
163
+ ```
164
+
165
+ ### Configuring Match Settings
166
+
167
+ ```ruby
168
+ # Set the match level
169
+ eyes.match_level = Applitools::MatchLevel::LAYOUT
170
+
171
+ # Configure layout regions
172
+ target = Applitools::Appium::Target.window.layout(id: 'dynamic_content')
173
+ eyes.check('With Layout Region', target)
174
+
175
+ # Ignore regions
176
+ target = Applitools::Appium::Target.window.ignore(id: 'timestamp')
177
+ eyes.check('Ignoring Timestamp', target)
178
+ ```
179
+
180
+ ### Closing a Test
181
+
182
+ ```ruby
183
+ # Complete the test
184
+ results = eyes.close(false)
185
+ puts "Test results: #{results.to_s}"
186
+
187
+ # Always include in a ensure block
188
+ ensure
189
+ # If the test was not closed, abort it
190
+ eyes.abort_if_not_closed
191
+
192
+ # Close the Appium driver
193
+ driver.driver_quit
194
+ ```
195
+
196
+ ## Advanced Features
197
+
198
+ ### Handling Native and WebView Contexts
199
+
200
+ The SDK provides seamless handling of both native app contexts and WebView contexts:
201
+
202
+ ```ruby
203
+ # Switch to WebView context
204
+ webview_contexts = driver.available_contexts
205
+ driver.set_context(webview_contexts.find { |c| c.include?('WEBVIEW') })
206
+
207
+ # Check WebView content
208
+ eyes.check('WebView Content', Applitools::Appium::Target.window.webview)
209
+
210
+ # Switch back to native context
211
+ driver.set_context('NATIVE_APP')
212
+
213
+ # Check native content
214
+ eyes.check_window('Native Content')
215
+ ```
216
+
217
+ ### Region-based Testing
218
+
219
+ For more precise testing, you can target specific UI elements:
220
+
221
+ ```ruby
222
+ # Check a specific element by its ID
223
+ eyes.check('Username Field', Applitools::Appium::Target.region(id: 'username_field'))
224
+
225
+ # Check an element with surrounding padding
226
+ eyes.check(
227
+ 'Password Field With Padding',
228
+ Applitools::Appium::Target.region(
229
+ accessibility_id: 'password_field',
230
+ padding: { top: 10, right: 20, bottom: 10, left: 20 }
231
+ )
232
+ )
233
+ ```
234
+
235
+ ## Best Practices
236
+
237
+ 1. **Proper Test Cleanup**
238
+ - Always use `eyes.abort_if_not_closed` in the `ensure` block to ensure proper cleanup even if tests fail.
239
+ - Close the Appium driver in the `ensure` block to prevent resource leaks.
240
+
241
+ 2. **Efficient Region Selection**
242
+ - Target specific elements when possible instead of the entire window to make tests more focused and faster.
243
+ - Use accessibility IDs for element identification when possible (more robust than XPaths).
244
+
245
+ 3. **Handle Device Rotation**
246
+ - If your app supports both portrait and landscape modes, test in both orientations.
247
+ - Reset orientation between tests to ensure consistent starting conditions.
248
+
249
+ 4. **Manage WebView vs Native Context**
250
+ - Be explicit about context switching when testing hybrid apps.
251
+ - Use `check_window` for native contexts and `check` with `Target.window.webview()` for WebView contexts.
252
+
253
+ 5. **Device-Specific Testing**
254
+ - Test on multiple device types and OS versions to ensure compatibility.
255
+ - Use device-specific configurations when necessary.
256
+
257
+ 6. **Error Handling**
258
+ - Use proper exception handling to catch and log Appium and Eyes exceptions separately.
259
+ - Consider retry mechanisms for flaky mobile interactions.
260
+
261
+ ## Troubleshooting
262
+
263
+ ### Common Issues
264
+
265
+ 1. **Screenshots Are Offset or Incorrectly Sized**
266
+ - Issue: Status bar height or device pixel ratio might not be correctly detected.
267
+ - Solution: Use `eyes.status_bar_height = custom_height` to manually set the status bar height.
268
+
269
+ 2. **Element Not Found During Checks**
270
+ - Issue: Element locators might be platform-specific or timing-related.
271
+ - Solution: Add implicit waits or explicit waits before performing checks.
272
+
273
+ 3. **Context Switching Problems**
274
+ - Issue: Cannot interact with elements after switching contexts.
275
+ - Solution: Verify the available contexts and ensure proper switching back to the native context.
276
+
277
+ 4. **Test Timeout Issues**
278
+ - Issue: Tests time out during visual comparison.
279
+ - Solution: Increase the match timeout using `eyes.match_timeout = 10000` (in milliseconds).
280
+
281
+ 5. **Differences in iOS vs Android Results**
282
+ - Issue: Tests pass on one platform but fail on another.
283
+ - Solution: Use platform-specific baselines and matching settings.
284
+
285
+ ### Debugging Tips
286
+
287
+ 1. Enable verbose logging:
288
+ ```ruby
289
+ eyes.log_handler = Logger.new(STDOUT)
290
+ eyes.log_handler.level = Logger::DEBUG
291
+ ```
292
+
293
+ 2. Use visual debugger by setting:
294
+ ```ruby
295
+ eyes.save_debug_screenshots = true
296
+ ```
297
+
298
+ 3. Check Appium server logs for connection or driver-related issues.
299
+
300
+ 4. Verify the device/emulator configuration matches your test capabilities.
301
+
302
+ ## FAQ
303
+
304
+ **Q: Can I use Eyes Appium SDK with cloud-based Appium providers like Sauce Labs or BrowserStack?**
305
+ A: Yes, you can use the Eyes Appium SDK with any Appium server, including cloud-based services. Just configure the appropriate server URL and capabilities.
306
+
307
+ **Q: How do I handle dynamic content in my mobile app?**
308
+ A: Use `ignore` regions for content that changes, or use the `layout` match level for areas with dynamic content but consistent structure.
309
+
310
+ **Q: Can I test scrollable content in my mobile app?**
311
+ A: Yes, but you'll need to combine Appium's scrolling capabilities with Eyes' checking. Scroll to each position and perform a check, or use the `fully` option with caution.
312
+
313
+ **Q: Does Eyes Appium SDK work with real devices, emulators, or both?**
314
+ A: The SDK works with both real devices and emulators/simulators. Real devices are recommended for more accurate visual testing.
315
+
316
+ **Q: How do I handle different screen sizes and resolutions?**
317
+ A: Use Applitools' responsive testing features, and consider using device-specific baselines if necessary.
318
+
319
+ **Q: Can I use features like Visual Grid with mobile testing?**
320
+ A: Yes, for hybrid apps with WebViews, you can use the Ultrafast Grid for the web portions. For native apps, use the Mobile Native Grid (MNG).
321
+
322
+ ## Documentation
323
+
324
+ For comprehensive guides and tutorials on mobile testing with Applitools, please refer to:
325
+
326
+ - **[Appium Ruby Native Apps Documentation](https://applitools.com/tutorials/sdks/appium-ruby-native/quickstart)** - Learn how to test native mobile applications using Appium and Ruby
327
+
328
+ - **[Appium Ruby Mobile Web Documentation](https://applitools.com/tutorials/sdks/appium-ruby-web/quickstart)** - Learn how to test web applications on mobile browsers using Appium and Ruby
329
+
330
+ For API documentation and additional resources, visit:
331
+ - [Applitools Documentation Portal](https://applitools.com/docs)
332
+ - [Applitools SDK API Reference](https://applitools.com/docs/api/eyes-sdk/index-gen/classindex-ruby.html)
333
+
334
+ ## API Reference
335
+
336
+ ### `Applitools::Appium::Eyes`
337
+
338
+ Core methods:
339
+ - `open(options)` - Starts a test session
340
+ - `check(tag, target)` - Performs a checkpoint
341
+ - `check_window(tag = nil, match_timeout = USE_DEFAULT_MATCH_TIMEOUT)` - Performs a full window checkpoint
342
+ - `check_region(*args)` - Performs a region checkpoint
343
+ - `close(throw_exception = true)` - Closes a test session
344
+ - `abort_if_not_closed` - Aborts an open test
345
+
346
+ Configuration methods:
347
+ - `use_system_screenshot(value = true)` - Controls if system screenshots are used
348
+
349
+ Static methods:
350
+ - `set_mobile_capabilities(caps, api_key = nil, server_url = nil, proxy = nil)` - Sets up MNG capabilities
351
+ - `set_nmg_capabilities` - Alias for `set_mobile_capabilities`
352
+
353
+ ### `Applitools::Appium::Target`
354
+
355
+ - `window` - Creates a target for the entire window
356
+ - `region(*args)` - Creates a target for a specific region
357
+ - `ignore(*args)` - Defines regions to ignore
358
+ - `floating(*args)` - Defines floating regions
359
+ - `layout(*args)` - Defines layout regions
360
+ - `strict(*args)` - Defines strict regions
361
+ - `content(*args)` - Defines content regions
362
+ - `accessibility(*args)` - Defines accessibility regions
363
+ - `timeout(timeout_ms)` - Sets the match timeout
364
+ - `webview(value = true)` - Specifies WebView context for the check
365
+
366
+ ## License
367
+
368
+ This SDK is distributed under the Applitools SDK License Agreement. See the [LICENSE](LICENSE) file for more details.
369
+
370
+ **Important:** This SDK may be used solely for your personal, non-commercial purposes. For commercial use, please contact your Applitools representative or visit [applitools.com](https://applitools.com) to obtain a commercial license.
data/eyes_appium.gemspec CHANGED
@@ -13,11 +13,13 @@ Gem::Specification.new do |spec|
13
13
  spec.description = 'Appium support for Applitools Ruby SDK'
14
14
  spec.summary = 'Applitools Ruby Appium SDK'
15
15
  spec.homepage = 'https://www.applitools.com'
16
- spec.license = 'Applitools'
16
+ spec.license = 'Proprietary'
17
17
 
18
18
  spec.files = `git ls-files lib/applitools/appium`.split($RS) + [
19
19
  'lib/eyes_appium.rb',
20
20
  'lib/applitools/eyes_appium/version.rb',
21
+ 'LICENSE',
22
+ 'README.md',
21
23
  'CHANGELOG.md',
22
24
  'eyes_appium.gemspec',
23
25
  'Rakefile',
@@ -25,7 +27,7 @@ Gem::Specification.new do |spec|
25
27
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
28
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
27
29
  spec.require_paths = %w(lib)
28
- spec.add_dependency 'eyes_selenium', "= 6.9.0"
30
+ spec.add_dependency 'eyes_selenium', "= 6.9.2"
29
31
  spec.add_dependency 'appium_lib', '>= 10.6.0'
30
32
  # TODO: remove after appium_lib fix issue on their side at https://github.com/appium/ruby_lib_core/issues/602
31
33
  spec.add_dependency 'selenium-webdriver', ['>= 3', '< 4.30']
@@ -1,30 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # Empty placeholder for backward compatibility
4
+ # This class has been removed as its functionality is now handled by the Universal SDK
5
+
6
+ require 'applitools/core/eyes_screenshot'
7
+
3
8
  module Applitools
4
9
  module Appium
10
+ # Empty placeholder class to maintain backward compatibility
5
11
  class Screenshot < Applitools::EyesScreenshot
6
-
7
- attr_reader :status_bar_height, :device_pixel_ratio
8
-
9
- def initialize(*args)
10
- options = Applitools::Utils.extract_options!(args)
11
- @status_bar_height = options[:status_bar_height] || 0
12
- @device_pixel_ratio = options[:device_pixel_ratio] || 1
13
- super
14
- end
15
-
16
- def sub_screenshot(region, _coordinate_type, _throw_if_clipped = false, _force_nil_if_clipped = false)
17
- self.class.new(
18
- Applitools::Screenshot.from_image(
19
- image.crop(region.x, region.y, region.width, region.height)
20
- )
21
- )
22
- end
23
-
24
- def convert_location(location, _from, _to)
25
- raise 'Applitools::Appium::Screenshot is an abstract class.' \
26
- ' You should implement :convert_location method in a descendant class.'
27
- end
28
12
  end
29
13
  end
30
- end
14
+ end
@@ -21,7 +21,7 @@ module Applitools
21
21
  value = { type: args[0], selector: args[1] } if value.nil?
22
22
  # value = value[:selector] if value.is_a?(Hash) && (value[:type].to_s === 'id') && !is_a?(Applitools::Appium::Target)
23
23
  self.region_to_check = value
24
- self.coordinate_type = Applitools::EyesScreenshot::COORDINATE_TYPES[:context_relative]
24
+ self.coordinate_type = :context_relative
25
25
  options[:timeout] = nil
26
26
  reset_ignore
27
27
  reset_floating
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Applitools
4
4
  module EyesAppium
5
- VERSION = '6.4.2'.freeze
5
+ VERSION = '6.4.4'.freeze
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eyes_appium
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.4.2
4
+ version: 6.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Applitools Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-17 00:00:00.000000000 Z
11
+ date: 2025-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eyes_selenium
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 6.9.0
19
+ version: 6.9.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 6.9.0
26
+ version: 6.9.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: appium_lib
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,8 @@ extensions: []
66
66
  extra_rdoc_files: []
67
67
  files:
68
68
  - CHANGELOG.md
69
+ - LICENSE
70
+ - README.md
69
71
  - Rakefile
70
72
  - eyes_appium.gemspec
71
73
  - lib/applitools/appium/android_region_provider.rb
@@ -82,7 +84,7 @@ files:
82
84
  - lib/eyes_appium.rb
83
85
  homepage: https://www.applitools.com
84
86
  licenses:
85
- - Applitools
87
+ - Proprietary
86
88
  metadata: {}
87
89
  post_install_message:
88
90
  rdoc_options: []