From f9b62e0e49db6ee289a83d11878803f47fa55bbd Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Thu, 25 Jul 2024 11:32:18 +0200 Subject: [PATCH 01/37] Sauce Visual API lifecycle init --- .../visual-testing/workflows/api-lifecycle.md | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 docs/visual-testing/workflows/api-lifecycle.md diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md new file mode 100644 index 0000000000..c364e397d9 --- /dev/null +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -0,0 +1,165 @@ +To help customers effectively integrate with our API, especially those not using the specific technologies we provide bindings for, we provide a comprehensive guide on the lifecycle of interacting with our system. Below is a basic documentation outline to guide users through the necessary steps. + +# API Lifecycle Documentation + +## Introduction + +This documentation provides a step-by-step guide on how to interact with our API. By following these steps, you'll be able to create builds, upload images, create snapshots, and finish builds. This guide is intended for users who wish to connect directly to the API or implement a binding on their own, including a link to our GraphQL API documentation for further reference. + +## What You'll Need + +- A Sauce Labs account ([Log in](https://accounts.saucelabs.com/am/XUI/#login/) or sign up for a [free trial license](https://saucelabs.com/sign-up)) +- Familiarity with GraphQL queries and mutations +- Tools like Postman or cURL for testing API calls + +## Lifecycle Steps + +### 1. Create a Build + +To start, you need to create a build. This initializes the process and prepares the environment for subsequent steps. + +**GraphQL Mutation:** + +```graphql +mutation { + createBuild(input: { name: "Your Build Name" }) { + id + name + status + url + } +} +``` + +**Expected Response:** + +```json +{ + "data": { + "createBuild": { + "id": "build-id-here", + "name": "Your Build Name", + "status": "RUNNING", + "url": "https://app.saucelabs.com/visual/builds/build-id-here" + } + } +} +``` + +- `status`: As a newly created build without any snapshots, this will be `RUNNING`. +- `url`: The URL that can be used any time to check the build on Sauce Labs. + +### 2. Upload Image + +Next, upload an image to the build. This is a two step process. + +First, get a placeholder URL for image upload using `createSnapshotUpload`. + +**GraphQL Mutation:** + +```graphql +mutation { + createSnapshotUpload(input: {buildId: "build-id-here"}) { + id + uploadUrl + } +} +``` + +- `buildId`: The ID of the build created in the previous step. + +**Expected Response:** + +```json +{ + "data": { + "createSnapshotUpload": { + "id": "upload-id-here", + "uploadUrl": "upload-url-here" + } + } +} +``` + +- `id`: Upload ID to use in the subsequent steps. +- `uploadUrl`: The URL to use in the next step. + +Next, send a `PUT` request to `uploadUrl` with image file in the body of the request. Only **PNG** files are supported. + +**cURL Representation:** + +```sh +curl --request PUT \ + --url 'upload-url-here' \ + --header 'Content-Type: image/png' \ + --data 'png-file-content' +``` + +### 3. Create Snapshot + +After uploading an image, create a snapshot to capture the current state of the build. + +**GraphQL Mutation:** + +```graphql +mutation { + createSnapshot( + input: {buildUuid: "build-id-here", uploadId: "upload-id-here", name: "Your snapshot name"} + ) { + id + uploadId + } +} +``` + +- `uploadId`: Upload ID acquired with `createSnapshotUpload` in the previous step. +- `buildUuid`: Build ID that was used in previous steps. + +**Expected Response:** + +```json +{ + "data": { + "createSnapshot": { + "id": "snapshot-id-here", + "uploadId": "upload-id-here" + } + } +} +``` + +- `id`: The ID of the snapshot that has been created. + +### 4. Finish Build + +Finally, finish the build process to mark it as complete. + +**GraphQL Mutation:** + +```graphql +mutation { + finishBuild(input: {uuid: "build-id-here"}) { + id + status + url + } +} +``` + +**Expected Response:** + +```json +{ + "data": { + "finishBuild": { + "id": "build-id-here", + "status": "UNAPPROVED", + "url": "https://app.saucelabs.com/visual/builds/build-id-here" + } + } +} +``` + +## Additional Information + +For more detailed information about the available queries and mutations, refer to our [GraphQL API documentation](https://api.us-west-1.saucelabs.com/v1/visual/graphql). From b6d787c359e6fd8d9149ea41cb55ab6146a53a75 Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Thu, 25 Jul 2024 11:35:17 +0200 Subject: [PATCH 02/37] Sauce Visual API lifecycle init --- docs/visual-testing/workflows/api-lifecycle.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index c364e397d9..b2917280d5 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -1,5 +1,3 @@ -To help customers effectively integrate with our API, especially those not using the specific technologies we provide bindings for, we provide a comprehensive guide on the lifecycle of interacting with our system. Below is a basic documentation outline to guide users through the necessary steps. - # API Lifecycle Documentation ## Introduction From b8f8ff90f4a2dd3c4abdad3a7046c36af8231a28 Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Thu, 25 Jul 2024 11:43:20 +0200 Subject: [PATCH 03/37] Sauce Visual API lifecycle - header --- docs/visual-testing/workflows/api-lifecycle.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index b2917280d5..e71ee9159d 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -1,4 +1,10 @@ -# API Lifecycle Documentation +--- +id: api-lifecycle +title: API Lifecycle +sidebar_label: API Lifecycle +--- + +# API Lifecycle ## Introduction From 0485643cdadcebc672f9404f7e81eeaf3c61b220 Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Thu, 25 Jul 2024 11:44:42 +0200 Subject: [PATCH 04/37] Sauce Visual API lifecycle - intro --- docs/visual-testing/workflows/api-lifecycle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index e71ee9159d..d204fd5304 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -8,7 +8,7 @@ sidebar_label: API Lifecycle ## Introduction -This documentation provides a step-by-step guide on how to interact with our API. By following these steps, you'll be able to create builds, upload images, create snapshots, and finish builds. This guide is intended for users who wish to connect directly to the API or implement a binding on their own, including a link to our GraphQL API documentation for further reference. +This documentation provides a step-by-step guide on how to interact with Sauce Visual API. By following these steps, you'll be able to create builds, upload images, create snapshots, and finish builds. This guide is intended for users who wish to connect directly to the API or implement a binding on their own, including a link to our GraphQL API documentation for further reference. ## What You'll Need From aba2ec4c435fd95687199943b66488c1e42a6c0c Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Thu, 25 Jul 2024 11:45:48 +0200 Subject: [PATCH 05/37] Sauce Visual API lifecycle - upload image --- docs/visual-testing/workflows/api-lifecycle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index d204fd5304..219c62ab2e 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -86,7 +86,7 @@ mutation { ``` - `id`: Upload ID to use in the subsequent steps. -- `uploadUrl`: The URL to use in the next step. +- `uploadUrl`: The URL to upload the image in the next step. Next, send a `PUT` request to `uploadUrl` with image file in the body of the request. Only **PNG** files are supported. From 20b46f534023db70cb29dac681d7a0259bb38451 Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Thu, 25 Jul 2024 11:56:51 +0200 Subject: [PATCH 06/37] Sauce Visual API lifecycle - sidebar link --- docs/visual-testing/workflows/ci.md | 6 +++--- sidebars.js | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/visual-testing/workflows/ci.md b/docs/visual-testing/workflows/ci.md index d3bc530223..f2f2614d1d 100644 --- a/docs/visual-testing/workflows/ci.md +++ b/docs/visual-testing/workflows/ci.md @@ -8,14 +8,14 @@ import TabItem from '@theme/TabItem'; # Continuous Integration -To integrate Sauce Visual into your continuous integration workflow we recommend a two-step approach using the sauce visual cli. Sauce visual cli will work with all major CI systems (GitHub, Gitlab, Jenkins, CircleCI). +To integrate Sauce Visual into your continuous integration workflow we recommend a two-step approach using the [Sauce Visual CLI](../cli.md). Sauce Visual CLI will work with all major CI systems (GitHub, Gitlab, Jenkins, CircleCI). Branch Review Pipeline To implement a merge/pull request flow which blocks the given request from merging when visual diffs are detected and not approved do the following: -1. trigger test execution in your ci the way you do it locally. Make sure to pass a custom build id and do not fail your test when visual differences where detected. -2. in a dedicated build step use the sauce visual cli to fetch the current state of the sauce visual build using the custom build id from step one. It will fail in case visual changes have been detected. +1. trigger test execution in your CI the way you do it locally. Make sure to pass a custom build ID and do not fail your test when visual differences where detected. +2. in a dedicated build step use the Sauce Visual CLI to fetch the current state of the Sauce Visual build using the custom build ID from step one. It will fail in case visual changes have been detected. ``` # make sure nodejs and npx is available diff --git a/sidebars.js b/sidebars.js index b322a602e0..c081654843 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1694,6 +1694,7 @@ module.exports = { 'visual-testing/workflows/test-execution', 'visual-testing/workflows/review', 'visual-testing/workflows/ci', + 'visual-testing/workflows/api-lifecycle' ], }, { From 8f665a7193dafdad1045265d87378e2a2194c5d7 Mon Sep 17 00:00:00 2001 From: Gil Megidish Date: Thu, 25 Jul 2024 12:22:29 +0200 Subject: [PATCH 07/37] Don't let beamer change favicon url --- src/plugins/beamer/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/beamer/index.js b/src/plugins/beamer/index.js index ec592020d9..702394b4cb 100644 --- a/src/plugins/beamer/index.js +++ b/src/plugins/beamer/index.js @@ -34,6 +34,11 @@ module.exports = function (context) { product_id : 'WyhkZHOU27797', ${selector}, ${display}, + callback: function() { + setTimeout(function() { + window.Beamer.enableFaviconNotification = false; + }, 0); + }, };`, }, { From 2486c70d2a9b5be90020a339e903b8e7b0c1de0a Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Thu, 25 Jul 2024 14:37:22 +0200 Subject: [PATCH 08/37] Sauce Visual API lifecycle - remove introduction title --- docs/visual-testing/workflows/api-lifecycle.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index 219c62ab2e..be7a82a68d 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -6,8 +6,6 @@ sidebar_label: API Lifecycle # API Lifecycle -## Introduction - This documentation provides a step-by-step guide on how to interact with Sauce Visual API. By following these steps, you'll be able to create builds, upload images, create snapshots, and finish builds. This guide is intended for users who wish to connect directly to the API or implement a binding on their own, including a link to our GraphQL API documentation for further reference. ## What You'll Need From 74085d42a47adcfa1ce001200a26e1d826bd6803 Mon Sep 17 00:00:00 2001 From: Kerem Date: Fri, 26 Jul 2024 09:46:21 +0000 Subject: [PATCH 09/37] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Félix P. --- docs/visual-testing/workflows/api-lifecycle.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index be7a82a68d..a94751893b 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -55,7 +55,7 @@ mutation { Next, upload an image to the build. This is a two step process. -First, get a placeholder URL for image upload using `createSnapshotUpload`. +First, obtain a signed URL for uploading your image by using the `createSnapshotUpload` mutation. **GraphQL Mutation:** @@ -94,12 +94,12 @@ Next, send a `PUT` request to `uploadUrl` with image file in the body of the req curl --request PUT \ --url 'upload-url-here' \ --header 'Content-Type: image/png' \ - --data 'png-file-content' + --data '@my-screenshot.png' ``` ### 3. Create Snapshot -After uploading an image, create a snapshot to capture the current state of the build. +After uploading your image, add your snapshot and its metadata to your build. **GraphQL Mutation:** @@ -134,7 +134,7 @@ mutation { ### 4. Finish Build -Finally, finish the build process to mark it as complete. +Finally, finish the build to mark it as complete. **GraphQL Mutation:** From 7317c25afef52fc11345c2e58c6dc718808fdbbf Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Fri, 26 Jul 2024 15:13:42 +0200 Subject: [PATCH 10/37] CR remarks --- .../visual-testing/workflows/api-lifecycle.md | 56 ++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index a94751893b..f0145b5574 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -24,7 +24,7 @@ To start, you need to create a build. This initializes the process and prepares ```graphql mutation { - createBuild(input: { name: "Your Build Name" }) { + createBuild(input: { name: "Your Build Name", branch: "Branch name", project: "Project name" }) { id name status @@ -33,6 +33,9 @@ mutation { } ``` +- `branch`: Branch name to associate the build with. +- `project`: Label/project to associate the build with. + **Expected Response:** ```json @@ -64,6 +67,7 @@ mutation { createSnapshotUpload(input: {buildId: "build-id-here"}) { id uploadUrl + domUploadUrl } } ``` @@ -77,7 +81,8 @@ mutation { "data": { "createSnapshotUpload": { "id": "upload-id-here", - "uploadUrl": "upload-url-here" + "uploadUrl": "image-upload-url-here", + "domUploadUrl": "dom-upload-url-here" } } } @@ -85,37 +90,70 @@ mutation { - `id`: Upload ID to use in the subsequent steps. - `uploadUrl`: The URL to upload the image in the next step. +- `domUploadUrl`: The URL to upload the DOM to (if available and desired). Explained in optional step below. Next, send a `PUT` request to `uploadUrl` with image file in the body of the request. Only **PNG** files are supported. -**cURL Representation:** +**cURL:** ```sh curl --request PUT \ --url 'upload-url-here' \ + --header 'Content-MD5: base64-encoded-md5-hash' \ --header 'Content-Type: image/png' \ --data '@my-screenshot.png' ``` +- `Content-MD5` header: Base64 encoded MD5 hash of the file (`my-screenshot.png`). +- `Content-Type` header: Must be set to `image/png`. Not other extensions are supported. + +Optional: Upload DOM + +If desired (and available), DOM can be also uploaded to `domUploadUrl` obtained from `createSnapshotUpload` mutation. + +**cURL:** + +```sh +curl --request PUT \ + --url 'dom-upload-url-here' \ + --header 'Content-MD5: base64-encoded-md5-hash' \ + --header 'Content-Type: text/html' \ + --data '@my-dom.html' +``` + +- `Content-MD5` header: Base64 encoded MD5 hash of the file (`my-dom.html`). +- `Content-Type` header: Must be set to `text/html`. Not other extensions are supported. + ### 3. Create Snapshot -After uploading your image, add your snapshot and its metadata to your build. +After uploading your image, add your snapshot along with its metadata to your build. **GraphQL Mutation:** ```graphql mutation { createSnapshot( - input: {buildUuid: "build-id-here", uploadId: "upload-id-here", name: "Your snapshot name"} + input: { + buildUuid: "build-id-here", + uploadId: "upload-id-here", + name: "Your snapshot name", + operatingSystem: OS, + operatingSystemVersion: "os-version", + browser: BROWSER, + browserVersion: "browser-version" + } ) { id uploadId } } ``` - -- `uploadId`: Upload ID acquired with `createSnapshotUpload` in the previous step. - `buildUuid`: Build ID that was used in previous steps. +- `uploadId`: Upload ID acquired with `createSnapshotUpload` in the previous step. +- `operatingSystem`: The operating system used to take the snapshot. Strongly advised to be filled in. Available options: `ANDROID`, `IOS`, `LINUX`, `MACOS`, `WINDOWS`. +- `operatingSystemVersion`: The operating system version. e.g. "14.5" for `MACOS` or "11" for `WINDOWS`. +- `browser`: The browser used to take the snapshot. Strongly advised to be filled in (if available). Available options: `CHROME`, `EDGE`, `FIREFOX`, `PLAYWRIGHT_WEBKIT`, `SAFARI`. +- `browserVersion`: The browser version. e.g. "120.0.6099.318", "128.0.2". **Expected Response:** @@ -134,7 +172,9 @@ mutation { ### 4. Finish Build -Finally, finish the build to mark it as complete. +Finally, finish the build to mark it as complete. Keep in mind that this is a necessary step and the build cannot be reused after it's finished. + +It's also worth noting that unfinished builds will be automatically closed and set to `ERRORED` state after a certain period of time (default: 3 hours). **GraphQL Mutation:** From 9475bd7839f92200041b93ae46bc85ada5b5f8e2 Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Fri, 26 Jul 2024 15:22:01 +0200 Subject: [PATCH 11/37] fixes --- docs/visual-testing/workflows/api-lifecycle.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index f0145b5574..b18aeccfa6 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -90,11 +90,11 @@ mutation { - `id`: Upload ID to use in the subsequent steps. - `uploadUrl`: The URL to upload the image in the next step. -- `domUploadUrl`: The URL to upload the DOM to (if available and desired). Explained in optional step below. +- `domUploadUrl`: The URL to upload the DOM to (if desired and available). Explained in the optional step below. Next, send a `PUT` request to `uploadUrl` with image file in the body of the request. Only **PNG** files are supported. -**cURL:** +**cURL Request:** ```sh curl --request PUT \ @@ -111,7 +111,7 @@ Optional: Upload DOM If desired (and available), DOM can be also uploaded to `domUploadUrl` obtained from `createSnapshotUpload` mutation. -**cURL:** +**cURL Request:** ```sh curl --request PUT \ @@ -139,7 +139,7 @@ mutation { name: "Your snapshot name", operatingSystem: OS, operatingSystemVersion: "os-version", - browser: BROWSER, + browser: BROWSER, browserVersion: "browser-version" } ) { @@ -149,7 +149,7 @@ mutation { } ``` - `buildUuid`: Build ID that was used in previous steps. -- `uploadId`: Upload ID acquired with `createSnapshotUpload` in the previous step. +- `uploadId`: Upload ID acquired with `createSnapshotUpload` in the previous step (`createSnapshotUpload` mutation response) - `operatingSystem`: The operating system used to take the snapshot. Strongly advised to be filled in. Available options: `ANDROID`, `IOS`, `LINUX`, `MACOS`, `WINDOWS`. - `operatingSystemVersion`: The operating system version. e.g. "14.5" for `MACOS` or "11" for `WINDOWS`. - `browser`: The browser used to take the snapshot. Strongly advised to be filled in (if available). Available options: `CHROME`, `EDGE`, `FIREFOX`, `PLAYWRIGHT_WEBKIT`, `SAFARI`. From 4141cde562e78eddfc8a29cb5ef869a40fdeadb6 Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Fri, 26 Jul 2024 15:28:50 +0200 Subject: [PATCH 12/37] remove unnecessary explanation --- docs/visual-testing/workflows/api-lifecycle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/visual-testing/workflows/api-lifecycle.md b/docs/visual-testing/workflows/api-lifecycle.md index b18aeccfa6..13c26facd8 100644 --- a/docs/visual-testing/workflows/api-lifecycle.md +++ b/docs/visual-testing/workflows/api-lifecycle.md @@ -149,7 +149,7 @@ mutation { } ``` - `buildUuid`: Build ID that was used in previous steps. -- `uploadId`: Upload ID acquired with `createSnapshotUpload` in the previous step (`createSnapshotUpload` mutation response) +- `uploadId`: Upload ID acquired with `createSnapshotUpload` in the previous step. - `operatingSystem`: The operating system used to take the snapshot. Strongly advised to be filled in. Available options: `ANDROID`, `IOS`, `LINUX`, `MACOS`, `WINDOWS`. - `operatingSystemVersion`: The operating system version. e.g. "14.5" for `MACOS` or "11" for `WINDOWS`. - `browser`: The browser used to take the snapshot. Strongly advised to be filled in (if available). Available options: `CHROME`, `EDGE`, `FIREFOX`, `PLAYWRIGHT_WEBKIT`, `SAFARI`. From 8e937e5a646b0ee2a1609d765e1a4ba283693bba Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Fri, 26 Jul 2024 16:36:40 +0200 Subject: [PATCH 13/37] fix typos --- docs/visual-testing/_partials/_environment-variables.md | 2 +- docs/visual-testing/integrations/java.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/visual-testing/_partials/_environment-variables.md b/docs/visual-testing/_partials/_environment-variables.md index 03d1b505d6..b5b366a9b7 100644 --- a/docs/visual-testing/_partials/_environment-variables.md +++ b/docs/visual-testing/_partials/_environment-variables.md @@ -6,6 +6,6 @@ | `SAUCE_VISUAL_BUILD_NAME` | | The name you would like to appear in the Sauce Visual dashboard. | | `SAUCE_VISUAL_BRANCH` | | The branch name you would like to associate this build with. We recommend using your current VCS branch in CI. | | `SAUCE_VISUAL_DEFAULT_BRANCH` | | The main branch name you would like to associate this build with. Usually `main` or `master` or alternatively the branch name your current branch was derived from. [Follow me to learn more](../workflows/ci.md) | -| `SAUCE_VISUAL_PROJECT` | | The label / project you would like to associated this build with. | +| `SAUCE_VISUAL_PROJECT` | | The label / project you would like to associate this build with. | | `SAUCE_VISUAL_BUILD_ID` | | For advanced users, a user-supplied SauceLabs Visual build ID. Can be used to create builds in advance using the GraphQL API. This can be used to parallelize tests with multiple browsers, shard, or more.
By default, this is not set and we create / finish a build during setup / teardown. | | `SAUCE_VISUAL_CUSTOM_ID` | | For advanced users, a user-supplied custom ID to identify this build. Can be used in CI to identify / check / re-check the status of a single build. Usage suggestions: CI pipeline ID. | \ No newline at end of file diff --git a/docs/visual-testing/integrations/java.md b/docs/visual-testing/integrations/java.md index 663306b88c..475d481250 100644 --- a/docs/visual-testing/integrations/java.md +++ b/docs/visual-testing/integrations/java.md @@ -329,7 +329,7 @@ visual.sauceVisualCheck("Before Login", options); #### Screenshot-wide configuration -= + Example: From c24b347426bd139e17173cb10808f5f834470f16 Mon Sep 17 00:00:00 2001 From: Kerem Beygo Date: Fri, 26 Jul 2024 16:53:47 +0200 Subject: [PATCH 14/37] remove outdated section --- docs/visual-testing/integrations/java.md | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/docs/visual-testing/integrations/java.md b/docs/visual-testing/integrations/java.md index 475d481250..ccb30b40cb 100644 --- a/docs/visual-testing/integrations/java.md +++ b/docs/visual-testing/integrations/java.md @@ -451,25 +451,6 @@ options.setClipSelector(".your-css-selector"); visual.sauceVisualCheck("Visible Sale Banner", options); ``` -#### Selective Diffing (BETA) - -[Selective regions](../selective-diffing.md) are an even more powerful way to control diffing. - -```java -EnumSet visualChanges = EnumSet.of(DiffingFlag.Visual); - -visual.sauceVisualCheck( - "Before Login", - new CheckOptions.Builder() - .withDiffingMethod(DiffingMethod.BALANCED) - .disable(EnumSet.of(DiffingFlag.Position, DiffingFlag.Dimensions)) - .enable(visualChanges, loginPage.getInputUsername()) - .disable(visualChanges, loginPage.getInputUsername()) - .build()); -``` - -You can find the full example in our [examples repo](#examples). - ## Examples Two examples are available: From 5d1ea30db2e2af111bd9dfbf7ffeb3232885dd4e Mon Sep 17 00:00:00 2001 From: peter-shao <93678565+peter-shao@users.noreply.github.com> Date: Fri, 26 Jul 2024 12:20:44 -0700 Subject: [PATCH 15/37] Error Reporting - adding session replay for web Error Reporting will now include a new page for session replay to describe the feature for web integrations. --- .../platform-integrations/overview.md | 1 + .../platform-integrations/session-replay.md | 65 +++++++++++++++++++ sidebars.js | 1 + 3 files changed, 67 insertions(+) create mode 100644 docs/error-reporting/platform-integrations/session-replay.md diff --git a/docs/error-reporting/platform-integrations/overview.md b/docs/error-reporting/platform-integrations/overview.md index e2c95465fd..8a7aefe3db 100644 --- a/docs/error-reporting/platform-integrations/overview.md +++ b/docs/error-reporting/platform-integrations/overview.md @@ -69,6 +69,7 @@ Integrate Backtrace in your games and apps across languages and platforms with o

