diff --git a/docs.json b/docs.json index 79f772a58..2ec34171c 100644 --- a/docs.json +++ b/docs.json @@ -1,7 +1,7 @@ { "$schema": "https://mintlify.com/docs.json", "theme": "aspen", - "name": "LambdaTest", + "name": "TestMu AI (Formerly LambdaTest)", "colors": { "primary": "#c24e00", "light": "#c24e00", @@ -42,50 +42,2143 @@ { "tab": "Docs", "icon": "book-open-lines", + "pages": [ + "docs/index" + ] + }, + { + "tab": "Kane CLI", + "icon": "terminal", + "pages": [ + { + "group": "Kane CLI", + "pages": [ + { + "group": "Getting Started", + "pages": [ + "docs/kane-cli-introduction", + "docs/kane-cli-installation", + "docs/kane-cli-authentication", + "docs/kane-cli-quickstart" + ], + "expanded": false + }, + { + "group": "Core Concepts", + "pages": [ + "docs/kane-cli-modes", + "docs/kane-cli-configuration", + "docs/kane-cli-writing-objectives", + "docs/kane-cli-variables-and-context", + "docs/kane-cli-generate", + "docs/kane-cli-generate-workflow" + ], + "expanded": false + }, + { + "group": "Checkpoints", + "pages": [ + "docs/kane-cli-checkpoints", + "docs/kane-cli-checkpoint-visual", + "docs/kane-cli-checkpoint-textual", + "docs/kane-cli-checkpoint-title", + "docs/kane-cli-checkpoint-url", + "docs/kane-cli-checkpoint-devtools", + "docs/kane-cli-checkpoint-devtools-console", + "docs/kane-cli-checkpoint-devtools-cookies", + "docs/kane-cli-checkpoint-devtools-localstorage", + "docs/kane-cli-checkpoint-devtools-network", + "docs/kane-cli-checkpoint-devtools-performance" + ], + "expanded": false + }, + { + "group": "Integrations & Automation", + "pages": [ + "docs/kane-cli-tms-integration", + "docs/kane-cli-cicd", + "docs/kane-cli-parallel-execution" + ], + "expanded": false + }, + { + "group": "Agent Mode", + "pages": [ + "docs/kane-cli-agent-mode", + "docs/kane-cli-skills" + ], + "expanded": false + }, + { + "group": "Reference", + "pages": [ + "docs/kane-cli-cli-reference", + "docs/kane-cli-error-codes", + "docs/kane-cli-troubleshooting", + "docs/kane-cli-changelog", + "docs/kane-cli-testmd" + ], + "expanded": false + } + ] + } + ] + }, + { + "tab": "Browser Cloud", + "icon": "cloud", + "pages": [ + { + "group": "Browser Cloud", + "pages": [ + { + "group": "Get Started", + "pages": [ + "docs/browser-cloud-intro", + "docs/browser-cloud-quickstart", + "docs/browser-cloud-quick-actions", + "docs/browser-cloud-skills" + ], + "expanded": false + }, + { + "group": "Connect & Manage Sessions", + "pages": [ + "docs/browser-cloud-how-to-connect", + "docs/browser-cloud-connect", + "docs/browser-cloud-sessions-overview", + "docs/browser-cloud-session-lifecycle" + ], + "expanded": false + }, + { + "group": "Persist Login & State", + "pages": [ + "docs/browser-cloud-profiles", + "docs/browser-cloud-context" + ], + "expanded": false + }, + { + "group": "Make Your Agent Production-Ready", + "pages": [ + "docs/browser-cloud-stealth", + "docs/browser-cloud-tunnel", + "docs/browser-cloud-files", + "docs/browser-cloud-extensions", + "docs/browser-cloud-parallel-sessions" + ], + "expanded": false + }, + { + "group": "View & Debug Sessions", + "pages": [ + "docs/browser-cloud-debugging" + ], + "expanded": false + }, + { + "group": "Reference", + "pages": [ + "docs/browser-cloud-session-configuration", + "docs/browser-cloud-api-reference" + ], + "expanded": false + } + ] + } + ] + }, + { + "tab": "MCP Server", + "icon": "plug", + "pages": [ + { + "group": "MCP Server", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/testmu-mcp-server" + ] + }, + { + "group": "MCP Tools for Products", + "expanded": false, + "pages": [ + "docs/automation-mcp-server", + "docs/hyperexecute-mcp-server", + "docs/accessibility-mcp-server", + "docs/smartui-mcp-server" + ] + } + ] + } + ] + }, + { + "tab": "Agent Testing", + "icon": "robot", + "pages": [ + { + "group": "Agent Testing", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/ai-agent-testing-platform-overview", + "docs/agent-features-and-metrics", + "docs/testing-your-first-ai-agent", + "docs/testmu-a2a-cli", + "docs/chat-agent-api-integration" + ] + }, + { + "group": "Reference", + "expanded": false, + "pages": [ + "docs/getting-started-with-agent-testing-platform", + "docs/agent-testing-platform-faqs" + ] + } + ] + } + ] + }, + { + "tab": "Kane AI", + "icon": "robot", + "pages": [ + { + "group": "Kane AI", + "pages": [ + { + "group": "Get Started", + "pages": [ + "docs/getting-started-with-kane-ai", + "docs/author-your-first-desktop-browser-test", + "docs/author-your-first-mobile-browser-test", + "docs/author-your-first-mobile-app-test", + "docs/kane-ai-test-plan" + ], + "expanded": false + }, + { + "group": "Write Test Steps", + "pages": [ + "docs/kane-ai-command-guide", + "docs/kaneai-kb-finding-and-interacting-with-elements", + "docs/kaneai-kb-forms-inputs-and-data-entry", + "docs/kaneai-kb-assertions-and-validation", + "docs/kaneai-kb-dynamic-content-waits-and-page-state", + "docs/kaneai-manual-interaction", + "docs/kane-ai-click-interactions", + "docs/kane-ai-scroll-in-feature", + "docs/kane-ai-drag-drop", + "docs/kane-ai-javascript-execution", + "docs/kaneai-rename-instructions", + "docs/kane-ai-web-test-writing-guidelines", + "docs/kaneai-edit-test-steps", + "docs/kaneai-kb-js-snippets-and-workarounds" + ], + "expanded": false + }, + { + "group": "Use Test Data", + "pages": [ + "docs/kane-ai-using-variables", + "docs/kane-ai-secrets", + "docs/kane-ai-smart-variables", + "docs/kane-ai-using-parameters", + "docs/kane-ai-using-datasets", + "docs/kane-ai-using-json-variables", + "docs/kaneai-variables-and-parameters", + "docs/test-data-generation" + ], + "expanded": false + }, + { + "group": "Add Logic & Reusable Modules", + "pages": [ + "docs/kaneai-conditional-logic", + "docs/kaneai-while-loops", + "docs/kane-ai-modules", + "docs/kaneai-bulk-module-update", + "docs/kaneai-modules-versions-and-enhancement" + ], + "expanded": false + }, + { + "group": "Test APIs, Databases & Visual UI", + "pages": [ + "docs/kaneai-kb-authentication-and-session-management", + "docs/kaneai-totp", + "docs/kane-ai-api-testing", + "docs/kaneai-database", + "docs/kaneai-upload-and-download-files", + "docs/kaneai-smartui-visual-testing", + "docs/kane-ai-network-assertions", + "docs/kaneai-kb-api-testing-and-network-assertions" + ], + "expanded": false + }, + { + "group": "Configure the Test Session", + "pages": [ + "docs/kaneai-advanced-settings", + "docs/kaneai-chrome-options", + "docs/kaneai-custom-headers", + "docs/kane-ai-geolocation-tunnel-proxy", + "docs/kaneai-smart-locator-priority" + ], + "expanded": false + }, + { + "group": "Test Native Mobile Apps", + "pages": [ + "docs/kaneai-kb-mobile-app-testing-patterns", + "docs/kane-ai-deeplink-support", + "docs/kaneai-gps-location", + "docs/kaneai-network-throttling", + "docs/kaneai-mobile-app-accessibility", + "docs/kane-ai-mobile-app-capabilities", + "docs/kaneai-scroll-until-mobile" + ], + "expanded": false + }, + { + "group": "Run Tests", + "pages": [ + "docs/kaneai-hyperexecute-test-run-execution", + "docs/test-runs-configurations", + "docs/kaneai-sequential-test-runs", + "docs/kaneai-scheduled-test-runs", + "docs/kaneai-dynamic-url-replacement" + ], + "expanded": false + }, + { + "group": "Debug & Triage Failures", + "pages": [ + "docs/kaneai-test-run-instance-view", + "docs/kaneai-failure-conditions", + "docs/kaneai-auto-heal" + ], + "expanded": false + }, + { + "group": "Scale & Automate", + "pages": [ + "docs/kaneai-ci-cd-automation", + "docs/kane-ai-jira-integration", + "docs/kaneai-github-app", + "docs/kane-ai-automation-code-generation", + "docs/kaneai-create-pr" + ], + "expanded": false + }, + { + "group": "Reference & Troubleshooting", + "pages": [ + "docs/kaneai-kb-knowledge-base-index", + "docs/kane-ai-app-test-writing-guidelines", + "docs/error-handling-kaneai", + "docs/kaneai-faqs", + "docs/kane-ai-free-trial-is-here", + "docs/kaneai-release-notes", + "docs/kaneai-release-notes-0-0-2", + "docs/kaneai-release-notes-0-0-1" + ], + "expanded": false + } + ] + } + ] + }, + { + "tab": "HyperExecute", + "icon": "bolt", + "pages": [ + { + "group": "HyperExecute", + "pages": [ + { + "group": "Getting Started", + "pages": [ + "docs/getting-started-with-hyperexecute", + "docs/hyperexecute-vs-traditional-test-grids", + "docs/key-features-of-hyperexecute" + ], + "expanded": false + }, + { + "group": "Set Up & Authenticate", + "pages": [ + "docs/hyperexecute-environment-variable-setup", + "docs/hyperexecute-how-to-configure-tunnel" + ], + "expanded": false + }, + { + "group": "Run Your First Job", + "pages": [ + "docs/hyperexecute-running-your-first-job", + "docs/hyperexecute-guided-walkthrough", + "docs/hyperexecute-cli-gui", + "docs/saucelabs-to-hyperexecute-migrate", + "docs/hyperexecute-supported-languages-and-frameworks" + ], + "expanded": false + }, + { + "group": "Configure Your YAML", + "pages": [ + "docs/deep-dive-into-hyperexecute-yaml", + "docs/hyperexecute-generate-sample-yaml", + "docs/hyperexecute-yaml-version0.2", + "docs/hyperexecute-inherit-config", + "docs/hyperexecute-snooper", + "docs/hyperexecute-yaml-capability-overrides", + "docs/hyperexecute-how-to-configure-os-and-browser", + "docs/hyperexecute-how-to-configure-sourcePayload", + "docs/hyperexecute-gitignore", + "docs/hyperexecute-how-to-save-and-manage-secrets", + "docs/hyperexecute-how-to-manage-project-level-secrets", + "docs/hyperexecute-build-mobile-apps-using-tools", + "docs/hyperexecute-testng-use-cases", + "docs/hyperexecute-python-use-cases", + "docs/hyperexecute-csharp-use-cases", + "docs/hyperexecute-yaml-creation-for-playwright", + "docs/hyperexecute-how-to-perform-dependent-test-based-discovery", + "docs/hyperexecute-how-to-perform-group-based-test-discovery-in-testng" + ], + "expanded": false + }, + { + "group": "Scale Your Test Runs", + "pages": [ + "docs/hyperexecute-test-splitting-and-multiplexing", + "docs/hyperexecute-auto-split-strategy", + "docs/hyperexecute-matrix-multiplexing-strategy", + "docs/hyperexecute-hybrid-strategy", + "docs/hyperexecute-how-to-find-correct-concurrency", + "docs/hyperexecute-shared-cloud-usage-limit", + "docs/hyperexecute-prioritize-tests", + "docs/hyperexecute-failfast", + "docs/hyperexecute-test-muting", + "docs/hyperexecute-rerun-failed-tests", + "docs/hyperexecute-background-services", + "docs/hyperexecute-auto-healing", + "docs/hyperexecute-projects", + "docs/hyperexecute-workflows", + "docs/hyperexecute-test-chains", + "docs/hyperexecute-jobs-archiving", + "docs/hyperexecute-how-smart-caching-boosts-tests-speed", + "docs/hyperexecute-org-product-preferences" + ], + "expanded": false + }, + { + "group": "View Results & Reports", + "pages": [ + "docs/hyperexecute-status", + "docs/hyperexecute-reports", + "docs/hyperexecute-artifacts", + "docs/error-categorization-report", + "docs/hyperexecute-task-metrics", + "docs/ai-test-failure-analysis", + "docs/hyperexecute-widgets", + "docs/hyperexecute-test-widgets" + ], + "expanded": false + }, + { + "group": "Debug Failed Jobs", + "pages": [ + "docs/hyperexecute-how-to-debug-job", + "docs/hyperexecute-cli-errors", + "docs/hyperexecute-pre-steps-error", + "docs/hyperexecute-scenario-steps-error", + "docs/hyperexecute-how-to-resolve-version-conflict" + ], + "expanded": false + }, + { + "group": "Set Up Private Cloud", + "pages": [ + "docs/hyperexecute-private-cloud-benefits", + "docs/hyperexecute-private-cloud-setup-with-azure", + "docs/hyperexecute-private-cloud-setup-with-aws", + "docs/hyperexecute-private-cloud-on-jumphost", + "docs/hyperexecute-vnet-peering-for-private-cloud", + "docs/hyperexecute-github-app-integration" + ], + "expanded": false + }, + { + "group": "Integrate With SmartUI (Visual Testing)", + "pages": [ + "docs/smart-ui-testing", + "docs/hyperexecute-smart-ui-capture-onboarding", + "docs/hyperexecute-smart-ui-testing-using-selenium", + "docs/hyperexecute-smart-ui-testing-using-cypress", + "docs/hyperexecute-smart-ui-test-using-playwright", + "docs/hyperexecute-smart-ui-sdk-selenium-javascript", + "docs/hyperexecute-smart-ui-sdk-maestro" + ], + "expanded": false + }, + { + "group": "Integrate with CI/CD", + "pages": [ + "docs/cicd-with-hyperexecute-grid", + "docs/github-actions-with-hyperexecute", + "docs/gitlab-integration-with-hyperexecute", + "docs/jenkins-with-hyperexecute", + "docs/bitbucket-pipeline-with-hyperexecute", + "docs/circle-ci-with-hyperexecute", + "docs/azure-with-hyperexecute", + "docs/aws-codepipeline-with-hyperexecute", + "docs/travis-ci-with-hyperexecute", + "docs/teamcity-with-hyperexecute", + "docs/gocd-integration-with-hyperexecute", + "docs/bamboo-integration-with-hyperexecute", + "docs/semaphore-integration-with-hyperexecute" + ], + "expanded": false + }, + { + "group": "Integrate Test Tools", + "pages": [ + "docs/hyperexecute-integration-with-products", + "docs/hyperexecute-azure-test-plan", + "docs/tosca-integration-with-hyperexecute-using-commander", + "docs/tosca-integration-with-hyperexecute-using-dex", + "docs/tosca-integration-with-hyperexecute-for-sap", + "docs/hyperexecute-accelq-integration", + "docs/hyperexecute-algoqa-integration", + "docs/katalon-integration-with-hyperexecute", + "docs/hyperexecute-provar-integration", + "docs/hyperexecute-qtest-integration", + "docs/hyperexecute-sikuli-integration", + "docs/hyperexecute-testim-integration", + "docs/hyperexecute-testsigma-integration", + "docs/hyperexecute-winapp-integration", + "docs/hyperexecute-zephyr-integration", + "docs/hyperexecute-slack-integration" + ], + "expanded": false + }, + { + "group": "Reference", + "pages": [ + "docs/hyperexecute-cli-run-tests-on-hyperexecute-grid", + "docs/hyperexecute-browser-list-api", + "docs/hyperexecute-supported-languages-and-packages", + "docs/hyperexecute-emu-simu-devices-list" + ], + "expanded": false + }, + { + "group": "Troubleshoot & FAQs", + "pages": [ + "docs/hyperexecute-general-faqs", + "docs/hyperexecute-yaml-faqs", + "docs/hyperexecute-cli-faqs", + "docs/hyperexecute-feature-faqs", + "docs/hyperexecute-platform-faqs", + "docs/hyperexecute-pricing-faqs", + "docs/hyperexecute-security-faqs", + "docs/hyperexecute-enterprise-faqs" + ], + "expanded": false + }, + { + "group": "Release Notes", + "pages": [ + "docs/hyperexecute-release-notes", + "docs/hyperexecute-release-notes-2025", + "docs/hyperexecute-release-notes-2024", + "docs/hyperexecute-release-notes-2023", + "docs/hyperexecute-cli-release-notes-0-2-249", + "docs/hyperexecute-mcp-server-release-notes-1-0-0" + ], + "expanded": false + } + ] + } + ] + }, + { + "tab": "SmartUI", + "icon": "image", + "pages": [ + { + "group": "SmartUI", + "pages": [ + { + "group": "Get Started", + "pages": [ + "docs/smart-visual-regression-testing", + "docs/smartui-running-your-first-project", + "docs/smart-visual-testing" + ], + "expanded": false + }, + { + "group": "Run Tests With the SDK", + "pages": [ + "docs/smartui-selenium-java-sdk", + "docs/smartui-selenium-js-sdk", + "docs/smartui-selenium-csharp-sdk", + "docs/smartui-selenium-python-sdk", + "docs/smartui-selenium-ruby-sdk", + "docs/smartui-playwright-sdk", + "docs/smartui-playwright-java-sdk", + "docs/smartui-playwright-python-sdk", + "docs/smartui-cypress-sdk", + "docs/smartui-puppeteer-sdk", + "docs/smartui-wdio-sdk", + "docs/smartui-testcafe-sdk", + "docs/smartui-k6-setup", + "docs/smartui-katalon-plugin" + ], + "expanded": false + }, + { + "group": "Run Tests With Hooks", + "pages": [ + "docs/selenium-visual-regression", + "docs/playwright-visual-regression", + "docs/puppeteer-visual-regression", + "docs/smart-ui-cypress", + "docs/smartui-hooks-element-screenshot", + "docs/smartui-hooks-layout-fullpage-smartignore" + ], + "expanded": false + }, + { + "group": "Test Mobile Apps", + "pages": [ + "docs/smartui-appium-sdk", + "docs/smartui-appium-java-sdk", + "docs/smartui-appium-hooks", + "docs/espresso-visual-regression", + "docs/xcui-visual-regression" + ], + "expanded": false + }, + { + "group": "Capture via CLI & API", + "pages": [ + "docs/smartui-cli", + "docs/smartui-cli-upload", + "docs/smartui-upload-api-v2" + ], + "expanded": false + }, + { + "group": "Test Designs, Components & Documents", + "pages": [ + "docs/smartui-storybook-integration", + "docs/smartui-cli-figma", + "docs/smartui-cli-figma-web", + "docs/smartui-cli-figma-app", + "docs/smartui-pdf-comparison" + ], + "expanded": false + }, + { + "group": "Review & Manage Results", + "pages": [ + "docs/smartui-automation-dashboard", + "docs/smartui-guided-walkthrough", + "docs/smartui-diff-highlighter", + "docs/smartui-draw-on-ui", + "docs/smartui-multiselect-bulkops", + "docs/smartui-smart-comments", + "docs/smartui-export-build-data", + "docs/smartui-audit-logs", + "docs/smartui-group-by-test-cases", + "docs/smartui-slack-integration" + ], + "expanded": false + }, + { + "group": "Manage Baselines", + "pages": [ + "docs/smartui-baseline-management", + "docs/smartui-approval-workflow-guide", + "docs/smartui-ab-testing-variations" + ], + "expanded": false + }, + { + "group": "AI Insights & Root Cause", + "pages": [ + "docs/smartui-visual-ai-agent", + "docs/smartui-root-cause-analysis" + ], + "expanded": false + }, + { + "group": "Stabilize Screenshots", + "pages": [ + "docs/smartui-smartignore", + "docs/smartui-handle-dynamic-data", + "docs/smartui-handle-lazy-loading", + "docs/smartui-handle-sticky-elements", + "docs/smartui-handle-videos", + "docs/smartui-customscroll", + "docs/smartui-freeze-animations", + "docs/smartui-custom-css", + "docs/smartui-iframes-and-embedded-content", + "docs/smartui-shadow-dom" + ], + "expanded": false + }, + { + "group": "Tune Comparison & Thresholds", + "pages": [ + "docs/smartui-layout-comparison", + "docs/smartui-mismatch-thresholds", + "docs/test-settings-options", + "docs/smartui-project-settings", + "docs/smart-ui-build-options" + ], + "expanded": false + }, + { + "group": "Configure Capture & Environment", + "pages": [ + "docs/smartui-sdk-config-options", + "docs/smartui-sdk-capabilities", + "docs/smartui-cli-env-variables", + "docs/smartui-cli-exec", + "docs/smartui-cli-build-name", + "docs/smartui-cli-responsive-dom", + "docs/smartui-sdk-tunnel", + "docs/smartui-cli-basic-auth", + "docs/smartui-cli-request-headers", + "docs/smartui-multiple-assets-hosts" + ], + "expanded": false + }, + { + "group": "Git Baseline Workflows", + "pages": [ + "docs/smartui-cli-git-branching", + "docs/smartui-git-branching", + "docs/smartui-smart-git-strategy", + "docs/smartui-branch-merging", + "docs/smartui-build-merging", + "docs/smartui-multiple-projects-per-repo" + ], + "expanded": false + }, + { + "group": "Integrate With CI/CD Tools", + "pages": [ + "docs/smartui-with-github-actions", + "docs/smartui-with-gitlab", + "docs/smartui-with-azure", + "docs/smartui-with-bitbucket", + "docs/smartui-with-circle-ci", + "docs/smartui-with-travis-ci", + "docs/smartui-with-semaphore", + "docs/smartui-with-buildkite", + "docs/smartui-with-netlify" + ], + "expanded": false + }, + { + "group": "PR Status Checks", + "pages": [ + "docs/smartui-github-app-integration", + "docs/smartui-gitlab-pr-checks-exec" + ], + "expanded": false + }, + { + "group": "Reference & Troubleshooting", + "pages": [ + "docs/smartui-cli-complete-reference", + "docs/smartui-sdk-fetch-results", + "docs/smartui-troubleshooting-guide" + ], + "expanded": false + } + ] + } + ] + }, + { + "tab": "Test Manager", + "icon": "clipboard-check", + "pages": [ + { + "group": "Test Management", + "pages": [ + { + "group": "Get Started", + "pages": [ + "docs/test-manager" + ], + "expanded": false + }, + { + "group": "Set Up Your Project", + "pages": [ + "docs/create-projects", + "docs/system-and-custom-fields" + ], + "expanded": false + }, + { + "group": "Create & Import Test Cases", + "pages": [ + "docs/manual-test-case-creation", + "docs/generate-test-cases", + "docs/csv-import", + "docs/one-click-migration-from-testrail", + "docs/one-click-migration-from-xray", + "docs/one-click-migration-from-zephyr-scale" + ], + "expanded": false + }, + { + "group": "Organize & Maintain Test Cases", + "pages": [ + "docs/test-case-repository", + "docs/test-case-versioning", + "docs/create-modules", + "docs/copy-and-move-support-for-test-cases", + "docs/bulk-update-fields", + "docs/export-test-cases" + ], + "expanded": false + }, + { + "group": "Run Tests & Track Execution", + "pages": [ + "docs/test-run-creation-and-management", + "docs/sync-test-instance", + "docs/test-instance-audit-logs", + "docs/milestone-creation-and-management" + ], + "expanded": false + }, + { + "group": "Link Automated Tests", + "pages": [ + "docs/automated-test-cases-with-ai", + "docs/automated-test-cases-linked-using-dashboard", + "docs/automated-test-cases-linked-using-capability", + "docs/manual-to-automated-test-conversion" + ], + "expanded": false + }, + { + "group": "Track Defects with Jira & Azure DevOps", + "pages": [ + "docs/track-issues-in-test-runs", + "docs/link-jira-issues-with-test-manager", + "docs/link-ado-issues-with-test-manager" + ], + "expanded": false + }, + { + "group": "Analyze Results", + "pages": [ + "docs/insights-dashboard", + "docs/tms-reports" + ], + "expanded": false + } + ] + } + ] + }, + { + "tab": "Accessibility", + "icon": "universal-access", + "pages": [ + { + "group": "Accessibility Testing", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/accessibility-testing" + ] + }, + { + "group": "Scan With DevTools", + "expanded": false, + "pages": [ + "docs/accessibility-devtools", + "docs/accessibility-testing-run-quick-scan", + "docs/accessibility-testing-full-page-scanner", + "docs/accessibility-testing-partial-page-scanner", + "docs/accessibility-testing-multi-page-scanner", + "docs/accessibility-testing-workflow-scanner", + "docs/accessibility-keyboard-scan", + "docs/accessibility-pdf-accessibility-scanning", + "docs/accessibility-devtools-settings", + "docs/accessibility-fragment-identifier", + "docs/accessibility-update-devtools-extension" + ] + }, + { + "group": "Automate Accessibility Tests", + "expanded": false, + "pages": [ + "docs/accessibility-automation", + "docs/accessibility-supported-languages-and-frameworks", + "docs/accessibility-automation-settings", + "docs/accessibility-capture-screenshot", + "docs/deque-integration" + ] + }, + { + "group": "Schedule Recurring Scans", + "expanded": false, + "pages": [ + "docs/accessibility-test-scheduling", + "docs/accessibility-test-scheduling-scan", + "docs/accessibility-sitemap-extraction-url-import", + "docs/accessibility-test-scheduling-crawler", + "docs/accessibility-test-scheduling-login-authentication", + "docs/accessibility-test-scheduling-edit" + ] + }, + { + "group": "Test Mobile App Accessibility", + "expanded": false, + "pages": [ + "docs/accessibility-app-scanner", + "docs/accessibility-settings-ios", + "docs/accessibility-tag-support" + ] + }, + { + "group": "Test with Screen Readers", + "expanded": false, + "pages": [ + "docs/screen-reader-on-accessibility", + "docs/accessibility-nvda-windows", + "docs/accessibility-jaws-windows", + "docs/accessibility-voiceover-macos", + "docs/accessibility-talkback-android", + "docs/screen-reader-on-real-devices-app", + "docs/screen-reader-on-real-devices-browser", + "docs/screen-reader-voiceover-real-devices-app", + "docs/screen-reader-voiceover-real-devices-browser" + ] + }, + { + "group": "View Your Scan Results", + "expanded": false, + "pages": [ + "docs/accessibility-testing-navigating-dashboard", + "docs/accessibility-testing-dashboard-issue-summary", + "docs/accessibility-testing-dashboard-all-issues", + "docs/accessibility-web-score", + "docs/accessibility-passed-test-cases" + ] + }, + { + "group": "Fix & Share Issues", + "expanded": false, + "pages": [ + "docs/accessibility-ai-issue-detection-agent", + "docs/accessibility-issue-remediation-guide", + "docs/accessibility-hide-restore-issues", + "docs/accessibility-exporting-sharing-reports", + "docs/accessibility-report-integrations", + "docs/accessibility-report-bug", + "docs/accessibility-vpat-report-generation" + ] + }, + { + "group": "Run at Scale (HyperExecute & CI/CD)", + "expanded": false, + "pages": [ + "docs/selenium-hyperexecute-accessibility-tests", + "docs/cypress-v10-hyprerexecute-accessibility-tests", + "docs/cypress-v9-hyprerexecute-accessibility-tests", + "docs/accessibility-cicd-integration-guide" + ] + }, + { + "group": "Web WCAG Rule Reference", + "expanded": false, + "pages": [ + "docs/accessibility-web-what-we-cover", + "docs/accessibility-web-rule-repository", + "docs/accessibility-web-rule-1-1-1-non-text-content", + "docs/accessibility-web-rule-1-3-1-info-and-relationships", + "docs/accessibility-web-rule-1-3-4-orientation", + "docs/accessibility-web-rule-1-4-1-use-of-color", + "docs/accessibility-web-rule-1-4-2-audio-control", + "docs/accessibility-web-rule-1-4-3-contrast-minimum", + "docs/accessibility-web-rule-1-4-10-reflow", + "docs/accessibility-web-rule-1-4-11-non-text-contrast", + "docs/accessibility-web-rule-1-4-12-text-spacing", + "docs/accessibility-web-rule-2-1-1-keyboard", + "docs/accessibility-web-rule-2-1-2-no-keyboard-trap", + "docs/accessibility-web-rule-2-1-4-character-key-shortcuts", + "docs/accessibility-web-rule-2-2-1-timing-adjustable", + "docs/accessibility-web-rule-2-2-2-pause-stop-hide", + "docs/accessibility-web-rule-2-3-1-three-flashes", + "docs/accessibility-web-rule-2-4-1-bypass-blocks", + "docs/accessibility-web-rule-2-4-2-page-titled", + "docs/accessibility-web-rule-2-4-3-focus-order", + "docs/accessibility-web-rule-2-4-4-link-purpose", + "docs/accessibility-web-rule-2-4-7-focus-visible", + "docs/accessibility-web-rule-2-4-11-focus-not-obscured", + "docs/accessibility-web-rule-2-5-1-pointer-gestures", + "docs/accessibility-web-rule-2-5-2-pointer-cancellation", + "docs/accessibility-web-rule-2-5-3-label-in-name", + "docs/accessibility-web-rule-2-5-4-motion-actuation", + "docs/accessibility-web-rule-2-5-7-dragging-movements", + "docs/accessibility-web-rule-2-5-8-target-size", + "docs/accessibility-web-rule-3-2-1-on-focus", + "docs/accessibility-web-rule-3-2-2-on-input", + "docs/accessibility-web-rule-3-2-6-consistent-help", + "docs/accessibility-web-rule-3-3-1-error-identification", + "docs/accessibility-web-rule-3-3-2-labels-or-instructions", + "docs/accessibility-web-rule-3-3-7-redundant-entry", + "docs/accessibility-web-rule-3-3-8-accessible-authentication", + "docs/accessibility-web-rule-4-1-1-parsing", + "docs/accessibility-web-rule-4-1-2-name-role-value", + "docs/accessibility-web-rule-4-1-3-status-messages" + ] + }, + { + "group": "Android WCAG Rule Reference", + "expanded": false, + "pages": [ + "docs/accessibility-android-what-we-cover", + "docs/accessibility-android-what-we-do-not-cover", + "docs/accessibility-android-rules", + "docs/accessibility-android-rule-repository", + "docs/accessibility-android-rule-fixed-orientation-lock", + "docs/accessibility-android-rule-inaccessible-text-focus", + "docs/accessibility-android-rule-insufficient-color-ratio", + "docs/accessibility-android-rule-insufficient-target-spacing", + "docs/accessibility-android-rule-interactive-role-undefined", + "docs/accessibility-android-rule-mismatched-label-text", + "docs/accessibility-android-rule-misplaced-field-label", + "docs/accessibility-android-rule-missing-field-label", + "docs/accessibility-android-rule-missing-image-alt", + "docs/accessibility-android-rule-missing-input-value", + "docs/accessibility-android-rule-missing-screen-title", + "docs/accessibility-android-rule-missing-view-accessibility", + "docs/accessibility-android-rule-nested-control-issues", + "docs/accessibility-android-rule-non-accessible-interaction", + "docs/accessibility-android-rule-undersized-touch-target", + "docs/accessibility-android-rule-unlabeled-checkbox-element", + "docs/accessibility-android-rule-unlabeled-toggle-control", + "docs/accessibility-android-rule-unnamed-nested-element" + ] + }, + { + "group": "iOS WCAG Rule Reference", + "expanded": false, + "pages": [ + "docs/accessibility-ios-what-we-cover", + "docs/accessibility-ios-rules", + "docs/accessibility-ios-rule-repository", + "docs/accessibility-ios-rule-accessibility-label-not-punctuated", + "docs/accessibility-ios-rule-accessibility-role-definition", + "docs/accessibility-ios-rule-assistive-technology-access", + "docs/accessibility-ios-rule-button-element-capitalisation-check", + "docs/accessibility-ios-rule-color-contrast-issues", + "docs/accessibility-ios-rule-duplicate-accessibility-label", + "docs/accessibility-ios-rule-dynamic-type-support", + "docs/accessibility-ios-rule-missing-accessibility-labels", + "docs/accessibility-ios-rule-missing-button-element-label", + "docs/accessibility-ios-rule-missing-checkbox-element-label", + "docs/accessibility-ios-rule-missing-editable-element-label", + "docs/accessibility-ios-rule-missing-image-element-label", + "docs/accessibility-ios-rule-missing-switch-element-label", + "docs/accessibility-ios-rule-text-truncation-issues", + "docs/accessibility-ios-rule-touch-target-sizing" + ] + }, + { + "group": "FAQs & Reference", + "expanded": false, + "pages": [ + "docs/accessibility-choosing-the-right-tool", + "docs/accessibility-compliance-guide", + "docs/accessibility-rules-checklist", + "docs/accessibility-supported-wcag-browsers", + "docs/accessibility-faq" + ] + } + ] + } + ] + }, + { + "tab": "Web Scanner", + "icon": "magnifying-glass", + "pages": [ + { + "group": "Scan with Web Scanner", + "expanded": false, + "pages": [ + "docs/web-scanner-overview", + "docs/web-scanner-getting-started", + "docs/web-scanner-accessibility-scan", + "docs/web-scanner-adding-urls", + "docs/web-scanner-scheduling-options", + "docs/web-scanner-advanced-features", + "docs/web-scanner-visual-scan" + ] + } + ] + }, + { + "tab": "Insights", + "icon": "chart-line", + "pages": [ + { + "group": "Insights", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/analytics-overview", + "docs/analytics-create-dashboard", + "docs/analytics-dashboard-templates", + "docs/analytics-widgets", + "docs/analytics-widgets-tests-overview-landing" + ] + }, + { + "group": "Build & Configure Widgets", + "expanded": false, + "pages": [ + "docs/dashboards-custom-widgets", + "docs/analytics-bar-line-widgets", + "docs/analytics-table-widgets", + "docs/analytics-heatmap-widgets", + "docs/analytics-allure-api-widgets", + "docs/analytics-sub-organization-widgets", + "docs/analytics-widget-filter-by-regex", + "docs/analytics-filter-by-custom-data", + "docs/analytics-widget-drill-down-export" + ] + }, + { + "group": "Insights by Product (Modules)", + "expanded": false, + "pages": [ + "docs/analytics-modules-automation-test-overview", + "docs/analytics-modules-manual-test-overview", + "docs/analytics-modules-hyperexecute", + "docs/analytics-modules-smartui-analytics", + "docs/analytics-modules-test-manager-widgets", + "docs/analytics-modules-accessibility-widgets", + "docs/analytics-modules-test-intelligence-command-logs-analytics", + "docs/analytics-modules-error-insights", + "docs/analytics-modules-groups", + "docs/analytics-modules-resource-utilization", + "docs/concurrency-widget" + ] + }, + { + "group": "Test Intelligence (AI)", + "expanded": false, + "pages": [ + "docs/test-intelligence-overview", + "docs/defect-analysis-prediction", + "docs/test-intelligence-flakiness-test-detection", + "docs/analytics-modules-test-intelligence-flaky-test-analytics", + "docs/analytics-test-failure-classification", + "docs/analytics-ai-root-cause-analysis", + "docs/analytics-smart-tags-test-intelligence", + "docs/test-intelligence-command-error-logs-analytics" + ] + }, + { + "group": "Deep-Dive Insights", + "expanded": false, + "pages": [ + "docs/analytics-test-insights", + "docs/analytics-unique-instances-retry-detection", + "docs/analytics-test-case-insights", + "docs/analytics-build-insights", + "docs/analytics-build-comparison", + "docs/analytics-project-report", + "docs/analytics-test-time-trends", + "docs/insights-app-profiling", + "docs/insights-private-desktop", + "docs/insights-private-real-devices", + "docs/insights-usage-report" + ] + }, + { + "group": "Share & Schedule", + "expanded": false, + "pages": [ + "docs/analytics-dashboard-edit-layout", + "docs/analytics-dashboard-settings", + "docs/analytics-dashboard-features", + "docs/analytics-dashboard-copilot", + "docs/analytics-report-scheduling" + ] + }, + { + "group": "Reference", + "expanded": false, + "pages": [ + "docs/insights-best-practices", + "docs/analytics-faqs" + ] + } + ] + } + ] + }, + { + "tab": "Web Automation", + "icon": "code", + "pages": [ + { + "group": "Overview", + "pages": [ + "docs/getting-started-with-testmu-automation" + ] + }, + { + "group": "Selenium", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/testmu-running-your-first-selenium-test", + "docs/run-parallel-tests-with-selenium", + "docs/selenium-agent-skills", + "docs/selenium-supported-languages-and-frameworks", + "docs/supported-browsers-and-operating-systems-for-the-web-interface" + ] + }, + { + "group": "Migrate Test Suites", + "expanded": false, + "pages": [ + "docs/migrate-selenium-test-suite", + "docs/browserstack-to-testmu-migration-guide", + "docs/saucelabs-to-testmu-migration-guide" + ] + }, + { + "group": "Configure Your Tests", + "expanded": false, + "pages": [ + "docs/selenium-automation-capabilities", + "docs/selenium-default-capabilities", + "docs/selenium-three-capabilities", + "docs/selenium-four-capabilities", + "docs/testmu-selenium-advance-capabilities", + "docs/lambda-hooks", + "docs/basic-authentication-for-web-automation" + ] + }, + { + "group": "Test in Local Environments", + "expanded": false, + "pages": [ + "docs/test-locally-hosted-websites-with-selenium", + "docs/run-selenium-test-behind-the-proxy" + ] + }, + { + "group": "Use Cases", + "expanded": false, + "pages": [ + "docs/perform-selenium-automation-on-headless-browsers", + "docs/auto-heal", + "docs/smart-wait", + "docs/selenium-bidi-integration", + "docs/selenium-geolocation-capabilities", + "docs/configure-timezones", + "docs/network-throttling", + "docs/ie-mode-on-edge", + "docs/mock-video-injection-web-automation-selenium-chromium", + "docs/upload-custom-chrome-profile", + "docs/upload-files-using-testmu", + "docs/selenium-mask-your-data", + "docs/network-data-masking", + "docs/custom-headers", + "docs/custom-dns-map", + "docs/mark-as-bug-in-automation-testing", + "docs/selenium-lighthouse-reports", + "docs/download-files-using-testmu-selenium-grid" + ] + }, + { + "group": "Manage Your Runs", + "expanded": false, + "pages": [ + "docs/filter-your-selenium-tests", + "docs/command-annotations", + "docs/change-individual-test-details", + "docs/sharing-test-results", + "docs/live-interaction", + "docs/build-splitting", + "docs/build-inactivity-time", + "docs/group-and-filter-your-test-builds-using-build-tags", + "docs/group-tests-using-custom-tags" + ] + }, + { + "group": "Debug Your Tests", + "expanded": false, + "pages": [ + "docs/debugging-options", + "docs/telemetry-logs", + "docs/har_log-viewer" + ] + }, + { + "group": "Troubleshoot Techniques", + "expanded": false, + "pages": [ + "docs/error-messages", + "docs/timeouts-issues-and-resolutions", + "docs/performance-tips" + ] + } + ] + }, + { + "group": "Cypress", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/getting-started-with-cypress-testing", + "docs/run-your-cypress-tests-in-parallel", + "docs/cypress-agent-skills", + "docs/supported-cypress-versions", + "docs/supported-browsers-and-os" + ] + }, + { + "group": "Configure Your Tests", + "expanded": false, + "pages": [ + "docs/cypress-capabilities-reference", + "docs/cypress-cli-commands", + "docs/cyp-environment", + "docs/run-settings" + ] + }, + { + "group": "Use Cases", + "expanded": false, + "pages": [ + "docs/cypress-testing-using-webkit", + "docs/screen-resolution-testing-with-cypress", + "docs/private-dependencies-cypress", + "docs/npm-via-tunnel", + "docs/download-artefacts-cypress" + ] + }, + { + "group": "Integrations", + "expanded": false, + "pages": [ + "docs/integrate-testmu-with-cypress", + "docs/applitools-integration-cypress", + "docs/report-portal-cypress", + "docs/cyp-multi-reporters", + "docs/cypress-detailed-command-logs" + ] + } + ] + }, + { + "group": "Playwright", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/playwright-testing", + "docs/parallel-testing-with-playwright", + "docs/playwright-sdk", + "docs/playwright-agent-skills", + "docs/playwright-browsers-and-os", + "docs/migrate-existing-playwright-tests", + "docs/capabilities-for-playwright", + "docs/playwright-bundled-browser-support" + ] + }, + { + "group": "Use Cases", + "expanded": false, + "pages": [ + "docs/playwright-auto-heal", + "docs/playwright-lighthouse-library", + "docs/local-testing-using-playwright" + ] + }, + { + "group": "Test on Mobile Web", + "expanded": false, + "pages": [ + "docs/playwright-android-guide", + "docs/playwright-ios-guide", + "docs/playwright-webview-test", + "docs/playwright-android-capabilities" + ] + }, + { + "group": "Integrations", + "expanded": false, + "pages": [ + "docs/playwright-test-runner", + "docs/playwright-with-cucumberjs", + "docs/playwright-tests-in-ci-cd" + ] + } + ] + }, + { + "group": "Puppeteer", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/puppeteer-testing", + "docs/puppeteer-agent-skills", + "docs/capabilities-for-puppeteer", + "docs/local-testing-with-puppeteer", + "docs/puppeteer-tests-in-ci-cd" + ] + } + ] + }, + { + "group": "k6", + "pages": [ + "docs/k6-browser-testing" + ] + } + ] + }, + { + "tab": "App Automation", + "icon": "mobile", + "pages": [ + { + "group": "Appium Testing", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/getting-started-with-appium-testing", + "docs/app-automation-dashboard", + "docs/appium-languages-and-frameworks", + "docs/live-debug-in-app-automation", + "docs/appium-inspector-integration" + ] + }, + { + "group": "Configure Your Tests", + "expanded": false, + "pages": [ + "docs/application-setup-via-api", + "docs/appium-firebase-app-upload", + "docs/desired-capabilities-in-appium", + "docs/supported-appium-versions", + "docs/supported-appium-plugins", + "docs/list-of-supported-locales", + "docs/supported-timezone", + "docs/app-testing-apis", + "docs/appium-testmu-hooks", + "docs/appium-install-uninstall-testmu-hooks", + "docs/appium-uploading-retrieving-files", + "docs/migrate-existing-appium-test-suites", + "docs/migrate-appium-tests-from-browserstack-and-saucelabs" + ] + }, + { + "group": "Use Cases", + "expanded": false, + "pages": [ + "docs/testing-locally-hosted-apps", + "docs/camera-image-injection", + "docs/video-injection", + "docs/audio-injection", + "docs/biometric-authentication", + "docs/regular-expression-appium", + "docs/appium-upload-filemedia", + "docs/appium-upload-contacts", + "docs/app-auto-network-throttling", + "docs/appium-ip-geolocation", + "docs/appium-date-and-time", + "docs/appium-app-performance", + "docs/app-automation-slack-notifications", + "docs/appium-ios-app-settings", + "docs/ios-keychain-cleanup", + "docs/adb-commands-support", + "docs/login-to-google-account-on-android", + "docs/disable-screenshot-block", + "docs/appium-custom-headers", + "docs/http-basic-authentication", + "docs/device-passcode-appautomation", + "docs/set-device-dark-mode", + "docs/appium-autoheal", + "docs/apple-pay-auto", + "docs/button-text-click", + "docs/ios-shake-gesture-appautomation" + ] + }, + { + "group": "Automate TV Apps", + "expanded": false, + "pages": [ + "docs/appium-appletv", + "docs/appium-firetv", + "docs/appium-rokutv", + "docs/appium-androidtv" + ] + } + ] + }, + { + "group": "Espresso Testing", + "pages": [ + { + "group": "Configure Your Tests", + "expanded": false, + "pages": [ + "docs/espresso-supported-capabilities", + "docs/espresso-env-variables-settings", + "docs/espresso-automation-on-emulators-simulators", + "docs/regular-expression-espresso", + "docs/supported-locales-espresso", + "docs/troubleshoot-espresso-tests", + "docs/debugging-espresso-tests" + ] + }, + { + "group": "Use Cases", + "expanded": false, + "pages": [ + "docs/espresso-mockwebserver-localhost", + "docs/espresso-junit-report", + "docs/speedup-espresso", + "docs/sharding-espresso" + ] + } + ] + }, + { + "group": "XCUI Testing", + "pages": [ + { + "group": "Configure Your Tests", + "expanded": false, + "pages": [ + "docs/xcui-supported-capabilities", + "docs/xcui-automation-on-emulators-simulators", + "docs/regular-expression-xcui", + "docs/supported-locales-xcui", + "docs/speedup-xcui" + ] + }, + { + "group": "Use Cases", + "expanded": false, + "pages": [ + "docs/ios-ipa-files-xcui", + "docs/xctestplan", + "docs/sharding-xcui", + "docs/xcui-xml-report", + "docs/xcui-report" + ] + } + ] + }, + { + "group": "Flutter Testing", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/getting-started-with-flutter-dart-android-automation", + "docs/getting-started-with-flutter-dart-ios-automation", + "docs/flutter-supported-capabilities", + "docs/testing-flutter-apps", + "docs/virtual-device-flutter-apps", + "docs/appium-flutter-integration" + ] + } + ] + } + ] + }, + { + "tab": "Real Time Testing", + "icon": "display", + "pages": [ + { + "group": "Real Time Testing", + "pages": [ + { + "group": "Real Time - Desktop", + "expanded": false, + "pages": [ + "docs/getting-started-with-desktop-browser-real-time-testing", + "docs/real-time-desktop-browser-testing-tools", + "docs/pre-loaded-chrome-extension", + "docs/developer-tools", + "docs/real-time-locally-hosted-pages", + "docs/real-time-upload-and-download-files", + "docs/real-time-recents-and-favourites", + "docs/real-time-testing-troubleshooting" + ] + }, + { + "group": "Real Time - ChromeOS", + "expanded": false, + "pages": [ + "docs/chrome-os-testing", + "docs/chrome-os-web-browser-testing", + "docs/chrome-os-app-testing" + ] + } + ] + } + ] + }, + { + "tab": "Mobile (Virtual Device)", + "icon": "mobile", + "pages": [ + { + "group": "Mobile (Virtual Device)", + "pages": [ + { + "group": "Mobile Web", + "expanded": false, + "pages": [ + "docs/getting-started-with-mobile-browser-real-time-testing", + "docs/real-time-mobile-browser-testing-tools", + "docs/webview-testing-in-android" + ] + }, + { + "group": "Mobile App", + "expanded": false, + "pages": [ + "docs/getting-started-with-mobile-app-real-time-testing", + "docs/real-time-mobile-app-testing-tools", + "docs/troubleshooting-ios-app-testing" + ] + } + ] + } + ] + }, + { + "tab": "Tunnel", + "icon": "network-wired", + "pages": [ + { + "group": "Tunnel", + "pages": [ + { + "group": "Get Started with Tunnel", + "expanded": false, + "pages": [ + "docs/lambdatest-tunnel", + "docs/testing-locally-hosted-pages", + "docs/local-testing-windows", + "docs/local-testing-macos", + "docs/local-testing-linux" + ] + }, + { + "group": "Launch Tunnel via GUI or Docker", + "expanded": false, + "pages": [ + "docs/underpass-tunnel-application", + "docs/docker-tunnel", + "docs/docker-tunnel-extension" + ] + }, + { + "group": "Configure Tunnel", + "expanded": false, + "pages": [ + "docs/lambda-tunnel-modifiers", + "docs/advanced-tunnel-features", + "docs/environment-variables-supported-by-lambda-tunnel" + ] + }, + { + "group": "Connect Through Proxies & Private Networks", + "expanded": false, + "pages": [ + "docs/dedicated-proxy", + "docs/bypass-proxy-domains", + "docs/socks5-proxy-support", + "docs/http2-support", + "docs/charles-proxy", + "docs/site-to-site-ipsec-vpn-setup" + ] + }, + { + "group": "Scale & Share Tunnels", + "expanded": false, + "pages": [ + "docs/sharing-lambda-tunnel", + "docs/load-balancing-in-lambda-tunnel" + ] + }, + { + "group": "Use Tunnel in Your Automation & CI Tools", + "expanded": false, + "pages": [ + "docs/maven-tunnel-for-locally-hosted-web-applications" + ] + }, + { + "group": "Troubleshoot & Reference", + "expanded": false, + "pages": [ + "docs/troubleshooting-lambda-tunnel", + "docs/set-open-file-limit-while-using-proxy", + "docs/tunnel-release-notes" + ] + } + ] + } + ] + }, + { + "tab": "Mobile (Real Device)", + "icon": "mobile-screen", + "pages": [ + { + "group": "Mobile (Real Device)", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/real-device-testing-overview", + "docs/app-testing-on-real-devices", + "docs/browser-testing-on-real-devices" + ] + }, + { + "group": "Manage Apps & Builds", + "expanded": false, + "pages": [ + "docs/upload-apps-on-real-device-cloud", + "docs/app-manager", + "docs/app-settings", + "docs/ios-entitlements", + "docs/install-apps-from-play-store", + "docs/install-apps-from-test-flight", + "docs/install-apps-from-app-store", + "docs/install-apps-from-app-center", + "docs/install-apps-from-firebase", + "docs/app-distribution", + "docs/beta-testers-management", + "docs/group-folder-redirect-on-real-device" + ] + }, + { + "group": "Use In-Session Tools", + "expanded": false, + "pages": [ + "docs/how-to-use-testing-tools-in-session", + "docs/gesture-support-ios", + "docs/upload-files-media", + "docs/real-device-adb-shell", + "docs/multi-device-testing" + ] + }, + { + "group": "Simulate Real-World Conditions", + "expanded": false, + "pages": [ + "docs/ip-geolocation-on-real-devices-app", + "docs/network-configurations-in-real-devices", + "docs/sim-support-realdevices", + "docs/camera-image-injection-on-real-devices", + "docs/biometric-authentication-on-real-devices", + "docs/contacts-on-real-devices", + "docs/set-date-time-hour-format-real-devices", + "docs/dark-mode-on-real-devices", + "docs/assistive-touch-on-real-ios-devices", + "docs/apple-pay-manual", + "docs/audio-injection-manual", + "docs/device-passcode-on-realdevice" + ] + }, + { + "group": "Inspect & Debug", + "expanded": false, + "pages": [ + "docs/ui-inspector", + "docs/devtools-on-real-devices-app", + "docs/manual-app-profiling" + ] + }, + { + "group": "Review Results", + "expanded": false, + "pages": [ + "docs/manual-tests-dashboard" + ] + }, + { + "group": "Browser - In-Session Tools", + "expanded": false, + "pages": [ + "docs/how-to-use-in-session-testing-tools", + "docs/audio-injection-manual-browser", + "docs/ip-geolocation-on-real-devices-browser", + "docs/network-configurations-in-browser", + "docs/contacts-on-real-devices-browser", + "docs/set-date-time-hour-format-real-devices-browser", + "docs/dark-mode-on-browser" + ] + }, + { + "group": "Browser - Accessibility", + "expanded": false, + "pages": [ + "docs/assistive-touch-on-real-ios-browser" + ] + }, + { + "group": "Private Cloud", + "expanded": false, + "pages": [ + "docs/public-cloud-vs-private-cloud", + "docs/select-pre-installed-apps", + "docs/private-device-allocation-to-teams" + ] + } + ] + } + ] + }, + { + "tab": "Integrations", + "icon": "plug", "pages": [ { - "group": "Kane CLI", + "group": "Integrations", "pages": [ - "docs/index", { - "group": "Getting Started", + "group": "Get Started", + "expanded": false, "pages": [ - "docs/kane-cli-installation", - "docs/kane-cli-quickstart", - "docs/kane-cli-authentication" + "docs/integrations-overview" ] }, { - "group": "Core Concepts", + "group": "Integrate With Bug Tracking Tools", + "expanded": false, "pages": [ - "docs/kane-cli-modes", - "docs/kane-cli-configuration", - "docs/kane-cli-writing-objectives", - "docs/kane-cli-variables-and-context" + "docs/jira-integration", + "docs/jira-self-hosted-integration", + "docs/azure-devops-integration", + "docs/bugzilla-integration", + "docs/mantis-integration", + "docs/youtrack-integration", + "docs/redmine-integration", + "docs/fogbugz-integration", + "docs/bugasura-integration", + "docs/bugherd-integration", + "docs/bugsnag-integration", + "docs/devrev-integration", + "docs/airbrake-integration", + "docs/assembla-integration", + "docs/rally-integration", + "docs/servicenow-integration", + "docs/spirateam-integration", + "docs/userback-integration", + "docs/zenkit-integration", + "docs/zipboard-integration", + "docs/zoho-bugtracker-integration", + "docs/goodday-integration", + "docs/notion-integration", + "docs/linear-app-integration" ] }, { - "group": "Integrations & Automation", + "group": "Integrate With Project Management Tools", + "expanded": false, "pages": [ - "docs/kane-cli-tms-integration", - "docs/kane-cli-cicd", - "docs/kane-cli-parallel-execution" + "docs/asana-integration", + "docs/airtable-integration", + "docs/trello-integration", + "docs/monday-integration", + "docs/miro-integration", + "docs/clickup-integration", + "docs/backlog-integration", + "docs/breeze-integration", + "docs/favro-integration", + "docs/hive-integration", + "docs/integrating-wrike-with-lambdatest", + "docs/project-management-tools-paymo-integration", + "docs/teamwork-integration", + "docs/targetprocess-integration", + "docs/taiga-integration", + "docs/shortcut-integration", + "docs/axosoft-integration", + "docs/zohoproject-integration", + "docs/project-management-tools-github-integration", + "docs/github-repo-based-oauth-integration", + "docs/project-management-tools-gitlab-integration", + "docs/project-management-tools-bitbucket-integration", + "docs/pivotal-tracker-integration" ] }, { - "group": "Agent Mode", + "group": "Integrate With Test Management Tools", + "expanded": false, "pages": [ - "docs/kane-cli-agent-mode", - "docs/kane-cli-skills" + "docs/testrail-integration-with-lambdatest-selenium-grid", + "docs/testmo-integration", + "docs/zephyr-scale-integration", + "docs/alm-octane-integration", + "docs/qmetry-integration", + "docs/practitest-integration", + "docs/zebrunner-integration" ] }, { - "group": "Reference", + "group": "Integrate With Codeless Testing Tools", + "expanded": false, "pages": [ - "docs/kane-cli-cli-reference", - "docs/kane-cli-error-codes", - "docs/kane-cli-troubleshooting", - "docs/kane-cli-changelog" + "docs/accelq-integration", + "docs/algoshack-integration", + "docs/katalon-integration-with-lambdatest", + "docs/katalon-integration", + "docs/running-groovy-script-in-katalon", + "docs/leapwork-integration", + "docs/testsigma-integration", + "docs/testim-integration", + "docs/testrigor-integration", + "docs/testingwhiz-integration", + "docs/ranorex-integration-with-lambdatest", + "docs/tricentis-tosca-integration-testmu-selenium-grid", + "docs/ghost-inspector-integration", + "docs/simplifyqa-integration", + "docs/uipath-integration", + "docs/run-selenium-ide-tests-on-lambdatest-selenium-cloud-grid", + "docs/testcomplete-integration", + "docs/cerberus-integration", + "docs/vividus-integration" + ] + }, + { + "group": "Integrate With Test Frameworks & Engines", + "expanded": false, + "pages": [ + "docs/selenified-integration-with-lambdatest", + "docs/npm-plugin-for-testcafe-integration-with-lambdatest", + "docs/siesta-integration", + "docs/oxygen-integration", + "docs/applitools-integration-with-lambdatest" + ] + }, + { + "group": "Integrate With Test Data & App Sources", + "expanded": false, + "pages": [ + "docs/genrocket-integration", + "docs/localstack-integration-with-lambdatest", + "docs/app-center-integration", + "docs/app-automation-using-app-center" + ] + }, + { + "group": "Integrate With CI/CD Tools", + "expanded": false, + "pages": [ + "docs/jenkins-plugin", + "docs/integrating-lambdaTest-with-jenkins-freestyle-project", + "docs/integrating-your-jenkins-pipeline-with-lambdatest", + "docs/integrating-lambdatest-report-with-jenkins-pipeline", + "docs/azure-pipeline", + "docs/integrate-lambdatest-extension-with-azure-pipelines", + "docs/teamcity-integration", + "docs/teamcity-plugin", + "docs/gocd-integration", + "docs/yaml-integration", + "docs/bitrise-integration", + "docs/bitrise-integration-xcuitest", + "docs/run-espresso-tests-in-bitrise", + "docs/gitlab-ci-integration", + "docs/bitbucket-pipelines-integration", + "docs/circleci-integration", + "docs/travis-ci-with-lambdatest", + "docs/bamboo-integration", + "docs/buildkite-integration", + "docs/codefresh-ci-integration", + "docs/codeship-integration", + "docs/concource-ci", + "docs/drone-ci", + "docs/semaphore-ci-integration", + "docs/google-cloud-ci-integration", + "docs/aws-codepipeline-Integration", + "docs/appveyor-ci-integration", + "docs/netlify-integration-with-lambdatest", + "docs/webhooks-integration", + "docs/zalenium-integration-with-lambdatest" + ] + }, + { + "group": "Integrate With Communication Tools", + "expanded": false, + "pages": [ + "docs/slack-integration", + "docs/microsoft-teams-integration", + "docs/microsoft-team", + "docs/webex-teams-integration", + "docs/flock-integration", + "docs/google-chat-integration", + "docs/integrating-mattermost-with-lambdatest", + "docs/rocketchat-integration-with-lambdatest", + "docs/zoho-cliq-integration", + "docs/opsgenie-integration", + "docs/pagerduty-integration" + ] + }, + { + "group": "Integrate With Monitoring Tools", + "expanded": false, + "pages": [ + "docs/new-relic-integration", + "docs/sumo-logic-integration", + "docs/datadog-integration", + "docs/rktracer-integration" + ] + }, + { + "group": "Integrate With Automation Tools", + "expanded": false, + "pages": [ + "docs/zapier-integration-with-lambdatest", + "docs/n8n-integration" + ] + }, + { + "group": "Use TestMu Plugins & Extensions", + "expanded": false, + "pages": [ + "docs/chrome-extension", + "docs/vscode-extension", + "docs/xcode-plugin-lambdamax", + "docs/wordpress-plugin", + "docs/record-and-replay-tests", + "docs/fastlane-with-lambdatest", + "docs/gradle-integration-with-lambdatest" + ] + } + ] + } + ] + }, + { + "tab": "Account Management", + "icon": "user-gear", + "pages": [ + { + "group": "Account Management", + "pages": [ + { + "group": "Get Started", + "expanded": false, + "pages": [ + "docs/account-management" + ] + }, + { + "group": "Billing & Subscriptions", + "expanded": false, + "pages": [ + "docs/manage-subscriptions", + "docs/credits-management" + ] + }, + { + "group": "Manage Users & Teams", + "expanded": false, + "pages": [ + "docs/user-management", + "docs/team-management", + "docs/group-management", + "docs/sub-organizations", + "docs/service-accounts" + ] + }, + { + "group": "Roles, Permissions & Licenses", + "expanded": false, + "pages": [ + "docs/rbac-roles-and-permissions", + "docs/role-based-access-control", + "docs/kaneai-test-manager-access-management", + "docs/manage-ai-capabilities" + ] + }, + { + "group": "Single Sign-On (SSO)", + "expanded": false, + "pages": [ + "docs/testmu-sso-self-serve", + "docs/testmu-sso-manage-connection", + "docs/testmu-sso-google", + "docs/testmu-sso-okta-integration", + "docs/testmu-sso-onelogin-using-saml", + "docs/testmu-sso-pingidentity-integration", + "docs/testmu-sso-oidc", + "docs/sso-azure-integration" + ] + }, + { + "group": "Security & Audit", + "expanded": false, + "pages": [ + "docs/multi-factor-authentication", + "docs/password-and-access-key-expiration-policy", + "docs/tunnel-security", + "docs/audit-logs", + "docs/support-access" + ] + }, + { + "group": "Close Your Account", + "expanded": false, + "pages": [ + "docs/delete-testmu-account" ] } ] @@ -95,6 +2188,11 @@ ], "global": { "anchors": [ + { + "anchor": "Home", + "href": "/docs", + "icon": "house" + }, { "anchor": "Status", "href": "https://status.lambdatest.io/", @@ -127,13 +2225,13 @@ }, { "label": "Login", - "href": "https://accounts.lambdatest.com/login?_gl=1*il1bzu*_gcl_au*MTAzNzUyNzAwMC4xNzYxODg2NjEy" + "href": "https://www.testmuai.com/login/?_gl=1*il1bzu*_gcl_au*MTAzNzUyNzAwMC4xNzYxODg2NjEy" } ], "primary": { "type": "button", "label": "Get Started Free", - "href": "https://accounts.lambdatest.com/register?_gl=1*il1bzu*_gcl_au*MTAzNzUyNzAwMC4xNzYxODg2NjEy" + "href": "https://www.testmuai.com/register/?_gl=1*il1bzu*_gcl_au*MTAzNzUyNzAwMC4xNzYxODg2NjEy" } }, "contextual": { @@ -171,6 +2269,234 @@ } }, "redirects": [ + { + "source": "/docs/testing-apps-locally", + "destination": "/docs/testing-locally-hosted-apps" + }, + { + "source": "/docs/delete-lambdatest-account", + "destination": "/docs/delete-testmu-account" + }, + { + "source": "/docs/lambdatest-sso-self-serve", + "destination": "/docs/testmu-sso-self-serve" + }, + { + "source": "/docs/lambdatest-sso-manage-connection", + "destination": "/docs/testmu-sso-manage-connection" + }, + { + "source": "/docs/lambdatest-sso-google", + "destination": "/docs/testmu-sso-google" + }, + { + "source": "/docs/lambdatest-sso-okta-integration", + "destination": "/docs/testmu-sso-okta-integration" + }, + { + "source": "/docs/lambdatest-sso-onelogin-using-saml", + "destination": "/docs/testmu-sso-onelogin-using-saml" + }, + { + "source": "/docs/lambdatest-sso-pingidentity-integration", + "destination": "/docs/testmu-sso-pingidentity-integration" + }, + { + "source": "/docs/lambdatest-sso-oidc", + "destination": "/docs/testmu-sso-oidc" + }, + { + "source": "/docs/agent-to-agent-faqs", + "destination": "/docs/agent-testing-platform-faqs" + }, + { + "source": "/docs/getting-started-with-agent-to-agent-testing", + "destination": "/docs/getting-started-with-agent-testing-platform" + }, + { + "source": "/docs/generate-test-cases-with-ai", + "destination": "/docs/generate-test-cases" + }, + { + "source": "/docs/manual-test-cases-with-ai", + "destination": "/docs/manual-test-case-creation" + }, + { + "source": "/docs/modules-in-manual-testcases", + "destination": "/docs/create-modules" + }, + { + "source": "/docs/analytics-modules-test-manager-widgets", + "destination": "/docs/insights-dashboard" + }, + { + "source": "/docs/testmu-jira-app", + "destination": "/docs/link-jira-issues-with-test-manager" + }, + { + "source": "/docs/testmu-azure-devops-app", + "destination": "/docs/link-ado-issues-with-test-manager" + }, + { + "source": "/docs/update-fields", + "destination": "/docs/bulk-update-fields" + }, + { + "source": "/docs/hyperexecute-knowledgebase", + "destination": "/docs/getting-started-with-hyperexecute" + }, + { + "source": "/docs/hyperexecute-how-to-guide", + "destination": "/docs/getting-started-with-hyperexecute" + }, + { + "source": "/docs/hyperexecute-use-cases", + "destination": "/docs/getting-started-with-hyperexecute" + }, + { + "source": "/docs/hyperexecute-integration", + "destination": "/docs/hyperexecute-integration-with-products" + }, + { + "source": "/docs/hyperexecute-integration-with-lt-products", + "destination": "/docs/hyperexecute-integration-with-products" + }, + { + "source": "/docs/hyperexecute-seamless-integration-with-tools", + "destination": "/docs/hyperexecute-integration-with-products" + }, + { + "source": "/docs/tosca-integration-with-hyperexecute", + "destination": "/docs/tosca-integration-with-hyperexecute-using-commander" + }, + { + "source": "/docs/hyperexecute-private-cloud-setup", + "destination": "/docs/hyperexecute-private-cloud-benefits" + }, + { + "source": "/docs/hyperexecute-how-to-get-my-username-and-access-key", + "destination": "/docs/hyperexecute-environment-variable-setup" + }, + { + "source": "/docs/hyperexecute-gui-query", + "destination": "/docs/hyperexecute-cli-gui" + }, + { + "source": "/docs/hyperexecute-yaml-parameters", + "destination": "/docs/deep-dive-into-hyperexecute-yaml" + }, + { + "source": "/docs/hyperexecute-email-reports", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/hyperexecute-job-reports", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/hyperexecute-artifacts-url", + "destination": "/docs/hyperexecute-artifacts" + }, + { + "source": "/docs/extent-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/native-extent-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/hyperexecute-native-testng-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/allure-reports", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/cucumber-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/playwright-html-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/specflow-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/custom-speclow-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/cypress-mochaawesome-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/junit-xml-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/karate-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/robot-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/hyperexecute-katalon-report", + "destination": "/docs/hyperexecute-reports" + }, + { + "source": "/docs/hyperexecute-job-widgets", + "destination": "/docs/hyperexecute-widgets" + }, + { + "source": "/docs/hyperexecute-stage-widgets", + "destination": "/docs/hyperexecute-widgets" + }, + { + "source": "/docs/hyperexecute-task-widgets", + "destination": "/docs/hyperexecute-widgets" + }, + { + "source": "/docs/hyperexecute-resource-widgets", + "destination": "/docs/hyperexecute-widgets" + }, + { + "source": "/docs/hyperexecute-smart-ui-sdk-selenium-csharp", + "destination": "/docs/hyperexecute-smart-ui-sdk-selenium-javascript" + }, + { + "source": "/docs/hyperexecute-smart-ui-sdk-using-cypress", + "destination": "/docs/hyperexecute-smart-ui-sdk-selenium-javascript" + }, + { + "source": "/docs/hyperexecute-smart-ui-sdk-using-playwright", + "destination": "/docs/hyperexecute-smart-ui-sdk-selenium-javascript" + }, + { + "source": "/docs/hyperexecute-smart-ui-sdk-using-puppeteer", + "destination": "/docs/hyperexecute-smart-ui-sdk-selenium-javascript" + }, + { + "source": "/docs/hyperexecute-azure-setup-test-plan", + "destination": "/docs/hyperexecute-azure-test-plan" + }, + { + "source": "/docs/hyperexecute-azure-associate-test-case", + "destination": "/docs/hyperexecute-azure-test-plan" + }, + { + "source": "/docs/hyperexecute-integrate-azure-test-plan", + "destination": "/docs/hyperexecute-azure-test-plan" + }, + { + "source": "/docs/hyperexecute-utilizing-custom-libraries", + "destination": "/docs/hyperexecute-sikuli-integration" + }, { "source": "/docs/:slug", "destination": "/docs/:slug/" @@ -190,6 +2516,74 @@ { "source": "/docs/scim/azure", "destination": "/docs/scim-azure" + }, + { + "source": "/docs/accessibility-test-crawler", + "destination": "/docs/accessibility-test-scheduling-crawler" + }, + { + "source": "/docs/accessibility-getting-started-quick-setup", + "destination": "/docs/accessibility-testing" + }, + { + "source": "/docs/accessibility-testing-install-devtools", + "destination": "/docs/accessibility-devtools" + }, + { + "source": "/docs/accessibility-web-what-we-do-not-cover", + "destination": "/docs/accessibility-web-what-we-cover" + }, + { + "source": "/docs/accessibility-ios-what-we-do-not-cover", + "destination": "/docs/accessibility-ios-what-we-cover" + }, + { + "source": "/docs/web-scanner-accessibilty-scan", + "destination": "/docs/web-scanner-accessibility-scan" + }, + { + "source": "/docs/selenium-hyprerexecute-accessibility-tests", + "destination": "/docs/selenium-hyperexecute-accessibility-tests" + }, + { + "source": "/docs/visual-ui-testing", + "destination": "/docs/smart-visual-regression-testing" + }, + { + "source": "/docs/smartui-upload-api-new", + "destination": "/docs/smartui-upload-api-v2" + }, + { + "source": "/docs/smart-ui-storybook", + "destination": "/docs/smartui-storybook-integration" + }, + { + "source": "/docs/smartui-visual-ai", + "destination": "/docs/smartui-visual-ai-agent" + }, + { + "source": "/docs/smartui-layout-testing", + "destination": "/docs/smartui-layout-comparison" + }, + { + "source": "/docs/build-options-for-visual-regression-testing", + "destination": "/docs/smart-ui-build-options" + }, + { + "source": "/docs/smartui-sdk-caps", + "destination": "/docs/smartui-sdk-capabilities" + }, + { + "source": "/docs/smartui-basic-auth", + "destination": "/docs/smartui-cli-basic-auth" + }, + { + "source": "/docs/smartui-cli-git-branching-strategy", + "destination": "/docs/smartui-cli-git-branching" + }, + { + "source": "/docs/smartui-git-branching-strategy", + "destination": "/docs/smartui-git-branching" } ] -} \ No newline at end of file +} diff --git a/docs/Device-reservation.mdx b/docs/Device-reservation.mdx new file mode 100644 index 000000000..283fe5996 --- /dev/null +++ b/docs/Device-reservation.mdx @@ -0,0 +1,100 @@ +--- +title: "Device Reservation on Private Cloud Devices" +description: "Learn how to reserve private cloud devices in TestMu AI to ensure uninterrupted testing, fair access, and conflict-free usage across your team." +keywords: ['device reservation', 'private cloud', 'device booking', 'testmu ai devices', 'test scheduling'] +"og:description": "Learn how to reserve private cloud devices in TestMu AI to ensure uninterrupted testing, fair access, and conflict-free usage across your team." +--- + +import { BrandName } from "/snippets/BrandName.mdx"; + +--- + +** Device Reservation** enables users to reserve private cloud devices in **advance**, ensuring uninterrupted access during critical testing windows. By scheduling devices ahead of time, teams can **prevent conflicts**, eliminate last-minute delays, and run both manual and automated tests with greater reliability. This becomes particularly valuable for time-sensitive releases, large-scale regression cycles, and continuous integration pipelines, where guaranteed device availability is essential. + +Beyond preventing scheduling conflicts, Device Reservation also helps organizations **optimize resource utilization**, enforce fair usage policies, and gain clearer visibility into device allocation across teams, leading to more efficient and predictable testing operations. + + +Device Reservation feature is currently in **closed beta** and continuously improving based on user feedback. please reach out via window.openLTChatWidget()}>**24×7 chat** or email us at **support@testmuai.com** to enable it for your organization and try it out. + +--- + +## Use Cases + +- **Release-Day Reliability**: Reserve devices in advance to guarantee uninterrupted testing during production releases or hotfix rollouts. +- **Parallel Test Execution**: Secure multiple devices for running automated test suites in parallel, speeding up regression cycles. +- **Cross-Team Coordination**: Schedule device bookings across QA, Dev, and Ops teams to align on shared testing timelines. +- **Peak Hour Management**: Prevent conflicts during high-demand periods by ensuring fair access and availability through reservations. +- **Optimized Resource Utilization**: Track and manage reservations to avoid idle devices and maximize the ROI of your private cloud setup. + +--- +## Device Reservation Workflow + +### Accessing the App Live Dashboard +1. Open the [App Live Dashboard](https://applive.lambdatest.com/app). +2. Enable the toggle for Private Devices (**Available only for private device customers**). +3. The User will see two buttons: + - **My reservations** – View all ongoing and upcoming reservations with filter options. + - **Go to Reservations** – Open the calendar view to explore and manage bookings. + +First-time visitors will see an empty calendar and must create a reservation to begin scheduling devices. + +![Device-Reservation-1](/assets/images/real-device-app-testing/Device-Reservations/Device-Reservation1.png) + +### Admin Privilege + +Admins have additional controls to manage device reservations, accessible inside **Go to Reservations** under the settings button (as shown below): + +- **Advance Booking Window** – Define how far in advance members can schedule reservations. +- **Max Reservation Duration** – Set the maximum duration allowed for a reservation (1–48 hours). +- **Active Reservations per Member** – Limit the number of active reservations per member (1–99). +- **Devices per Reservation** – Define how many devices can be booked in one reservation. + +![Device-Reservation-5](/assets/images/real-device-app-testing/Device-Reservations/Device-Reservation5.png) + +### Calendar View and Permissions + +The **calendar** view differs for members and admins: + +- **Members:** + - The member view shows a calendar with reservation blocks for devices. + - `Blue blocks` represent the member’s own reservations, which can be edited or deleted. + - `Grey blocks` represent reservations made by other team members. Members cannot edit or delete these. + + ![Device-Reservation-6](/assets/images/real-device-app-testing/Device-Reservations/Device-reservations-User.png) + +- **Admins:** + - Admins can view and manage all reservations on the calendar. + - They have full control to create, edit, or delete any reservation. + +### Creating a Reservation + +To create a reservation, click **Reserve Device** from the calendar view. Then choose the type of reservation: + +- **Immediate Reservation** – Reserve a device instantly for 1 to 12 hours. + ![Device-Reservation-4](/assets/images/real-device-app-testing/Device-Reservations/Device-Reservation4.png) +- **Future Reservation** – Schedule a reservation for a later date/time within the allowed scheduling window. + ![Device-Reservation-3](/assets/images/real-device-app-testing/Device-Reservations/Device-Reservation3.png) + +Select **one or multiple devices** based on availability and confirm the reservation. + +### Viewing and Editing Reservations + +After adding reservation slots, the user can view them under **My Reservations** and make edits or cancellations if required. + +![Device-Reservation-2](/assets/images/real-device-app-testing/Device-Reservations/.Device-Reservation2.png) + +### Session Expiry and Extensions + +These rules apply to both admins and members, except admins can still override reservations. + +- In the last **15 minutes** of a reservation, a pop-up appears notifying the user that the session is about to end. +- If no pre-booked reservation exists for the device, the user will have the option to extend the session. +- If another booking is already scheduled for the device, the extension option will still appear, but the request will **fail**. +- Once the reserved time ends, the device session is automatically closed and released. + + +- Reservation cannot be edited after the slot has been started.** + +- If an **admin** deletes any reservation, it is **cancelled** immediately. +- In automation, reservations cannot be extended automatically in the last 15 minutes. Extensions must be handled manually. + diff --git a/docs/Selenium-Grid-Configuration.mdx b/docs/Selenium-Grid-Configuration.mdx new file mode 100644 index 000000000..27f1b9803 --- /dev/null +++ b/docs/Selenium-Grid-Configuration.mdx @@ -0,0 +1,30 @@ +--- +title: "Selenium Grid Configuration Guide | How to Configure TestMu AI Automation Grid" +sidebarTitle: "TestMu AI Selenium Grid Configuration" +description: "This support guide tells you how can you configure TestMu AI Online Selenium Grid of 3000+ real desktop and mobile browsers." +keywords: ['testmu ai automation', 'selenium automation grid', 'selenium grid online', 'selenium versions'] +"og:description": "This support guide tells you how can you configure TestMu AI Online Selenium Grid of 3000+ real desktop and mobile browsers." +--- + +import { BrandName } from "/snippets/BrandName.mdx"; + +--- + +We constantly upgrade our grid with the stable version of Selenium. + +Currently we use: **Selenium 2.53.1 updated** + +## Selenium Automation Grid Configuration +-------------------------------------------- + +| KEY | VALUE | +|-----------------------------|---------------------------------------------------------| +| Selenium version | Selenium 2.53.1 – Updated @Date
[Want to change version?](https://www.testmuai.com/capabilities-generator/) | +| IEDriver version | Selenium 2.53.1 – Updated @Date
[Want to change version?](https://www.testmuai.com/capabilities-generator/) | +| ChromeDriver version | v2.41 – Updated @Date
[Want to change version?](https://www.testmuai.com/capabilities-generator/) | +| Firefox/GeckoDriver Version | 0.21.0 – Updated @Date
[Want to change version?](https://www.testmuai.com/capabilities-generator/) | +| HUB URI | [hub.lambdatest.com](https://hub.lambdatest.com/) | +| HUB Port | 80 (HTTPS/SSL) | +| Window Mode | Multi-window | +| Default Idle Timeout | 130 seconds
[Want to change Idle Timeout?](https://www.testmuai.com/capabilities-generator/) | +| Default Screen Resolution | 1024×768
[Want to change Resolution?](https://www.testmuai.com/capabilities-generator/) | diff --git a/docs/accelq-integration.mdx b/docs/accelq-integration.mdx new file mode 100644 index 000000000..77b923291 --- /dev/null +++ b/docs/accelq-integration.mdx @@ -0,0 +1,62 @@ +--- +title: "ACCELQ Integration" +sidebarTitle: "ACCELQ" +description: "Accelerate your end-to-end digital testing journey with TestMu AI and ACCELQ. Automate your web and mobile apps across 3000+ real browsers, devices and operating system combinations." +keywords: ['testmu ai integration with accelq', 'testmu ai and accelq integration', 'accelq integration'] +"og:description": "Accelerate your end-to-end digital testing journey with TestMu AI and ACCELQ. Automate your web and mobile apps across 3000+ real browsers, devices and operating system combinations." +--- + +import { BrandName } from "/snippets/BrandName.mdx"; + +--- + +ACCELQ is an AI Native Codeless automation testing and management platform. It enables you automate web, mobile, API, database, and packaged applications. + +By integrating with ACCELQ, you can perform web and mobile app automation on an online device farm of 3000+ real browsers, devices, and OS combinations, and accelerate your end-to-end digital testing efforts. + +## Prerequisites +--- + +1. Make sure you have a account. If you don't have an account yet, [sign up for free](https://accounts.lambdatest.com/register). + +2. To integrate with ACCELQ, you will need a username and access key. + +Image + +3. Install the ACCELQ Agent Dashboard. + +## Integrating From ACCELQ Agent Dashboard +--- + +1. Open your ACCELQ Agent Dashboard. + +2. Once you are in the target agent, click **Edit Configuration**. + +Image + +3. You need to use the external device provider for web, mobile, or both platforms. For example, if you wish to perform web browser automation, select **Use external device provider for Web**. + +Image + +4. Now enter your username and access key and save/restart the ACCELQ Agent. + +### Executing The Tests + +1. Once the agent is operable, you can choose browser, device and OS combinations from the list that support. + +2. From the Run modal, select the agent from the AGENT/HOST section. After that, choose browser and device from the corresponding sections. + +## Capturing Views For Mobile Automation +--- + +1. From the **Record View** dialog box, click **Cloud Provider**. + +2. Select ** from the **Provider** dropdown. Enter your username and access key, and click **Authenticate**. + +Image + +3. Once the authentication is successful, you can select the real devices that is fetched from the platform. + +4. In the **App Url**, provider your App URL. + +5. Now click **Start Capture** and it will launch your test session on the selected device. diff --git a/docs/accessibility-ai-issue-detection-agent.mdx b/docs/accessibility-ai-issue-detection-agent.mdx new file mode 100644 index 000000000..105267dab --- /dev/null +++ b/docs/accessibility-ai-issue-detection-agent.mdx @@ -0,0 +1,31 @@ +--- +title: "AI Issue Detection Agent" +sidebarTitle: "AI Issue Detection Agent" +description: "Overview of AI-assisted issue interpretation and triage for Accessibility workflows where available." +"og:description": "Overview of AI-assisted issue interpretation and triage for Accessibility workflows where available." +--- + +AI-assisted issue analysis can help teams interpret findings faster, understand likely patterns, and move more quickly into triage. + +The guidance below describes where AI-assisted analysis fits in the Accessibility reporting workflow. It also shows how to pair automated interpretation with issue detail and human review so triage stays grounded and defensible. + +## Use this when + +Use AI-assisted issue interpretation when you want faster triage support, not as a replacement for rule-level validation or remediation review. + +## Important note + +AI issue analysis should support prioritization and understanding. It should not be treated as a substitute for manual validation, engineering review, or compliance sign-off. + +## How to use it in a review (onboarding) + +1. Open **[Issue Summary](/support/docs/accessibility-testing-dashboard-issue-summary/)** or **[All Issues](/support/docs/accessibility-testing-dashboard-all-issues/)** after a scan completes. +2. Select an issue or cluster where the UI exposes **AI-assisted** analysis (wording may appear as summary, explanation, or suggested next step). +3. Read the AI output as **hypothesis support**—verify against the DOM, design intent, and WCAG rule text in the **[rule repositories](/support/docs/accessibility-web-rule-repository/)** where applicable. +4. If the suggestion is wrong, capture that feedback through your usual QA process so the team does not over-trust automation. +5. Pair AI hints with the **[Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/)** for engineering-ready fix order. + +## Related docs + +- [Issue Summary](/support/docs/accessibility-testing-dashboard-issue-summary/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-fixed-orientation-lock.mdx b/docs/accessibility-android-rule-fixed-orientation-lock.mdx new file mode 100644 index 000000000..d117b1027 --- /dev/null +++ b/docs/accessibility-android-rule-fixed-orientation-lock.mdx @@ -0,0 +1,40 @@ +--- +title: "Fixed Orientation Lock" +sidebarTitle: "Fixed Orientation Lock" +description: "Rule-level Accessibility guidance for Fixed Orientation Lock on Android." +"og:description": "Rule-level Accessibility guidance for Fixed Orientation Lock on Android." +--- + +Android activities must support both portrait and landscape orientations unless a specific orientation is essential to the functionality. + + +**WCAG Reference** +**Maps to:** WCAG 1.3.4 Orientation | **Applies to:** WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.1 | **Level:** AA | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/orientation.html) + + +## What this rule checks + +The scanner flags activities with `android:screenOrientation` set to a fixed value (`portrait`, `landscape`, `sensorPortrait`, `sensorLandscape`) in the manifest, preventing device rotation. + +## Why it matters + +Users with motor disabilities may mount their device in a fixed orientation (e.g., attached to a wheelchair). Users with low vision may prefer landscape to display larger text. Locking orientation removes this choice and can make the app physically uncomfortable or impossible to use. + +## Common failure patterns + +- `android:screenOrientation="portrait"` set globally on all activities +- orientation locked programmatically with `setRequestedOrientation()` for non-essential reasons +- splash screens or onboarding locked to portrait that propagate the lock to subsequent screens + +## Remediation guidance + +- remove `android:screenOrientation` from the manifest (defaults to user-controlled rotation) +- only lock orientation when the content genuinely requires it (e.g., a camera viewfinder) +- test the app in both orientations to confirm layouts adapt correctly +- document any essential orientation requirement with a clear justification + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-inaccessible-text-focus.mdx b/docs/accessibility-android-rule-inaccessible-text-focus.mdx new file mode 100644 index 000000000..52c0c2341 --- /dev/null +++ b/docs/accessibility-android-rule-inaccessible-text-focus.mdx @@ -0,0 +1,41 @@ +--- +title: "Inaccessible Text Focus" +sidebarTitle: "Inaccessible Text Focus" +description: "Rule-level Accessibility guidance for Inaccessible Text Focus on Android." +"og:description": "Rule-level Accessibility guidance for Inaccessible Text Focus on Android." +--- + +Meaningful text content in Android apps must be focusable by assistive technology so users can read it sequentially. + + +**WCAG Reference** +**Maps to:** WCAG 4.1.2 Name, Role, Value | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html) + + +## What this rule checks + +The scanner flags `TextView` and other text-bearing elements that are not reachable through TalkBack navigation because they are marked as not important for accessibility or are hidden behind non-focusable containers. + +## Why it matters + +If meaningful text cannot receive TalkBack focus, blind and low-vision users miss the information entirely. This is especially problematic for status messages, instructions, and error text. + +## Common failure patterns + +- `TextView` elements inside containers with `importantForAccessibility="noHideDescendants"` +- dynamically added text views that do not inherit accessibility properties +- text elements positioned off-screen (used for visual spacing) that are still rendered but not focusable +- `TextView` elements with `focusable="false"` that contain meaningful information + +## Remediation guidance + +- ensure text elements containing meaningful content have `importantForAccessibility="yes"` +- do not suppress descendant accessibility on containers that hold readable text +- remove decorative text from the accessibility tree with `importantForAccessibility="no"` (only when truly decorative) +- test by swiping through the screen with TalkBack and confirming all meaningful text is announced + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-insufficient-color-ratio.mdx b/docs/accessibility-android-rule-insufficient-color-ratio.mdx new file mode 100644 index 000000000..73cee45cc --- /dev/null +++ b/docs/accessibility-android-rule-insufficient-color-ratio.mdx @@ -0,0 +1,41 @@ +--- +title: "Insufficient Color Ratio" +sidebarTitle: "Insufficient Color Ratio" +description: "Rule-level Accessibility guidance for Insufficient Color Ratio on Android." +"og:description": "Rule-level Accessibility guidance for Insufficient Color Ratio on Android." +--- + +Text and meaningful visual elements in Android apps must maintain sufficient contrast against their backgrounds for readability. + + +**WCAG Reference** +**Maps to:** WCAG 1.4.3 Contrast (Minimum) | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** AA | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html) + + +## What this rule checks + +The scanner measures the contrast ratio between foreground text or icon colors and their background, flagging pairs that fall below the 4.5:1 ratio for normal text or 3:1 for large text. + +## Why it matters + +Users with low vision, color-vision deficiencies, or those using devices in bright sunlight depend on adequate contrast to read text and distinguish UI elements. Low contrast makes content illegible. + +## Common failure patterns + +- light gray text on white backgrounds in settings or list items +- placeholder text in input fields with very low contrast +- status indicators using pale colors on light backgrounds +- disabled-state styling that falls below minimum ratios while the element remains interactive + +## Remediation guidance + +- verify text contrast against backgrounds using a color contrast analyzer +- use Material Design color tokens that are pre-validated for contrast compliance +- ensure all text states (enabled, disabled, error, hint) meet minimum ratios +- test on multiple devices and brightness levels to catch theme-specific failures + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-insufficient-target-spacing.mdx b/docs/accessibility-android-rule-insufficient-target-spacing.mdx new file mode 100644 index 000000000..8ca93419e --- /dev/null +++ b/docs/accessibility-android-rule-insufficient-target-spacing.mdx @@ -0,0 +1,41 @@ +--- +title: "Insufficient Target Spacing" +sidebarTitle: "Insufficient Target Spacing" +description: "Rule-level Accessibility guidance for Insufficient Target Spacing on Android." +"og:description": "Rule-level Accessibility guidance for Insufficient Target Spacing on Android." +--- + +Adjacent interactive Android elements must have adequate spacing between them to prevent accidental activation of neighboring controls. + + +**WCAG Reference** +**Maps to:** WCAG 2.5.5 Target Size (Enhanced) | **Applies to:** WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.1 | **Level:** AAA | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/target-size-enhanced.html) + + +## What this rule checks + +The scanner measures the gap between adjacent clickable or focusable elements and flags pairs that are too close together, increasing the risk of mis-taps. + +## Why it matters + +Even when individual touch targets meet the minimum size, placing them too close together makes it difficult for users with motor impairments to tap one without accidentally hitting the other. Sufficient spacing reduces errors and improves usability. + +## Common failure patterns + +- toolbar buttons placed edge-to-edge with no gap +- action buttons in list items (edit, delete, share) packed tightly together +- bottom navigation icons with minimal spacing on small screens +- floating action buttons positioned near other interactive elements + +## Remediation guidance + +- add at least 8dp of spacing between adjacent interactive elements +- use `android:layout_margin` or Compose `Modifier.padding` to create clear separation +- consider grouping related actions into an overflow menu to reduce density +- test on the smallest supported screen size to confirm spacing remains adequate + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-interactive-role-undefined.mdx b/docs/accessibility-android-rule-interactive-role-undefined.mdx new file mode 100644 index 000000000..68b4f206b --- /dev/null +++ b/docs/accessibility-android-rule-interactive-role-undefined.mdx @@ -0,0 +1,40 @@ +--- +title: "Interactive Role Undefined" +sidebarTitle: "Interactive Role Undefined" +description: "Rule-level Accessibility guidance for Interactive Role Undefined on Android." +"og:description": "Rule-level Accessibility guidance for Interactive Role Undefined on Android." +--- + +Interactive Android elements must expose a meaningful accessibility role so TalkBack can announce what the element is and how to interact with it. + + +**WCAG Reference** +**Maps to:** WCAG 4.1.2 Name, Role, Value | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html) + + +## What this rule checks + +The scanner flags interactive elements (buttons, switches, checkboxes, sliders) that do not expose a recognized accessibility role to the Android accessibility framework. + +## Why it matters + +TalkBack announces both the accessible name and the role ("Button", "Switch", "Checkbox") to tell users what kind of control they are interacting with. Without a role, users hear the name but cannot tell whether to tap, swipe, or double-tap. + +## Common failure patterns + +- custom clickable `View` elements with no `accessibilityClassName` override +- `LinearLayout` or `FrameLayout` used as a button with an `onClickListener` but no role +- Jetpack Compose elements using `clickable` without a `role` parameter in `Modifier.semantics` + +## Remediation guidance + +- use native Android widgets (`Button`, `Switch`, `CheckBox`) whenever possible +- for custom views, override `getAccessibilityClassName()` to return the appropriate widget class name +- in Jetpack Compose, set `role = Role.Button` (or the appropriate role) inside `Modifier.semantics { }` +- test with TalkBack to confirm the announced role matches the element's behavior + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-mismatched-label-text.mdx b/docs/accessibility-android-rule-mismatched-label-text.mdx new file mode 100644 index 000000000..e3c7d7720 --- /dev/null +++ b/docs/accessibility-android-rule-mismatched-label-text.mdx @@ -0,0 +1,40 @@ +--- +title: "Mismatched Label Text" +sidebarTitle: "Mismatched Label Text" +description: "Rule-level Accessibility guidance for Mismatched Label Text on Android." +"og:description": "Rule-level Accessibility guidance for Mismatched Label Text on Android." +--- + +The accessible name of an Android element must contain its visible text so that voice-access users can activate controls by speaking what they see. + + +**WCAG Reference** +**Maps to:** WCAG 2.5.3 Label in Name | **Applies to:** WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.1 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/label-in-name.html) + + +## What this rule checks + +The scanner compares the visible text of interactive elements with their computed accessible name (from `contentDescription` or labeling relationships) and flags mismatches where the visible text is not included in the accessible name. + +## Why it matters + +Voice Access users say "tap [visible text]" to interact with controls. If the accessible name differs from the visible text, the voice command fails and users cannot activate the control. + +## Common failure patterns + +- a button labeled "Submit" visually but with `contentDescription` set to "Send data" +- a `contentDescription` that abbreviates or paraphrases the visible text +- programmatic label updates that fall out of sync with the visible UI + +## Remediation guidance + +- ensure the `contentDescription` contains the visible text (it can be longer but must include the visible words) +- prefer not setting `contentDescription` on elements that already have visible text, letting the framework use the text directly +- audit dynamic content where visible text and accessible text are set independently +- test with Voice Access to confirm controls respond to their visible label + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-misplaced-field-label.mdx b/docs/accessibility-android-rule-misplaced-field-label.mdx new file mode 100644 index 000000000..eef499269 --- /dev/null +++ b/docs/accessibility-android-rule-misplaced-field-label.mdx @@ -0,0 +1,40 @@ +--- +title: "Misplaced Field Label" +sidebarTitle: "Misplaced Field Label" +description: "Rule-level Accessibility guidance for Misplaced Field Label on Android." +"og:description": "Rule-level Accessibility guidance for Misplaced Field Label on Android." +--- + +Form field labels in Android apps must be positioned correctly relative to their associated input so assistive technologies can pair them accurately. + + +**WCAG Reference** +**Maps to:** WCAG 3.3.2 Labels or Instructions | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/labels-or-instructions.html) + + +## What this rule checks + +The scanner verifies that labels associated with form fields through `labelFor` or proximity are positioned in a way that creates a clear visual and programmatic association. + +## Why it matters + +If a label appears far from its field or near the wrong field, TalkBack may announce the wrong label for a control. This causes confusion and can lead users to enter data in the wrong field. + +## Common failure patterns + +- a `TextView` label placed below the input field instead of above or beside it +- labels that are visually near the correct field but programmatically linked to a different field via `labelFor` +- dynamic layouts where field reordering breaks label-field proximity + +## Remediation guidance + +- place labels immediately above or to the start of their associated input field +- use `android:labelFor` on the label `TextView` pointing to the correct input `id` +- in Jetpack Compose, use `Modifier.semantics { contentDescription = "..." }` or explicit label composables +- test with TalkBack to confirm the announced label matches the visual label for each field + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-missing-field-label.mdx b/docs/accessibility-android-rule-missing-field-label.mdx new file mode 100644 index 000000000..bef0ef68c --- /dev/null +++ b/docs/accessibility-android-rule-missing-field-label.mdx @@ -0,0 +1,39 @@ +--- +title: "Missing Field Label" +sidebarTitle: "Missing Field Label" +description: "Rule-level Accessibility guidance for Missing Field Label." +"og:description": "Rule-level Accessibility guidance for Missing Field Label." +--- + +Input fields need labels that clearly describe the expected input. + + +**WCAG Reference** +**Maps to:** WCAG 3.3.2 Labels or Instructions | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/labels-or-instructions.html) + + +## What this rule checks + +This rule checks whether Android input controls expose clear labels that describe the purpose of the field to assistive technologies. + +## Why it matters + +Users need to know what information a field expects before they can complete forms accurately with TalkBack or other assistive tools. + +## Common failure patterns + +- editable fields with placeholder-only guidance +- inputs without associated labels in custom layouts +- reused generic labels that do not identify the field clearly + +## Remediation guidance + +- provide a visible and accessible label for each field +- connect the label and field programmatically when the UI framework supports it +- avoid relying on hints alone when they disappear after input starts + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-missing-image-alt.mdx b/docs/accessibility-android-rule-missing-image-alt.mdx new file mode 100644 index 000000000..daddfda7d --- /dev/null +++ b/docs/accessibility-android-rule-missing-image-alt.mdx @@ -0,0 +1,39 @@ +--- +title: "Missing Image Alt" +sidebarTitle: "Missing Image Alt" +description: "Rule-level Accessibility guidance for Missing Image Alt." +"og:description": "Rule-level Accessibility guidance for Missing Image Alt." +--- + +Meaningful images in Android experiences need an accessible description. + + +**WCAG Reference** +**Maps to:** WCAG 1.1.1 Non-text Content | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html) + + +## What this rule checks + +This rule checks whether meaningful Android images expose a useful accessibility description for TalkBack and related assistive technologies. + +## Why it matters + +If meaningful imagery is silent to assistive technology, users can miss content, state, or action context that is visible on screen. + +## Common failure patterns + +- product or profile images with no `contentDescription` +- icon buttons with visual meaning but no accessible label +- decorative images announced unnecessarily + +## Remediation guidance + +- add a clear `contentDescription` to meaningful images +- use an empty description for decorative content when appropriate +- verify that image-based controls expose both purpose and action + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-missing-input-value.mdx b/docs/accessibility-android-rule-missing-input-value.mdx new file mode 100644 index 000000000..5e129fac5 --- /dev/null +++ b/docs/accessibility-android-rule-missing-input-value.mdx @@ -0,0 +1,40 @@ +--- +title: "Missing Input Value" +sidebarTitle: "Missing Input Value" +description: "Rule-level Accessibility guidance for Missing Input Value on Android." +"og:description": "Rule-level Accessibility guidance for Missing Input Value on Android." +--- + +Android input fields must expose their current value to assistive technologies so TalkBack users can verify what they have entered. + + +**WCAG Reference** +**Maps to:** WCAG 4.1.2 Name, Role, Value | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html) + + +## What this rule checks + +The scanner verifies that `EditText`, `AutoCompleteTextView`, and custom input elements expose their current text value through the accessibility framework. + +## Why it matters + +TalkBack users cannot see the screen to verify their input. If the current value is not announced, users cannot confirm what they typed, leading to errors in forms, searches, and text entry. + +## Common failure patterns + +- custom input views that render text visually but do not expose it through `AccessibilityNodeInfo` +- masked fields (passwords, PINs) that hide the value without providing a character count or confirmation mechanism +- programmatically set text that does not trigger an accessibility event + +## Remediation guidance + +- use standard `EditText` or `TextInputLayout` which expose values automatically +- for custom inputs, populate `AccessibilityNodeInfo.setText()` with the current value +- fire `TYPE_VIEW_TEXT_CHANGED` events when the value changes programmatically +- test with TalkBack by focusing the input field and confirming the current value is announced + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-missing-screen-title.mdx b/docs/accessibility-android-rule-missing-screen-title.mdx new file mode 100644 index 000000000..7c630b60f --- /dev/null +++ b/docs/accessibility-android-rule-missing-screen-title.mdx @@ -0,0 +1,41 @@ +--- +title: "Missing Screen Title" +sidebarTitle: "Missing Screen Title" +description: "Rule-level Accessibility guidance for Missing Screen Title on Android." +"og:description": "Rule-level Accessibility guidance for Missing Screen Title on Android." +--- + +Each screen or activity in an Android app must have a descriptive title so users can identify where they are in the app. + + +**WCAG Reference** +**Maps to:** WCAG 2.4.2 Page Titled | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/page-titled.html) + + +## What this rule checks + +The scanner verifies that each `Activity` or navigable screen exposes a title through the `android:label` attribute, toolbar title, or accessibility pane title. + +## Why it matters + +TalkBack announces the screen title when a user navigates to a new screen. Without a title, users cannot tell which screen they are on, making navigation through an app disorienting and slow. + +## Common failure patterns + +- activities with no `android:label` in the manifest +- fragments used as top-level destinations without setting an accessibility pane title +- dynamic screen titles that are set programmatically but omit the TalkBack announcement +- toolbar titles that are set to empty strings or the app name on every screen + +## Remediation guidance + +- set `android:label` on every `` in `AndroidManifest.xml` +- for fragment-based navigation, call `ViewCompat.setAccessibilityPaneTitle(view, "Screen Name")` +- ensure toolbar titles reflect the specific screen, not just the app name +- test by navigating between screens with TalkBack to confirm announcements + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-missing-view-accessibility.mdx b/docs/accessibility-android-rule-missing-view-accessibility.mdx new file mode 100644 index 000000000..71a202333 --- /dev/null +++ b/docs/accessibility-android-rule-missing-view-accessibility.mdx @@ -0,0 +1,40 @@ +--- +title: "Missing View Accessibility" +sidebarTitle: "Missing View Accessibility" +description: "Rule-level Accessibility guidance for Missing View Accessibility on Android." +"og:description": "Rule-level Accessibility guidance for Missing View Accessibility on Android." +--- + +Meaningful Android views must be accessible to assistive technologies rather than being invisible to the accessibility framework. + + +**WCAG Reference** +**Maps to:** WCAG 4.1.2 Name, Role, Value | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html) + + +## What this rule checks + +The scanner flags views that carry meaningful content or functionality but are marked as `importantForAccessibility="no"` or have `focusable="false"` when they should be focusable. + +## Why it matters + +When a view is excluded from the accessibility tree, TalkBack users cannot perceive or interact with it. If the view carries meaningful information or actions, those users lose access entirely. + +## Common failure patterns + +- setting `android:importantForAccessibility="no"` on views that contain meaningful text or actions +- container layouts that suppress child accessibility without individual evaluation +- custom views that do not call `sendAccessibilityEvent` after state changes + +## Remediation guidance + +- set `importantForAccessibility="yes"` on views that carry meaningful content +- only mark truly decorative elements as `importantForAccessibility="no"` +- ensure custom views implement `AccessibilityDelegate` or override accessibility methods +- test with TalkBack to confirm all meaningful elements are announced + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-nested-control-issues.mdx b/docs/accessibility-android-rule-nested-control-issues.mdx new file mode 100644 index 000000000..2e822298e --- /dev/null +++ b/docs/accessibility-android-rule-nested-control-issues.mdx @@ -0,0 +1,40 @@ +--- +title: "Nested Control Issues" +sidebarTitle: "Nested Control Issues" +description: "Rule-level Accessibility guidance for Nested Control Issues on Android." +"og:description": "Rule-level Accessibility guidance for Nested Control Issues on Android." +--- + +Interactive Android elements should not be nested inside other interactive elements, as this creates ambiguous focus behavior for assistive technologies. + + +**WCAG Reference** +**Maps to:** WCAG 4.1.2 Name, Role, Value | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html) + + +## What this rule checks + +The scanner flags interactive views (buttons, switches, checkboxes) that are nested within other interactive containers (clickable layouts, other buttons), creating a confusing accessibility tree. + +## Why it matters + +When TalkBack encounters nested interactive elements, it may focus on the outer container and announce a combined label that obscures the inner controls, or it may skip the inner controls entirely. Users cannot predictably reach or activate individual nested actions. + +## Common failure patterns + +- a clickable `LinearLayout` that contains a `Button` and a `CheckBox` as children +- a list item with an `onClickListener` on the row and separate clickable actions inside it +- nested `RecyclerView` items with overlapping click targets + +## Remediation guidance + +- flatten the interactive hierarchy: either the container or its children should be interactive, not both +- use `android:importantForAccessibility="no"` on the container if individual child controls should receive focus +- for list items with multiple actions, use `AccessibilityAction` to expose additional actions through TalkBack's actions menu +- test by swiping through the screen with TalkBack to confirm each control is individually reachable + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-non-accessible-interaction.mdx b/docs/accessibility-android-rule-non-accessible-interaction.mdx new file mode 100644 index 000000000..9d1c0f9e7 --- /dev/null +++ b/docs/accessibility-android-rule-non-accessible-interaction.mdx @@ -0,0 +1,41 @@ +--- +title: "Non-accessible Interaction" +sidebarTitle: "Non-accessible Interaction" +description: "Rule-level Accessibility guidance for Non-accessible Interaction on Android." +"og:description": "Rule-level Accessibility guidance for Non-accessible Interaction on Android." +--- + +Interactive elements in Android apps must be operable through assistive technology gestures, not just direct touch. + + +**WCAG Reference** +**Maps to:** WCAG 4.1.2 Name, Role, Value | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html) + + +## What this rule checks + +The scanner identifies elements that respond to touch events but are not reachable or activatable through TalkBack gestures (double-tap to activate, swipe to navigate). + +## Why it matters + +TalkBack users interact with the screen through gestures: swiping to move focus and double-tapping to activate. If an element responds only to direct touch coordinates, TalkBack users cannot use it. + +## Common failure patterns + +- custom views that intercept `onTouchEvent` without implementing accessibility actions +- gesture-based interactions (long press, swipe) with no accessibility alternative +- views that use `OnTouchListener` without a corresponding `OnClickListener` +- canvas-drawn interactive elements with no accessibility node info + +## Remediation guidance + +- implement `OnClickListener` alongside any touch listeners +- add `AccessibilityAction` entries for custom gestures (long press, swipe) +- for canvas-drawn elements, create virtual child accessibility nodes using `ExploreByTouchHelper` +- test with TalkBack to confirm every interactive element can be reached by swiping and activated by double-tapping + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-repository.mdx b/docs/accessibility-android-rule-repository.mdx new file mode 100644 index 000000000..539399ebe --- /dev/null +++ b/docs/accessibility-android-rule-repository.mdx @@ -0,0 +1,55 @@ +--- +title: "Android Rule Repository" +sidebarTitle: "Android Rule Repository" +description: "Browse Android accessibility rule guidance, WCAG mappings, and remediation references." +"og:description": "Browse Android accessibility rule guidance, WCAG mappings, and remediation references." +--- + +Use this repository to browse Android accessibility rules and remediation guidance. + +This repository organizes Android app accessibility rules so common mobile findings map clearly to WCAG and practical remediation. Use it when a report points to a specific Android rule and you need more than a high-level checklist to plan fixes and retests. + +## When to use this + +Use this page when your Accessibility App or Native App Automation report points to a specific Android rule and you need deeper context than the summary checklist. + +## Priority Android rule pages + +| Rule page | WCAG | Use it for | +| --- | --- | --- | +| [Missing Image Alt](/support/docs/accessibility-android-rule-missing-image-alt/) | 1.1.1 | Meaningful images without accessible descriptions | +| [Missing Field Label](/support/docs/accessibility-android-rule-missing-field-label/) | 3.3.2 | Inputs without clear accessible labels | + +## Quick Reference + +| Rule Name | WCAG | Level | Impact | Description | Deep dive | +|-----------|------|-------|--------|-------------|-----------| +| Interactive Role Undefined | 4.1.2 | A | Critical | Interactive container elements (ViewGroup, FrameLayout, LinearLayout, etc.) that are clickable but lack a **role** for screen readers. A label (contentDesc) provides the **Name** only; WCAG 4.1.2 requires both Name and Role. Add a semantic child widget (Button, Switch, CheckBox, etc.) so the role is programmatically determinable, or ensure the container is not the sole interactive focus. | - | +| Missing Image Alt | 1.1.1 | A | Critical | Images lack alternative text descriptions that screen readers can announce to users. Add `android:contentDescription` to meaningful images or set to empty string for decorative images to ensure proper accessibility support. | [Open rule](/support/docs/accessibility-android-rule-missing-image-alt/) | +| Missing View Accessibility | 4.1.2 | A | Serious | Interactive elements like buttons, clickable views, or custom controls lack proper accessibility labels that describe their purpose. Ensure all interactive Views have clear `android:contentDescription` or associated labels for screen readers. | - | +| Unlabeled Checkbox Element | 4.1.2 | A | Serious | Checkbox controls are missing accessible names that describe their purpose or current state. Provide descriptive labels using `android:text`, `android:contentDescription`, or associated TextView labels so users understand what they're selecting. | - | +| Insufficient Color Ratio | 1.4.3 | AA | Serious | Text elements don't meet minimum contrast ratio requirements making them difficult to read for users with visual impairments. Maintain 4.5:1 ratio for normal text and 3:1 for large text by adjusting colors or background. | - | +| Missing Field Label | 3.3.2 | A | Serious | Input fields like EditText lack descriptive labels that identify their purpose to users. Provide clear labels using `android:hint`, associated TextView with `android:labelFor`, or TextInputLayout to describe expected input. | [Open rule](/support/docs/accessibility-android-rule-missing-field-label/) | +| Non-accessible Interaction | 4.1.2 | A | Serious | Custom interactive elements, buttons, or gesture-based controls cannot be accessed or activated through assistive technology. Ensure all interactive elements have proper focus handling, role definition, and descriptive labels. | - | +| Missing Screen Title | 2.4.2 | A | Serious | Activities or screens lack descriptive titles that help users understand their current location in the app. Set meaningful titles using `setTitle()` or `supportActionBar?.title` for proper navigation context. | - | +| Unlabeled Toggle Control | 4.1.2 | A | Serious | Switch, toggle, or similar controls are missing accessible names that explain what they control and their current state. Provide descriptive labels that clearly indicate what the toggle affects (e.g., "Wi-Fi enabled"). | - | +| Mismatched Label Text | 2.5.3 | A | Serious | The visible text label on a control differs from the programmatically accessible name, causing confusion for screen reader users. Ensure the accessible name includes or matches the visible text exactly. | - | +| Missing Input Value | 4.1.2 | A | Moderate | Text fields are missing programmatic values that assistive technology can read, making it difficult for users to understand current input state. Ensure EditText values are properly exposed and announced by screen readers. | - | +| Inaccessible Text Focus | 4.1.2 | A | Moderate | Text elements that receive focus lack proper accessibility properties, confusing screen reader users about their purpose. Either provide clear interactive roles and descriptions or remove focus capability for non-interactive text. | - | +| Misplaced Field Label | 3.3.2 | A | Moderate | Form labels are not positioned correctly relative to their controls or lack proper programmatic association. Ensure labels appear visually before controls and use `android:labelFor` for proper screen reader announcement order. | - | +| Nested Control Issues | 4.1.2 | A | Moderate | Interactive elements are incorrectly nested inside other interactive elements, creating focus traps and navigation confusion. Separate interactive elements into distinct, non-nested components to ensure proper accessibility navigation. | - | +| Unnamed Nested Element | 4.1.2 | A | Moderate | Elements within containers lack their own accessible names when they should be independently accessible. Provide distinct labels for nested interactive elements or mark decorative elements as non-focusable. | - | +| Fixed Orientation Lock | 1.3.4 | AA | Moderate | App restricts viewing to only portrait or landscape orientation without accessibility justification. Support both orientations or provide alternative access methods for users who cannot rotate their devices due to physical constraints. | - | +| Undersized Touch Target | 2.5.5 | AAA | Moderate | Interactive elements are smaller than the recommended minimum touch target size, making them difficult to activate for users with motor impairments. Ensure all touch targets are at least 48dp x 48dp. | - | +| Insufficient Target Spacing | 2.5.5 | AAA | Moderate | Interactive elements are placed too close together without adequate spacing, increasing risk of accidental activation. Provide sufficient spacing between adjacent touch targets to prevent targeting errors for users with limited dexterity. | - | + +## How to use this repository + +1. Open the rule page that matches the finding in your report. +2. Review the remediation guidance for Android UI components. +3. Apply the fix and retest the affected screen in App Scanner or Native App Automation. + +## Related docs + +- [Android checklist](/support/docs/accessibility-android-what-we-cover/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-undersized-touch-target.mdx b/docs/accessibility-android-rule-undersized-touch-target.mdx new file mode 100644 index 000000000..b77db971b --- /dev/null +++ b/docs/accessibility-android-rule-undersized-touch-target.mdx @@ -0,0 +1,41 @@ +--- +title: "Undersized Touch Target" +sidebarTitle: "Undersized Touch Target" +description: "Rule-level Accessibility guidance for Undersized Touch Target on Android." +"og:description": "Rule-level Accessibility guidance for Undersized Touch Target on Android." +--- + +Interactive Android elements must meet a minimum touch target size of 48x48 dp to ensure users with motor impairments can tap them reliably. + + +**WCAG Reference** +**Maps to:** WCAG 2.5.5 Target Size (Enhanced) | **Applies to:** WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.1 | **Level:** AAA | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/target-size-enhanced.html) + + +## What this rule checks + +The scanner measures the rendered size of clickable and focusable elements and flags those smaller than 48x48 dp (the Android accessibility guideline minimum). + +## Why it matters + +Users with motor impairments, tremors, or limited dexterity need adequately sized targets to tap accurately. Small targets cause frequent mis-taps, frustration, and can make features practically unreachable. + +## Common failure patterns + +- icon buttons (close, favorite, menu dots) rendered at 24x24 dp without additional touch padding +- inline text links with no minimum height enforcement +- compact toolbar actions sized to the icon dimensions only +- list item action buttons (delete, edit) with minimal padding + +## Remediation guidance + +- set `android:minWidth` and `android:minHeight` to at least 48dp on all interactive elements +- use `android:padding` or `TouchDelegate` to expand the touch area without changing the visual size +- in Jetpack Compose, use `Modifier.sizeIn(minWidth = 48.dp, minHeight = 48.dp)` +- Material Design components enforce this by default; prefer using them over custom implementations + +## Related docs + +- [Android Rule Repository](/support/docs/accessibility-android-rule-repository/) +- [Accessibility Issue Remediation Guide](/support/docs/accessibility-issue-remediation-guide/) diff --git a/docs/accessibility-android-rule-unlabeled-checkbox-element.mdx b/docs/accessibility-android-rule-unlabeled-checkbox-element.mdx new file mode 100644 index 000000000..4d5bbdde0 --- /dev/null +++ b/docs/accessibility-android-rule-unlabeled-checkbox-element.mdx @@ -0,0 +1,40 @@ +--- +title: "Unlabeled Checkbox Element" +sidebarTitle: "Unlabeled Checkbox Element" +description: "Rule-level Accessibility guidance for Unlabeled Checkbox Element on Android." +"og:description": "Rule-level Accessibility guidance for Unlabeled Checkbox Element on Android." +--- + +Android checkbox elements must have an accessible label that describes what the checkbox controls. + + +**WCAG Reference** +**Maps to:** WCAG 4.1.2 Name, Role, Value | **Applies to:** WCAG 2.0, WCAG 2.1, WCAG 2.2 +**Introduced in:** WCAG 2.0 | **Level:** A | [Read the official specification →](https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html) + + +## What this rule checks + +The scanner identifies `CheckBox` and checkbox-like views that have no `contentDescription`, no associated `