Other Integrations

  • Source Maps
  • +
  • Session Replay
  • Apache Traffic Server
  • Minidump
  • File Attachments
  • diff --git a/docs/error-reporting/platform-integrations/session-replay.md b/docs/error-reporting/platform-integrations/session-replay.md new file mode 100644 index 0000000000..ec5de37bac --- /dev/null +++ b/docs/error-reporting/platform-integrations/session-replay.md @@ -0,0 +1,65 @@ +--- +id: session-replay +title: Session Replay for Web +sidebar_label: Session Replay +description: Configure session replay in your web applications. +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +:::note + +Session Replay is currently in beta and only available for web applications. Replays are limited during this phase. + +::: + +Session Replay allows you to capture a visual recreation of user sessions. This simplifies the replication of user errors to determine the root cause. Combining session replays with breadcrumbs and callstacks can give a complete view of the user experience. + +## Overview of Session Replay +Session replay works by capturing the DOM state periodically when the user interacts wtih your application. The user session is then recreated when viewing the error in Backtrace. Unlike a video recording, these packages are lightweight and allow for additional processing prior to being sent and stored in Backtrace (i.e. masking for PII considerations). Currently, Backtrace SDK will snip the session around a triggering error, allowing your team to hone in on specific issues. + +The Backtrace implementation makes use of [rrweb](https://github.com/rrweb-io/rrweb/blob/master/guide.md). + +## Prerequisites +- A Backtrace account ([log in](https://backtrace.io/login) or sign up for a [free trial license](https://backtrace.io/sign-up)). +- Follow the ([JavaScript integration guide](https://docs.saucelabs.com/error-reporting/language-integrations/javascript/)). + +## Setting Up Session Replay + +### Install the package +```bash + npm install @backtrace/session-replay +``` +### Integrate the session replay module + +Add the following code to the build the session replay module: + +```javascript +import { BacktraceClient, BacktraceConfiguration } from '@backtrace/browser'; +import { BacktraceSessionReplayModule } from '@backtrace/session-replay'; + +// Configure client options +const options: BacktraceConfiguration = { + // Name of the website/application + name: 'MyWebPage', + // Version of the website + version: '1.2.3', + // Submission url + // is the subdomain of your Backtrace instance (.backtrace.io) + // can be found in Project Settings/Submission tokens + url: 'https://submit.backtrace.io///json', +}; + +// Initialize the client with the options +// Make sure to add `useModule` with `BacktraceSessionReplayModule` +const client = BacktraceClient.builder(options) + .useModule( + new BacktraceSessionReplayModule({ + maxEventCount: 100, + }), + ) + .build(); +``` +Additional options for event limiting, masking, privacy, and more can be found on [Backtrace github](https://github.com/backtrace-labs/backtrace-javascript/tree/main/packages/session-replay). diff --git a/sidebars.js b/sidebars.js index b17e22eae2..bd6f86709d 100644 --- a/sidebars.js +++ b/sidebars.js @@ -478,6 +478,7 @@ module.exports = { ], }, 'error-reporting/platform-integrations/source-map', + 'error-reporting/platform-integrations/session-replay', 'error-reporting/platform-integrations/apache', 'error-reporting/platform-integrations/minidump', 'error-reporting/platform-integrations/file-attachments', From 029f3bb772b5c222ab9c5df99a03dda7b59a65d7 Mon Sep 17 00:00:00 2001 From: Alex Harford Date: Wed, 24 Jul 2024 08:22:54 -0700 Subject: [PATCH 16/37] Add tunnels endpoint to US East --- docs/basics/data-center-endpoints.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/basics/data-center-endpoints.md b/docs/basics/data-center-endpoints.md index bc9fbcb1fb..c86b7eb9e0 100644 --- a/docs/basics/data-center-endpoints.md +++ b/docs/basics/data-center-endpoints.md @@ -55,6 +55,7 @@ Sauce Connect Proxy makes its initial connection to saucelabs.com. After that, i | ---------------------------- | ----------------------------------------------- | | OnDemand Endpoint | https://ondemand.us-east-4.saucelabs.com/wd/hub | | REST API | api.us-east-4.saucelabs.com | +| Sauce Connect Tunnel Servers | \*.tunnels.us-east-4.saucelabs.com:443 | ### EU Central Data Center From a0d9263c1a9c025a30a906a10b537f25b76762b7 Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Tue, 30 Jul 2024 13:28:46 -0700 Subject: [PATCH 17/37] docs: Add TestCafe esm option --- docs/web-apps/automated-testing/testcafe/yaml.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/web-apps/automated-testing/testcafe/yaml.md b/docs/web-apps/automated-testing/testcafe/yaml.md index a81b5ef21e..1bc724b67e 100644 --- a/docs/web-apps/automated-testing/testcafe/yaml.md +++ b/docs/web-apps/automated-testing/testcafe/yaml.md @@ -1624,3 +1624,17 @@ suite: smartRetry: failedOnly: true ``` + +--- + +### `esm` + +

    | OPTIONAL | BOOLEAN |

    + +When set to `true`, this option enables importing ECMAScript Modules (ESM) that do not support CommonJS. For more information, check the [TestCafe Documentation](https://testcafe.io/documentation/404258/guides/advanced-guides/esm-module-support). + +```yaml +suite: + - name: My Saucy Test + esm: true +``` From b6c70708c350ba95db409eaa62a130111b277e9b Mon Sep 17 00:00:00 2001 From: Pawel Tomaszewski Date: Wed, 31 Jul 2024 13:54:02 +0200 Subject: [PATCH 18/37] remove available soon for ui ignore regions --- docs/visual-testing/workflows/review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/visual-testing/workflows/review.md b/docs/visual-testing/workflows/review.md index 8efab4902a..d15405152f 100644 --- a/docs/visual-testing/workflows/review.md +++ b/docs/visual-testing/workflows/review.md @@ -174,7 +174,7 @@ Check our integration documentation to learn how to get started. [WebdriverIO](../../integrations/webdriverio/#ignored-regions), [Python](../../integrations/python/#ignored-regions), [Python (Robot Framework)](../../integrations/python-robot-framework/#ignored-regions) -### UI ignored regions (available soon) +### UI ignored regions :::note We recommend using Code ignored regions over UI ignore regions whenever possible From e17bde02b2c537359b0d361489dfd731e5603a6c Mon Sep 17 00:00:00 2001 From: peter-shao <93678565+peter-shao@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:38:38 -0700 Subject: [PATCH 19/37] Modifications for clarity of session replay Changes to session replay doc based on comments --- .../error-reporting/platform-integrations/session-replay.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-reporting/platform-integrations/session-replay.md b/docs/error-reporting/platform-integrations/session-replay.md index ec5de37bac..de23121a20 100644 --- a/docs/error-reporting/platform-integrations/session-replay.md +++ b/docs/error-reporting/platform-integrations/session-replay.md @@ -15,16 +15,16 @@ Session Replay is currently in beta and only available for web applications. Rep ::: -Session Replay allows you to capture a visual recreation of user sessions. This simplifies the replication of user errors to determine the root cause. Combining session replays with breadcrumbs and callstacks can give a complete view of the user experience. +Session Replay allows you to capture a visual recreation of a user session. This simplifies the replication of user errors to determine the root cause. Combining session replays with breadcrumbs and callstacks can give a complete view of the user experience. ## Overview of Session Replay -Session replay works by capturing the DOM state periodically when the user interacts wtih your application. The user session is then recreated when viewing the error in Backtrace. Unlike a video recording, these packages are lightweight and allow for additional processing prior to being sent and stored in Backtrace (i.e. masking for PII considerations). Currently, Backtrace SDK will snip the session around a triggering error, allowing your team to hone in on specific issues. +Session replay works by capturing the DOM state periodically when the user interacts wtih your application. The user session is then recreated when viewing the error in Backtrace. Unlike a video recording, these packages are lightweight and allow for additional processing prior to being sent and stored in Backtrace (e.g. masking PII). Backtrace SDK snips the session around a triggering error so your team can hone in on a specific issue. The Backtrace implementation makes use of [rrweb](https://github.com/rrweb-io/rrweb/blob/master/guide.md). ## Prerequisites - A Backtrace account ([log in](https://backtrace.io/login) or sign up for a [free trial license](https://backtrace.io/sign-up)). -- Follow the ([JavaScript integration guide](https://docs.saucelabs.com/error-reporting/language-integrations/javascript/)). +- Follow the [JavaScript integration guide](https://docs.saucelabs.com/error-reporting/language-integrations/javascript/). ## Setting Up Session Replay From 7d84c6a9aae8b0ab885eb876f0dde728535dd318 Mon Sep 17 00:00:00 2001 From: jasonrossatsauce <73618099+jasonrossatsauce@users.noreply.github.com> Date: Thu, 1 Aug 2024 14:40:31 -0600 Subject: [PATCH 20/37] DVI-5212 Add newer Electron versions and update notes. (#2873) Updated the versions of Electron supported in beta to include up to 31, added supported OSes and updated example. --- docs/web-apps/automated-testing/electron.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/docs/web-apps/automated-testing/electron.md b/docs/web-apps/automated-testing/electron.md index c11359e74f..56bd3d9ae9 100644 --- a/docs/web-apps/automated-testing/electron.md +++ b/docs/web-apps/automated-testing/electron.md @@ -14,11 +14,15 @@ import useBaseUrl from '@docusaurus/useBaseUrl'; Sauce Labs currently supports the following test configurations for Electron. - Platforms - - Windows 10, - - Windows 11 - - (Linux and MacOS 13 support to come) + - Windows 10 + - Windows 11 + - MacOS 10.15 + - MacOS 11 + - MacOS 12 + - MacOS 13 + - (Linux support to be decided) - Electron versions - - versions 5 - 25 + - versions 5 - 31 inclusive ## How to Get Started @@ -48,12 +52,15 @@ then the `binary` value is `'Sauce Labs Test\SauceLabsElecronApp.exe'`. ### Configuring your tests You need to specify Electron as the [`browserName`](https://docs.saucelabs.com/dev/test-configuration-options/#browsername) along with the Electron version needed as the [`browserVersion`](https://docs.saucelabs.com/dev/test-configuration-options/#browserversion). You will also need to include either the file ID or file name of your uploaded zip file containing your Electron app, with the path to the binary inside that zip. -Example written in Python with an Electron app test running on Windows 11 with Chromedriver 19 at US West: + +Because Electron is based on the Chromium browser, you need to specify the options using the `ChromeOptions` class. + +Example written in Python with an Electron app test running on Windows 11 with Electron 29 at US West: ```python options = ChromeOptions() options.set_capability('browserName', 'electron') -options.browser_version = '19' +options.browser_version = '29' options.platform_name = 'Windows 11' options.binary_location='\' sauce_options = {} @@ -71,6 +78,6 @@ Test results are visible on the UI under “Automated Tests > Test Results.’ Y ## Limitations -- Electron support is currently enabled only for automated testing on Windows 10 and 11. +- Electron support is currently enabled only for automated testing on Windows 10 and 11, and MacOS 10.15, 11, 12 and 13. - Electron apps uploaded via REST API are not currently visible within the App Management of the UI. - Live testing and UI enhancements to come in a future release. From 4a23ad75032963556fe61fc960c83cff7d03595d Mon Sep 17 00:00:00 2001 From: Mootaz Bahri Date: Fri, 2 Aug 2024 14:33:50 +0200 Subject: [PATCH 21/37] update appium versions and drivers for each alias --- .../appium/appium-versions.md | 66 ++++++++++++++++--- 1 file changed, 57 insertions(+), 9 deletions(-) diff --git a/docs/mobile-apps/automated-testing/appium/appium-versions.md b/docs/mobile-apps/automated-testing/appium/appium-versions.md index 707583495d..cfa4afdd66 100644 --- a/docs/mobile-apps/automated-testing/appium/appium-versions.md +++ b/docs/mobile-apps/automated-testing/appium/appium-versions.md @@ -184,23 +184,28 @@ The following list of custom Appium plugins are supported: This is a collection of drivers that were released in this version
    @@ -233,6 +238,44 @@ The following list of custom Appium plugins are supported:
+ + + appium2-20240801 + + + July 31th, 2025 + + + This is a collection of drivers that were released in August 1st 2024
+ + + appium2-20240701 @@ -263,6 +306,11 @@ The following list of custom Appium plugins are supported: appium-xcuitest-driver: 7.21.1 +
  • + + appium-flutter-integration-driver: 1.0.0-beta.14 + +
  • @@ -601,7 +649,7 @@ The following list of custom Appium plugins are supported: 2.0.0 - July 31st, 2024 + August 31st, 2024 This alias for getting the Appium 2 drivers that were installed in the Sauce Labs Real Device Cloud.
    The alias 2.0.0 is a collection of the following drivers
    From 383591d635dfcda048f5c8a69b4049f31ec1054c Mon Sep 17 00:00:00 2001 From: Dan Graham Date: Fri, 2 Aug 2024 12:11:35 -0700 Subject: [PATCH 22/37] try PNG instead of ICO (copy saucelabs.com) (#2877) Co-authored-by: Daniel Graham --- docusaurus.config.js | 22 +++++++++++++++++++++- sidebars.js | 2 +- static/404.html | 13 +++++++++---- static/favicon.ico | Bin 15086 -> 0 bytes 4 files changed, 31 insertions(+), 6 deletions(-) delete mode 100644 static/favicon.ico diff --git a/docusaurus.config.js b/docusaurus.config.js index 059394ffa5..e1ed2188e4 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -8,9 +8,9 @@ const docusaurusConfig = { baseUrl: '/', onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'throw', - favicon: 'favicon.ico', organizationName: 'saucelabs', projectName: 'sauce-docs', + // TODO: I don't think google-site-verification is working at all, confirm with P.O. customFields: { headTags: [ { @@ -22,6 +22,26 @@ const docusaurusConfig = { }, ], }, + headTags: [ + { + tagName: 'link', + attributes: { + rel: 'icon', + type: 'image/png', + sizes: '16x16', + href: '/img/favicon-16x16.png', + }, + }, + { + tagName: 'link', + attributes: { + rel: 'icon', + type: 'image/png', + sizes: '32x32', + href: '/img/favicon-32x32.png', + }, + }, + ], scripts: [ '/scripts/hide.js', // Need Help? button diff --git a/sidebars.js b/sidebars.js index ca052ce37b..453378a55c 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1695,7 +1695,7 @@ module.exports = { 'visual-testing/workflows/test-execution', 'visual-testing/workflows/review', 'visual-testing/workflows/ci', - 'visual-testing/workflows/api-lifecycle' + 'visual-testing/workflows/api-lifecycle', ], }, { diff --git a/static/404.html b/static/404.html index 2a122000c5..584d0b6b57 100644 --- a/static/404.html +++ b/static/404.html @@ -4,10 +4,15 @@ 404 Error | Sauce Docs + rel="icon" + type="image/png" + href="/img/favicon-32x32.png" + sizes="32x32" /> +
    diff --git a/static/favicon.ico b/static/favicon.ico deleted file mode 100644 index 8aebebb477fb0bb53e196238eca3efc67ed81eab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeHNS%@4(7_M=YQ9LFOD&oN|cx%K!KuNZ{XAn>HQAAYG_#lG#rlLl(vpxhw-JR(* zgcXlh6$GDDL~+O>d0CGb7m{@M?!Y1jqA)1vD3cw(zh`<<+f!9t-BWvj(@^tI9sgDT zUw>8o-Hhc}p6%Gd0LR&f*D`h+V{Cl9SKr3i656%_QvcIuGqxWCZon9zuqRNcJ$$a| zg3<422DZ`+xPg6t&9|P)R03;{yHv72ST3KtSvu7`r&9Cn&XDDos%Jm889GdR6E_bj zd!+j+*>E#-fc%Swbole2zx&dS*1?bug?4}+y}aS_`{nJ1=AU%{)IgVH{X(aQsb|B(-6u}Qi(l<+PrAwQHwz9gJCkC!io z-~2J0?{xJ_y4xqolC>Y_$Y&rw-mxXjuSS1TekiMqNq9Bic^vZpIxV`cnNvfJ&3KD-docX$Hd!ug zk6pOQ~pP5T8_Cbt!4zc`_?A!)1GvrH7%?8dbgOswjV1G@Ucb(79 zZ4fg{&TDqLOv}N@lfecZI^!B)-XoIQ2FSY`<)0yUtz!eq3H0(&^UzV6Z*YC*Gf}<) z=jSiv=Ra$&Y7SiQzCw>@;$53~h|aml$2=`=z&Z(~-o461({*uvA z*#J1M3{TQ7{2l^hKb4GEt^g*{2WXQ7Yw zwAV!Q7w2DHnz&xUUnrO9{3-aW)`36# zFN5?OUhXae*$zecfNON1J&Nn=#}ED-i~eW%G5mKC12GxzEh71VBRq%3b%1>Qcjomz zzWh%6RWycROo!96$0jbPcIi0~b58xyLpI^{tA#e}#DU+EhaLlKht`w`XV^B%dA2G4N(HC4Rg|g2j8%|bs;@A1IM3L8 Tj Date: Fri, 2 Aug 2024 12:16:12 -0700 Subject: [PATCH 23/37] try removing beamer from docs site (#2876) Co-authored-by: Daniel Graham --- docusaurus.config.js | 12 -------- src/css/beamer.css | 19 ------------- src/css/custom.css | 1 - src/plugins/beamer/index.js | 56 ------------------------------------- 4 files changed, 88 deletions(-) delete mode 100644 src/css/beamer.css delete mode 100644 src/plugins/beamer/index.js diff --git a/docusaurus.config.js b/docusaurus.config.js index e1ed2188e4..3b8b3fa0cb 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -59,11 +59,6 @@ const docusaurusConfig = { }, ], themeConfig: { - beamer: { - product_id: `'WyhkZHOU27797'`, - display: `'popup'`, - // selector: `'.beamerContainer'`, - }, prism: { additionalLanguages: [ 'java', @@ -120,12 +115,6 @@ const docusaurusConfig = { position: 'left', to: '/error-reporting/getting-started', }, - { - type: 'html', - position: 'right', - className: 'beamerTrigger', - value: 'Product Updates', - }, ], }, /* this is a swizzled component, see inside theme folder */ @@ -175,7 +164,6 @@ const docusaurusConfig = { ], ], themes: ['docusaurus-theme-github-codeblock'], - plugins: ['./src/plugins/beamer'], }; if (!process.env.SAUCE_DOCS_DEV) { diff --git a/src/css/beamer.css b/src/css/beamer.css deleted file mode 100644 index b49b95b999..0000000000 --- a/src/css/beamer.css +++ /dev/null @@ -1,19 +0,0 @@ -/*.beamerTrigger button {*/ -/*}*/ - -.beamer-navbar-bell { - /* filter: invert(43%) sepia(88%) saturate(4869%) hue-rotate(197deg) - brightness(92%) contrast(89%); */ -} - -html[data-theme="dark"] .beamer-navbar-bell { - /* filter: invert(100%) sepia(0%) saturate(7475%) hue-rotate(245deg) - brightness(112%) contrast(99%); */ - filter: invert(1); -} - -.beamer_icon.active, -#beamerIcon.active { - background-color: var(--yellow-500) !important; - color: var(--inline-link) !important; -} diff --git a/src/css/custom.css b/src/css/custom.css index 4c15447d7e..0522a525fa 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -16,7 +16,6 @@ @import "footer-styles.css"; @import "fw-badge-override.css"; @import "homesearchbar.css"; -@import "beamer.css"; @import "./variables/colors.modules.css"; @import "./variables/fonts.modules.css"; diff --git a/src/plugins/beamer/index.js b/src/plugins/beamer/index.js deleted file mode 100644 index 702394b4cb..0000000000 --- a/src/plugins/beamer/index.js +++ /dev/null @@ -1,56 +0,0 @@ -module.exports = function (context) { - const { siteConfig } = context; // - const { themeConfig } = siteConfig; - - if (!themeConfig.beamer) { - throw new Error( - 'You need to specify `beamer` object in `themeConfig` ' + - 'with `product_id` field in it to use beamer' - ); - } - if (!themeConfig.beamer.product_id) { - throw new Error( - 'You specified the `goatCounter` object in `themeConfig`, ' + - 'but the `product_id` field was missing. ' - ); - } - - const selector = `selector: ${themeConfig.beamer.selector}`; - const display = `display: ${themeConfig.beamer.display}`; /* Choose how to display Beamer panel */ - // const top = `top: ${themeConfig.beamer.top}`; /* Top position offset for notification bubble */ - // const bottom = `bottom: ${themeConfig.beamer.bottom}`; /* Bottom position offset for notification bubble */ - // const button_position = `button_position: ${themeConfig.beamer.button_position}`; - - return { - name: 'docusaurus-plugin-beamer', - injectHtmlTags: () => { - // Adds additional HTML to every page - return { - headTags: [ - { - tagName: 'script', - innerHTML: ` - var beamer_config = { - product_id : 'WyhkZHOU27797', - ${selector}, - ${display}, - callback: function() { - setTimeout(function() { - window.Beamer.enableFaviconNotification = false; - }, 0); - }, - };`, - }, - { - tagName: 'script', - attributes: { - type: 'text/javascript', - src: 'https://app.getbeamer.com/js/beamer-embed.js', - defer: true, - }, - }, - ], - }; - }, - }; -}; From c102092bb68acd50d8a25563ae9f1ea966d2ad58 Mon Sep 17 00:00:00 2001 From: Alex Plischke Date: Fri, 2 Aug 2024 14:12:34 -0700 Subject: [PATCH 24/37] docs: elaborate on smartRetry requirements for cypress (#2875) --- .../automated-testing/cypress/yaml/v1.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/web-apps/automated-testing/cypress/yaml/v1.md b/docs/web-apps/automated-testing/cypress/yaml/v1.md index 9025048e37..b1340101ed 100644 --- a/docs/web-apps/automated-testing/cypress/yaml/v1.md +++ b/docs/web-apps/automated-testing/cypress/yaml/v1.md @@ -404,7 +404,7 @@ npm: auth: base64SecretToken username: myUsername password: myPassword - email: myEmail + email: myEmail ``` --- @@ -707,7 +707,7 @@ artifacts:

    | OPTIONAL | OBJECT |

    Define directories to archive and retain as a test asset at the end of a test run. Archived test assets can -be downloaded automatically using the `download` configuration, via the +be downloaded automatically using the `download` configuration, via the [REST API](/dev/api/jobs/#get-a-job-asset-file), or through the test details page. ```yaml @@ -1231,7 +1231,7 @@ suite:

    | OPTIONAL | OBJECT |

    -Specifies the retry strategy to apply for that suite. Requires [retries](#retries) to be >= 1. +Specifies the retry strategy. Requires [retries](#retries) to be >= 1. ```yaml sauce: @@ -1242,13 +1242,21 @@ suite: failedOnly: true ``` +:::note +`smartRetry` relies on the Cypress plugin `@cypress/grep` to filter tests. +Ensure that the plugin is installed and configured. Please refer to our +[example repository](https://github.com/saucelabs/saucectl-cypress-example/tree/f8715d05d3f47bb033fbcb2d1086ef970dcb3030/v1/examples/cypress-grep) +for more information. +::: + --- #### `failedOnly`

    | OPTIONAL | BOOLEAN |

    -When set to `true`, only the tests that failed during the previous attempt are retried. +When set to `true`, only the tests that failed during the previous attempt are +retried. ```yaml suite: From 616e63aa22293f3bc6c7ee5b0035fa15b39323b0 Mon Sep 17 00:00:00 2001 From: Benjamin Karran Date: Wed, 7 Aug 2024 16:48:09 +0200 Subject: [PATCH 25/37] IRIS-1036 Add native mobile testing for visual (#2879) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * IRIS-1036 Add native mobile testing for visual * add diffing engines * Clean up structure * Update docs/visual-testing/mobile-native-testing.md Co-authored-by: Félix P. * Update docs/visual-testing/mobile-native-testing.md Co-authored-by: Félix P. --------- Co-authored-by: Félix P. --- docs/visual-testing/diffing-engines.md | 34 ++++++++++++++++++++ docs/visual-testing/mobile-native-testing.md | 31 ++++++++++++++++++ docs/visual-testing/selective-diffing.md | 4 +-- sidebars.js | 2 ++ 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 docs/visual-testing/diffing-engines.md create mode 100644 docs/visual-testing/mobile-native-testing.md diff --git a/docs/visual-testing/diffing-engines.md b/docs/visual-testing/diffing-engines.md new file mode 100644 index 0000000000..83d4d4e5ae --- /dev/null +++ b/docs/visual-testing/diffing-engines.md @@ -0,0 +1,34 @@ +--- +id: diffing-engines +title: Diffing Engines +sidebar_label: Diffing Engines +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +Sauce Visual Testing supports the various diffing engines, which are described below. +Our SDKs give you the ability to select a specific engine for each snapshot, if you don't want to rely on the default engine. + + +## Balanced + +The Balanced engine will soon be our default engine. +It support all features like selective diffing and provides great all around performance. +It is able to detect single pixel changes while ignoring barely visible rendering artifacts such as anti-aliasing or small color inaccuracies. + + +## Simple + +Our first engine. It is similar to the Balanced engine, but we specifically developed the Balanced engine to address some corner cases that the Simple engine didn't handle well. +We will support the Simple engine for the forseeable future, but we won't backport new features to it. +In particular, selective diffing is not available for the Simple engine. + +We recommend using the Balanced engine instead of the Simple engine. + + +## (Experimental) + +We have am Experimental engine that is constantly changing and used for showcasing and troubleshooting. +Please don't use this engine in production. diff --git a/docs/visual-testing/mobile-native-testing.md b/docs/visual-testing/mobile-native-testing.md new file mode 100644 index 0000000000..815c0d534c --- /dev/null +++ b/docs/visual-testing/mobile-native-testing.md @@ -0,0 +1,31 @@ +--- +id: mobile-native-testing +title: Mobile Native Testing (BETA) +sidebar_label: Mobile Native Testing (BETA) +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +In addition to website testing, Sauce Visual also supports testing of native mobile apps for Android and iOS with Appium. + +In principal, the process is the same as writing a visual test for a website, except that instead of a website, an app needs to be specified in the capabilities. + +Check out [our examples](https://github.com/saucelabs/visual-examples/) to see it in action. + + +## Best Practices + +When writing a visual test for mobile apps, we recommend the following +- Explicitly control "dark mode" / "light mode" before taking visual snapshots, so snapshots are either always taken in dark or light mode, but not mixed. +- Explicitly specify a single device and OS version for testing. You may run the same test suite on various devices, but don't use wildcards in device names (dynamic device allocation). + + +## Limitations + +The following features are not available for mobile app testing: +- Full page screenshots +- DOM capture and inspection +- [Selective diffing](./selective-diffing.md) + diff --git a/docs/visual-testing/selective-diffing.md b/docs/visual-testing/selective-diffing.md index 92d345e20b..e472bf500d 100644 --- a/docs/visual-testing/selective-diffing.md +++ b/docs/visual-testing/selective-diffing.md @@ -1,6 +1,6 @@ --- id: selective-diffing -title: Sauce Labs Visual Testing +title: Selective Diffing sidebar_label: Selective Diffing --- @@ -8,8 +8,6 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import useBaseUrl from '@docusaurus/useBaseUrl'; -## Selective Diffing - Sauce Visual allows you to ignore only certain types of changes. We support the following change types: - **Content:** The text, image or other content changes. diff --git a/sidebars.js b/sidebars.js index 453378a55c..c103d3e6d3 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1715,6 +1715,8 @@ module.exports = { }, 'visual-testing/cli', 'visual-testing/selective-diffing', + 'visual-testing/mobile-native-testing', + 'visual-testing/diffing-engines', 'visual-testing/faq', ], }, From 548d93b1055128fe3e10eb735f0ff48d49ca4751 Mon Sep 17 00:00:00 2001 From: Dan Slov Date: Wed, 7 Aug 2024 10:55:27 -0700 Subject: [PATCH 26/37] clarify avoidProxy (#2880) --- docs/dev/test-configuration-options.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/dev/test-configuration-options.md b/docs/dev/test-configuration-options.md index 760ad81f0c..71fc7413b8 100644 --- a/docs/dev/test-configuration-options.md +++ b/docs/dev/test-configuration-options.md @@ -284,9 +284,12 @@ Always use the latest Selenium version. The Selenium developers are very conscie

    | BOOLEAN |

    -Allows the browser to communicate directly with servers without going through a proxy. By default, Sauce routes traffic from Internet Explorer and Safari through an HTTP proxy server so that HTTPS connections with self-signed certificates will work. The proxy server can cause problems for some users, and this setting allows you to avoid it. +Allows the browser to communicate directly with servers without going through a proxy that is shipped with Selenium versions prior to v3. +By default, Sauce routes traffic from Internet Explorer and Safari through an HTTP proxy server so that HTTPS connections with self-signed certificates will work. +The proxy server can cause problems for some users, and this setting allows you to avoid it. :::note +This configuration is only relevant for Selenium versions 2.x and older. Any test run with a Sauce Connect tunnel has to use the proxy and this flag will be ignored. ::: From 1e70621aa9defd9be68dea162ac58fc004c35fe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Matczuk?= Date: Thu, 8 Aug 2024 13:06:24 +0200 Subject: [PATCH 27/37] sauce-connect(installation): replace 5.1.1 with 5.1.2 --- .../sauce-connect-5/installation.md | 20 +++++++++---------- .../sauce-connect-5/installation/linux.md | 12 +++++------ .../sauce-connect-5/installation/macos.md | 2 +- .../sauce-connect-5/installation/windows.md | 4 ++-- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/secure-connections/sauce-connect-5/installation.md b/docs/secure-connections/sauce-connect-5/installation.md index f71302cd17..edc54ea0da 100644 --- a/docs/secure-connections/sauce-connect-5/installation.md +++ b/docs/secure-connections/sauce-connect-5/installation.md @@ -17,7 +17,7 @@ Visit the following pages for installation instructions for your platform: If you prefer to do custom installation, you can download Sauce Connect binaries from the following links. -SHA256 checksums are available [here](https://saucelabs.com/downloads/sauce-connect/5.1.1/checksums). +SHA256 checksums are available [here](https://saucelabs.com/downloads/sauce-connect/5.1.2/checksums). @@ -27,51 +27,51 @@ SHA256 checksums are available [here](https://saucelabs.com/downloads/sauce-conn
    Linux x86_64 - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_linux.x86_64.tar.gz + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_linux.x86_64.tar.gz
    - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect_5.1.1.linux_amd64.deb + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect_5.1.2.linux_amd64.deb
    - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_linux.x86_64.rpm + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_linux.x86_64.rpm
    Linux arm64 - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_linux.aarch64.tar.gz + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_linux.aarch64.tar.gz
    - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect_5.1.1.linux_arm64.deb + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect_5.1.2.linux_arm64.deb
    - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_linux.aarch64.rpm + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_linux.aarch64.rpm
    macOS - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_darwin.all.zip + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_darwin.all.zip
    Windows x86_64 - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_windows.x86_64.zip + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_windows.x86_64.zip
    Windows arm64 - https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_windows.aarch64.zip + https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_windows.aarch64.zip
    diff --git a/docs/secure-connections/sauce-connect-5/installation/linux.md b/docs/secure-connections/sauce-connect-5/installation/linux.md index d643955842..3ad17f5bed 100644 --- a/docs/secure-connections/sauce-connect-5/installation/linux.md +++ b/docs/secure-connections/sauce-connect-5/installation/linux.md @@ -24,7 +24,7 @@ defaultValue="ARM64" ```bash -curl -L -o sauce-connect.deb https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect_5.1.1.linux_arm64.deb +curl -L -o sauce-connect.deb https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect_5.1.2.linux_arm64.deb sudo dpkg -i sauce-connect.deb ``` @@ -32,7 +32,7 @@ sudo dpkg -i sauce-connect.deb ```bash -curl -L -o sauce-connect.deb https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect_5.1.1.linux_amd64.deb +curl -L -o sauce-connect.deb https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect_5.1.2.linux_amd64.deb sudo dpkg -i sauce-connect.deb ``` @@ -81,14 +81,14 @@ defaultValue="ARM64" ```bash -sudo rpm -i https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_linux.aarch64.rpm +sudo rpm -i https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_linux.aarch64.rpm ``` ```bash -sudo rpm -i https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_linux.x86_64.rpm +sudo rpm -i https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_linux.x86_64.rpm ``` @@ -132,7 +132,7 @@ defaultValue="ARM64" ```bash -curl -L -o sauce-connect.tar.gz https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_linux.aarch64.tar.gz +curl -L -o sauce-connect.tar.gz https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_linux.aarch64.tar.gz sudo mkdir -p /opt/sauce-connect sudo tar -C /opt/sauce-connect -xzf sauce-connect.tar.gz ``` @@ -141,7 +141,7 @@ sudo tar -C /opt/sauce-connect -xzf sauce-connect.tar.gz ```bash -curl -L -o sauce-connect.tar.gz https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_linux.x86_64.tar.gz +curl -L -o sauce-connect.tar.gz https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_linux.x86_64.tar.gz sudo mkdir -p /opt/sauce-connect sudo tar -C /opt/sauce-connect -xzf sauce-connect.tar.gz ``` diff --git a/docs/secure-connections/sauce-connect-5/installation/macos.md b/docs/secure-connections/sauce-connect-5/installation/macos.md index 6aa75331e5..abae36303e 100644 --- a/docs/secure-connections/sauce-connect-5/installation/macos.md +++ b/docs/secure-connections/sauce-connect-5/installation/macos.md @@ -41,7 +41,7 @@ Sauce Connect provides `.zip` package with a signed binary that can be used on a ### Unpack the zip file ```bash -curl -L -o sauce-connect.zip https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_darwin.all.zip +curl -L -o sauce-connect.zip https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_darwin.all.zip sudo mkdir -p /opt/sauce-connect sudo unzip -d /opt/sauce-connect sauce-connect.zip ``` diff --git a/docs/secure-connections/sauce-connect-5/installation/windows.md b/docs/secure-connections/sauce-connect-5/installation/windows.md index 115ae58ba1..a5cdacb00c 100644 --- a/docs/secure-connections/sauce-connect-5/installation/windows.md +++ b/docs/secure-connections/sauce-connect-5/installation/windows.md @@ -20,7 +20,7 @@ defaultValue="ARM64" ```bash mkdir C:\sauce-connect -Invoke-WebRequest -Uri https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_windows.aarch64.zip -OutFile sauce-connect.zip +Invoke-WebRequest -Uri https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_windows.aarch64.zip -OutFile sauce-connect.zip Expand-Archive -Path sauce-connect.zip -DestinationPath C:\sauce-connect ``` @@ -29,7 +29,7 @@ Expand-Archive -Path sauce-connect.zip -DestinationPath C:\sauce-connect ```bash mkdir C:\sauce-connect -Invoke-WebRequest -Uri https://saucelabs.com/downloads/sauce-connect/5.1.1/sauce-connect-5.1.1_windows.x86_64.zip -OutFile sauce-connect.zip +Invoke-WebRequest -Uri https://saucelabs.com/downloads/sauce-connect/5.1.2/sauce-connect-5.1.2_windows.x86_64.zip -OutFile sauce-connect.zip Expand-Archive -Path sauce-connect.zip -DestinationPath C:\sauce-connect ``` From b499f070b2e8d8e92c2f9f31773e5d45f7a45906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Matczuk?= Date: Thu, 8 Aug 2024 13:13:06 +0200 Subject: [PATCH 28/37] Revert "sauce-connect: temporarily remove 5.2 items from docs" This reverts commit 82b0dc30c5f8ded5773ea9148b2e7fbf8a32c2b9. --- .../sauce-connect-5/logging.md | 157 +++++++++++++++++- 1 file changed, 156 insertions(+), 1 deletion(-) diff --git a/docs/secure-connections/sauce-connect-5/logging.md b/docs/secure-connections/sauce-connect-5/logging.md index cdd8d04c80..bf8455dd33 100644 --- a/docs/secure-connections/sauce-connect-5/logging.md +++ b/docs/secure-connections/sauce-connect-5/logging.md @@ -18,9 +18,164 @@ Logs are automatically rotated when running Sauce Connect Proxy 5 as a Linux Sys For other setups, use the `logrotate` utility. :::note -The logrotate integration in Linux and macOS will be available in upcoming **Sauce Connect Proxy 5.2**. +The logrotate integration in Linux and macOS is available in **Sauce Connect Proxy 5.1.2** and later. ::: +### Linux + +When running as a Systemd service, logs are stored in `/var/log/sauce-connect` and rotated automatically. + +For standalone runs, configure logrotate as follows: + +1. Create a directory for log files: + + First, create a directory for Sauce Connect log files or use existing one. + The directory needs to be writable by the user running Sauce Connect. + + ```bash + mkdir -p /path/to/sauce-connect/logs + ``` + +1. Adjust Sauce Connect configuration to write logs to the log file: + + Command line: + + ```bash + sc run ... --log-file /path/to/sauce-connect/logs/sc.log + ``` + + Configuration file: + + ```yaml + log-file: /path/to/sauce-connect/logs/sc.log + ``` + +1. Configure logrotate: + + Create a logrotate configuration file `/etc/logrotate.d/sauce-connect` with the following content: + + ``` + /path/to/sauce-connect/logs/sc.log { + size 100M + rotate 10 + compress + maxage 30 + postrotate + /usr/bin/killall -HUP sc + endscript + } + ``` + + This configuration rotates the log file when it reaches 100MB, keeps 10 rotated files, compresses rotated files, and deletes files older than 30 days. + You can adjust these values to suit your needs. + + For information on available logrotate config file options, check [`man logrotate`](https://linux.die.net/man/8/logrotate). + + You can test the configuration with the following command. + + ```bash + logrotate -d /etc/logrotate.d/sauce-connect + ``` + +### MacOS + +1. Install logrotate: + + First, ensure logrotate is installed via Homebrew. + + ```bash + brew install logrotate + ``` + +1. Create a directory for log files: + + Create a directory for log Sauce Connect files or use existing one. + The directory needs to be writable by the user running Sauce Connect. + + ```bash + mkdir -p /path/to/sauce-connect/logs + ``` + +1. Adjust Sauce Connect configuration to write logs to the log file: + + Command line: + + ```bash + sc run ... --log-file /path/to/sauce-connect/logs/sc.log + ``` + + Configuration file: + + ```yaml + log-file: /path/to/sauce-connect/logs/sc.log + ``` + +1. Configure logrotate: + + Create logrotate configration directory. + + ```bash + sudo mkdir -p /usr/local/etc/logrotate.d + ``` + + Create a logrotate configuration file `/usr/local/etc/logrotate.d/sauce-connect` with the following content: + + ``` + /path/to/sauce-connect/logs/sc.log { + size 100M + rotate 10 + compress + maxage 30 + postrotate + /usr/bin/killall -HUP sc + endscript + } + ``` + + This configuration rotates the log file when it reaches 100MB, keeps 10 rotated files, compresses rotated files, and deletes files older than 30 days. + You can adjust these values to suit your needs. + + + For information on available logrotate config file options, check [`man logrotate`](https://linux.die.net/man/8/logrotate). + + You can test the configuration with the following command. + + ```bash + logrotate -d /usr/local/etc/logrotate.d/sauce-connect + ``` + +1. Create run logrotate script: + + Create `run_logrotate.sh` script with the following content: + + ```bash + #!/bin/sh + /opt/homebrew/sbin/logrotate -s /opt/homebrew/var/run/logrotate.status /usr/local/etc/logrotate.d/* + ``` + + Set execute permissions for the script. + + ```bash + chmod 755 run_logrotate.sh + ``` + +1. Set up periodic job: + + The `periodic` utility runs scripts located in specific directories at daily, weekly, or monthly intervals. + Place your script in `/etc/periodic/daily` for daily execution. + + ```bash + sudo cp run_logrotate.sh /etc/periodic/daily/500.logrotate + ``` + + Manually run the script to test it. + + ```bash + sudo periodic daily + ``` + + Check the logs or the logrotate results to ensure it is functioning as expected. + ### Windows Open Terminal application to run the following commands. From c570d2b7a73983da5ff1dccedf2bc01d3b5a4ea3 Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Thu, 8 Aug 2024 17:07:11 -0700 Subject: [PATCH 29/37] docs: Add npm strictSSL field --- .../cucumberjs-playwright/yaml.md | 38 +++++++++++++++++++ .../automated-testing/cypress/yaml/v1.md | 18 +++++++++ .../automated-testing/playwright/yaml.md | 18 +++++++++ .../automated-testing/testcafe/yaml.md | 18 +++++++++ 4 files changed, 92 insertions(+) diff --git a/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md b/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md index 58d53b70d7..3df16dab7c 100644 --- a/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md +++ b/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md @@ -349,6 +349,7 @@ A parent property specifying the configuration details for any `npm` dependencie ```yaml npm: + strictSSL: true registry: https://registry.npmjs.org registries: - url: https://registry.npmjs.org @@ -530,6 +531,43 @@ To use this feature, make sure that `node_modules` is not ignored via `.sauceign --- +### `packages` + +

    | OPTIONAL | OBJECT |

    + +Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](#including-node-dependencies). + +```yaml +npm: + packages: + lodash: "4.17.20" + "@babel/preset-typescript": "7.12" +``` + +:::caution +Do not use `dependencies` and `packages` at the same time. +::: + +--- + +### `strictSSL` + +

    | OPTIONAL | BOOLEAN |

    + +Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `true` if not set. + +:::note +When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. +::: + +```yaml +npm: + strictSSL: false + package: + "lodash": "4.17.20" +``` +--- + ## `reporters`

    | OPTIONAL | OBJECT |

    diff --git a/docs/web-apps/automated-testing/cypress/yaml/v1.md b/docs/web-apps/automated-testing/cypress/yaml/v1.md index b1340101ed..5ed63148f4 100644 --- a/docs/web-apps/automated-testing/cypress/yaml/v1.md +++ b/docs/web-apps/automated-testing/cypress/yaml/v1.md @@ -563,6 +563,24 @@ Do not use `dependencies` and `packages` at the same time. --- +### `strictSSL` + +

    | OPTIONAL | BOOLEAN |

    + +Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `true` if not set. + +:::note +When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. +::: + +```yaml +npm: + strictSSL: false + package: + "lodash": "4.17.20" +``` +--- + ## `reporters`

    | OPTIONAL | OBJECT |

    diff --git a/docs/web-apps/automated-testing/playwright/yaml.md b/docs/web-apps/automated-testing/playwright/yaml.md index 7f1f2ed3ed..aade5d96d9 100644 --- a/docs/web-apps/automated-testing/playwright/yaml.md +++ b/docs/web-apps/automated-testing/playwright/yaml.md @@ -542,6 +542,24 @@ Do not use `dependencies` and `packages` at the same time. --- +### `strictSSL` + +

    | OPTIONAL | BOOLEAN |

    + +Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `true` if not set. + +:::note +When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. +::: + +```yaml +npm: + strictSSL: false + package: + "lodash": "4.17.20" +``` +--- + ## `reporters`

    | OPTIONAL | OBJECT |

    diff --git a/docs/web-apps/automated-testing/testcafe/yaml.md b/docs/web-apps/automated-testing/testcafe/yaml.md index 1bc724b67e..c3cbf079d9 100644 --- a/docs/web-apps/automated-testing/testcafe/yaml.md +++ b/docs/web-apps/automated-testing/testcafe/yaml.md @@ -546,6 +546,24 @@ Do not use `dependencies` and `packages` at the same time. --- +### `strictSSL` + +

    | OPTIONAL | BOOLEAN |

    + +Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `true` if not set. + +:::note +When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. +::: + +```yaml +npm: + strictSSL: false + package: + "lodash": "4.17.20" +``` +--- + ## `reporters`

    | OPTIONAL | OBJECT |

    From 176daffb65edfd297d7fef731f59bdfede92f536 Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Thu, 8 Aug 2024 23:33:08 -0700 Subject: [PATCH 30/37] complete npm config examples --- docs/web-apps/automated-testing/cypress/yaml/v1.md | 1 + docs/web-apps/automated-testing/playwright/yaml.md | 1 + docs/web-apps/automated-testing/testcafe/yaml.md | 1 + 3 files changed, 3 insertions(+) diff --git a/docs/web-apps/automated-testing/cypress/yaml/v1.md b/docs/web-apps/automated-testing/cypress/yaml/v1.md index 5ed63148f4..54ee9dc94b 100644 --- a/docs/web-apps/automated-testing/cypress/yaml/v1.md +++ b/docs/web-apps/automated-testing/cypress/yaml/v1.md @@ -360,6 +360,7 @@ A parent property specifying the configuration details for any `npm` dependencie ```yaml npm: + strictSSL: true registry: https://registry.npmjs.org registries: - url: https://registry.npmjs.org diff --git a/docs/web-apps/automated-testing/playwright/yaml.md b/docs/web-apps/automated-testing/playwright/yaml.md index aade5d96d9..eae71fd29c 100644 --- a/docs/web-apps/automated-testing/playwright/yaml.md +++ b/docs/web-apps/automated-testing/playwright/yaml.md @@ -343,6 +343,7 @@ A parent property specifying the configuration details for any `npm` dependencie ```yaml npm: + strictSSL: true registry: https://registry.npmjs.org registries: - url: https://registry.npmjs.org diff --git a/docs/web-apps/automated-testing/testcafe/yaml.md b/docs/web-apps/automated-testing/testcafe/yaml.md index c3cbf079d9..99aa417906 100644 --- a/docs/web-apps/automated-testing/testcafe/yaml.md +++ b/docs/web-apps/automated-testing/testcafe/yaml.md @@ -343,6 +343,7 @@ A parent property specifying the configuration details for any `npm` dependencie ```yaml npm: + strictSSL: true registry: https://registry.npmjs.org registries: - url: https://registry.npmjs.org From 7014be2070ba943127ba363ace39e7a7201bdac3 Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Fri, 9 Aug 2024 13:10:58 +0200 Subject: [PATCH 31/37] MOBA-7501: Update the documentation related to time zone-related capabilities (#2878) --- docs/dev/test-configuration-options.md | 77 ++++++++++++++++++++------ 1 file changed, 60 insertions(+), 17 deletions(-) diff --git a/docs/dev/test-configuration-options.md b/docs/dev/test-configuration-options.md index 71fc7413b8..a520b87739 100644 --- a/docs/dev/test-configuration-options.md +++ b/docs/dev/test-configuration-options.md @@ -843,6 +843,63 @@ Using Appium 2? Prevent `appium:`-prefix repetitiveness and start using [`appium --- +### `appium:timeZone` + +

    | OPTIONAL | BOOLEAN | Virtual and Real Devices | Android Only |

    + +Overrides the current device's time zone. This change is done on per-device basis and is +preserved for the whole duration of the test session. The time zone identifier must be a +valid name from [the list of available time zone identifiers](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones), +for example `Europe/Paris`. + +:::note +The iOS equivalent is [`appium:appTimeZone`](#appiumapptimezone). +::: + +:::note +This capability is only supported since UiAutomator2 driver version 3.1.0. +::: + +```java +MutableCapabilities capabilities = new MutableCapabilities(); +capabilities.setCapability("appium:timeZone", "Europe/Paris"); +``` + +:::tip +Using Appium 2? Prevent `appium:`-prefix repetitiveness and start using [`appium:options`](#appiumoptions) for Real Devices instead. +::: + +--- + +### `appium:appTimeZone` + +

    | OPTIONAL | BOOLEAN | Virtual and Real Devices | iOS Only |

    + +Defines the custom time zone override for the application under test. +You can use `UTC`, `PST`, `EST`, as well as place-based timezone names such as `America/Los_Angeles`. +See [the list of available time zone identifiers](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) f +or more details. The same behavior could be achieved by providing a custom +value to the `TZ` environment variable via the `appium:processArguments` capability. + +:::note +The Android equivalent is [`appium:timeZone`](#appiumtimezone). +::: + +:::note +This capability is only supported since XCUITest driver version 7.10.0. +::: + +```java +MutableCapabilities capabilities = new MutableCapabilities(); +capabilities.setCapability("appium:appTimeZone", "America/Los_Angeles"); +``` + +:::tip +Using Appium 2? Prevent `appium:`-prefix repetitiveness and start using [`appium:options`](#appiumoptions) for Real Devices instead. +::: + +--- + ## Mobile Appium Timeout Capabilities As with Selenium Tests, Appium also supports different types of timeouts like: @@ -1559,7 +1616,7 @@ capabilities.setCapability("sauce:options", sauceOptions);

    | OPTIONAL | STRING | Real Devices Only | BETA |

    -Set a network profile with predefined network conditions at the beginning of the session. +Set a network profile with predefined network conditions at the beginning of the session. Please refer to the [list of network profiles](https://docs.saucelabs.com/mobile-apps/features/network-throttling/#predefined-network-profiles) for more information about each profile's network conditions. ```java @@ -2050,15 +2107,8 @@ capabilities.setCapability("sauce:options", sauceOptions); Allows you to set a custom time zone for your test based on a city name. Most major cities are supported. - **For Desktop VMs**: can be configured with custom time zones. This feature should work on all operating systems, however, time zones on Windows VMs are approximate. The time zone defaults to UTC. Look for the "principal cities" examples on this [list of UTC time offsets](https://en.wikipedia.org/wiki/List_of_UTC_time_offsets). -- **For iOS Virtual Devices**: you can use this capability to change the time on the Mac OS X VM, which will be picked up by the iOS simulator. -- **For Android Virtual Devices**: this capability is not supported for Android devices, but for Android 7.2 or later, there is a workaround. Use the following ADB command to grant Appium notification read permission in order to use the time zone capability: - -```java -adb shell cmd notification allow_listener -io.appium.settings/io.appium.settings.NLService -``` - - * See the [Appium Android documentation](http://appium.io/docs/en/writing-running-appium/android/android-shell/#mobile-shell) for additional support. +- **For iOS Virtual Devices**: You can use this capability to change the time on the Mac OS X VM, which will be picked up by the iOS simulator. +- **For Android Virtual Devices**: This capability is not supported for virtual Android devices. Consider using [appium:timeZone](#appiumtimezone) instead. :::note Most web apps serve localization content based on the computer's IP Address, not the time zone set @@ -2168,13 +2218,6 @@ While [Visual Testing](/visual) runs on Sauce Labs servers, the URL gets sent to See [Visual Testing with WebDriver](/visual/e2e-testing/setup) and [Visual Commands and Options](/visual/e2e-testing/commands-options). -### Unsupported Appium Capabilities - -These are currently not supported for real devices: - -- `Edit Timezone`: Appium does not provide a capability to edit the timezone of a device in automated testing on real devices. -- See [Virtual Device Capabilities](#virtual-device-capabilities-sauce-specific--optional) for information about timezone capabilities in a virtual device testing. - :::caution Limitations When running a test on a Virtual Device, be aware that each capability value has a 100 characters limitation. If the value exceeds this limit, it will be truncated, which can lead to further side effects or prevent a job from starting. ::: From ae536817fd08fad712e8d22ef8098c8e0e1dacf8 Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Fri, 9 Aug 2024 09:43:36 -0700 Subject: [PATCH 32/37] correct default value --- docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md | 2 +- docs/web-apps/automated-testing/cypress/yaml/v1.md | 2 +- docs/web-apps/automated-testing/playwright/yaml.md | 2 +- docs/web-apps/automated-testing/testcafe/yaml.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md b/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md index 3df16dab7c..5f3d33c0b1 100644 --- a/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md +++ b/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md @@ -554,7 +554,7 @@ Do not use `dependencies` and `packages` at the same time.

    | OPTIONAL | BOOLEAN |

    -Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `true` if not set. +Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `false` if not set. :::note When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. diff --git a/docs/web-apps/automated-testing/cypress/yaml/v1.md b/docs/web-apps/automated-testing/cypress/yaml/v1.md index 54ee9dc94b..027c349fb3 100644 --- a/docs/web-apps/automated-testing/cypress/yaml/v1.md +++ b/docs/web-apps/automated-testing/cypress/yaml/v1.md @@ -568,7 +568,7 @@ Do not use `dependencies` and `packages` at the same time.

    | OPTIONAL | BOOLEAN |

    -Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `true` if not set. +Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `false` if not set. :::note When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. diff --git a/docs/web-apps/automated-testing/playwright/yaml.md b/docs/web-apps/automated-testing/playwright/yaml.md index eae71fd29c..f214a0c32d 100644 --- a/docs/web-apps/automated-testing/playwright/yaml.md +++ b/docs/web-apps/automated-testing/playwright/yaml.md @@ -547,7 +547,7 @@ Do not use `dependencies` and `packages` at the same time.

    | OPTIONAL | BOOLEAN |

    -Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `true` if not set. +Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `false` if not set. :::note When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. diff --git a/docs/web-apps/automated-testing/testcafe/yaml.md b/docs/web-apps/automated-testing/testcafe/yaml.md index 99aa417906..3c7974cd64 100644 --- a/docs/web-apps/automated-testing/testcafe/yaml.md +++ b/docs/web-apps/automated-testing/testcafe/yaml.md @@ -551,7 +551,7 @@ Do not use `dependencies` and `packages` at the same time.

    | OPTIONAL | BOOLEAN |

    -Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `true` if not set. +Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `false` if not set. :::note When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. From 6c07671061c812fa0a9c2d45cb68594cd2719ed2 Mon Sep 17 00:00:00 2001 From: Rick Foster <115846221+rick-bt@users.noreply.github.com> Date: Fri, 9 Aug 2024 11:02:07 -0700 Subject: [PATCH 33/37] Add js example for node integration guide (#2884) --- .../language-integrations/node.md | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/docs/error-reporting/language-integrations/node.md b/docs/error-reporting/language-integrations/node.md index a85b7b4992..77d8182b73 100644 --- a/docs/error-reporting/language-integrations/node.md +++ b/docs/error-reporting/language-integrations/node.md @@ -51,14 +51,45 @@ $ npm install @backtrace/node Add the following code to your application before all other scripts to report node errors to Backtrace. + + + + ```ts -// Import the BacktraceClient from @backtrace/node with your favorite package manager. +// Import BacktraceClient and BacktraceConfiguration from @backtrace/node import { BacktraceClient, BacktraceConfiguration } from '@backtrace/node'; -// Configure client options +// Configure the submit url to send errors to your project const options: BacktraceConfiguration = { - // Submission url - // is the subdomain of your Backtrace instance (.backtrace.io) + // is the subdomain of your Backtrace instance (.sp.backtrace.io) + // can be found in Project Settings/Submission tokens + url: 'https://submit.backtrace.io///json', +}; + +// Initialize the client with the options +const client = BacktraceClient.initialize(options); + +// By default, Backtrace will send errors for Uncaught Exceptions and Unhandled Promise Rejections + +// You may send errors manually +client.send(new Error('Something broke!')); +``` + + + +```js +// Import BacktraceClient from @backtrace/node +const { BacktraceClient } = require('@backtrace/node'); + +// Configure the submit url to send errors to your project +const options = { + // is the subdomain of your Backtrace instance (.sp.backtrace.io) // can be found in Project Settings/Submission tokens url: 'https://submit.backtrace.io///json', }; @@ -66,11 +97,13 @@ const options: BacktraceConfiguration = { // Initialize the client with the options const client = BacktraceClient.initialize(options); -// By default, Backtrace will send an error for Uncaught Exceptions and Unhandled Promise Rejections +// By default, Backtrace will send errors for Uncaught Exceptions and Unhandled Promise Rejections -// Manually send an error +// You may send errors manually client.send(new Error('Something broke!')); ``` + + ### Upload source maps From 980a4ef8cd58d268928da105ec5a1a8af886c096 Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Mon, 12 Aug 2024 10:14:18 -0700 Subject: [PATCH 34/37] Update docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md Co-authored-by: Alex Plischke --- docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md b/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md index 5f3d33c0b1..e9c6fcf016 100644 --- a/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md +++ b/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md @@ -557,7 +557,7 @@ Do not use `dependencies` and `packages` at the same time. Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `false` if not set. :::note -When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. +If you're using a Sauce Connect tunnel, you must set `strictSSL` to `false`. ::: ```yaml From cba549c11980c8b73a2697f129833fe4a55e567c Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Mon, 12 Aug 2024 10:15:14 -0700 Subject: [PATCH 35/37] apply suggestions --- docs/web-apps/automated-testing/cypress/yaml/v1.md | 2 +- docs/web-apps/automated-testing/playwright/yaml.md | 2 +- docs/web-apps/automated-testing/testcafe/yaml.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/web-apps/automated-testing/cypress/yaml/v1.md b/docs/web-apps/automated-testing/cypress/yaml/v1.md index 027c349fb3..53df6d3971 100644 --- a/docs/web-apps/automated-testing/cypress/yaml/v1.md +++ b/docs/web-apps/automated-testing/cypress/yaml/v1.md @@ -571,7 +571,7 @@ Do not use `dependencies` and `packages` at the same time. Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `false` if not set. :::note -When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. +If you're using a Sauce Connect tunnel, you must set `strictSSL` to `false`. ::: ```yaml diff --git a/docs/web-apps/automated-testing/playwright/yaml.md b/docs/web-apps/automated-testing/playwright/yaml.md index f214a0c32d..f130d67ec7 100644 --- a/docs/web-apps/automated-testing/playwright/yaml.md +++ b/docs/web-apps/automated-testing/playwright/yaml.md @@ -550,7 +550,7 @@ Do not use `dependencies` and `packages` at the same time. Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `false` if not set. :::note -When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. +If you're using a Sauce Connect tunnel, you must set `strictSSL` to `false`. ::: ```yaml diff --git a/docs/web-apps/automated-testing/testcafe/yaml.md b/docs/web-apps/automated-testing/testcafe/yaml.md index 3c7974cd64..a90b7d7d0d 100644 --- a/docs/web-apps/automated-testing/testcafe/yaml.md +++ b/docs/web-apps/automated-testing/testcafe/yaml.md @@ -554,7 +554,7 @@ Do not use `dependencies` and `packages` at the same time. Instructs npm to perform SSL key validation when making requests to the registry via HTTPS (`true`) or not (`false`). Defaults to `false` if not set. :::note -When running tests and installing packages via a Sauce Connect tunnel, it is required to set `strictSSL` to `false`. +If you're using a Sauce Connect tunnel, you must set `strictSSL` to `false`. ::: ```yaml From a6e10a28fc6f2e5ec0c359393b1604f7e8dec1db Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Mon, 12 Aug 2024 10:21:13 -0700 Subject: [PATCH 36/37] fix broken links --- docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md | 2 +- docs/web-apps/automated-testing/cypress/yaml/v1.md | 2 +- docs/web-apps/automated-testing/playwright/yaml.md | 2 +- docs/web-apps/automated-testing/testcafe/yaml.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md b/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md index e9c6fcf016..c2a95d3dc6 100644 --- a/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md +++ b/docs/web-apps/automated-testing/cucumberjs-playwright/yaml.md @@ -535,7 +535,7 @@ To use this feature, make sure that `node_modules` is not ignored via `.sauceign

    | OPTIONAL | OBJECT |

    -Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](#including-node-dependencies). +Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](advanced.md#including-node-dependencies). ```yaml npm: diff --git a/docs/web-apps/automated-testing/cypress/yaml/v1.md b/docs/web-apps/automated-testing/cypress/yaml/v1.md index 53df6d3971..49b67c5b9b 100644 --- a/docs/web-apps/automated-testing/cypress/yaml/v1.md +++ b/docs/web-apps/automated-testing/cypress/yaml/v1.md @@ -519,7 +519,7 @@ npm:

    | OPTIONAL | OBJECT |

    -Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](#including-node-dependencies). +Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](advanced.md#including-node-dependencies). ```yaml npm: diff --git a/docs/web-apps/automated-testing/playwright/yaml.md b/docs/web-apps/automated-testing/playwright/yaml.md index f130d67ec7..79197e0e72 100644 --- a/docs/web-apps/automated-testing/playwright/yaml.md +++ b/docs/web-apps/automated-testing/playwright/yaml.md @@ -500,7 +500,7 @@ npm:

    | OPTIONAL | OBJECT |

    -Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](#including-node-dependencies). +Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](advanced.md#including-node-dependencies). ```yaml npm: diff --git a/docs/web-apps/automated-testing/testcafe/yaml.md b/docs/web-apps/automated-testing/testcafe/yaml.md index a90b7d7d0d..0e8342575f 100644 --- a/docs/web-apps/automated-testing/testcafe/yaml.md +++ b/docs/web-apps/automated-testing/testcafe/yaml.md @@ -502,7 +502,7 @@ npm:

    | OPTIONAL | OBJECT |

    -Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](#including-node-dependencies). +Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](advanced.md#including-node-dependencies). ```yaml npm: From eedb75e3b79e6c75037db7c212693a13527477c2 Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Mon, 12 Aug 2024 10:22:25 -0700 Subject: [PATCH 37/37] fix link for cypress --- docs/web-apps/automated-testing/cypress/yaml/v1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/web-apps/automated-testing/cypress/yaml/v1.md b/docs/web-apps/automated-testing/cypress/yaml/v1.md index 49b67c5b9b..61abd579ad 100644 --- a/docs/web-apps/automated-testing/cypress/yaml/v1.md +++ b/docs/web-apps/automated-testing/cypress/yaml/v1.md @@ -519,7 +519,7 @@ npm:

    | OPTIONAL | OBJECT |

    -Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](advanced.md#including-node-dependencies). +Specifies any npm packages that are required to run tests and should, therefore, be installed on the Sauce Labs VM. See [Including Node Dependencies](../advanced.md#including-node-dependencies). ```yaml npm: