Next-gen browser and mobile automation test framework for Node.js
This report summarizes scanner evidence for webdriverio/webdriverio, a TypeScript project with 9,869 GitHub stars. SynthScan examined 389,116 lines of code across 2679 source files, recording 306 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 1.3 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 261 finding(s).
Are imports declared and package/API names verified? 43 finding(s).
Are wrappers, guards, and repeated structures necessary? 135 finding(s).
Which changes need focused human review? 306 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 306 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | infra/docs/src/packagesDocs.ts | 34 | export function generateReportersAndServicesDocs (sidebars: any, options: PackagesDocsOptions = {}) { | CODE |
| LOW | infra/docs/src/copyContributingDocs.ts | 17 | export function rewriteRepoRootMarkdownLinks (markdown: string) { | CODE |
| LOW | infra/docs/src/downloadDocsTranslations.ts | 61 | export function applyElectronMockingLinkFix(content: string) { | CODE |
| LOW | infra/docs/src/desktopDocs.ts | 76 | export async function generateDesktopServiceDocs (config: DesktopDocsConfig, rootDir = getRootDir()) { | CODE |
| LOW | infra/repo-tools/src/docs-list.ts | 31 | export function firstHeadingOrFrontmatterTitle (contents: string, fallback: string): string { | CODE |
| LOW | website/src/components/CreateProjectAnimation.tsx | 29 | export function CreateMacOSProjectAnimation() { | CODE |
| LOW | packages/wdio-logger/src/index.ts | 276 | function logsContainInitPackageError(logText: string) { | CODE |
| LOW | packages/wdio-vitest-framework/src/setup.ts | 170 | async function resolveAttachmentTransport(resultsDir: string | null | undefined): Promise<AttachmentTransport> { | CODE |
| LOW | packages/wdio-config/tests/node/configparser.test.ts | 140 | async function ConfigParserForTestWithAllFiles(configPath: string, args = {}) { | CODE |
| LOW | packages/wdio-config/src/utils.ts | 80 | export function isCucumberFeatureWithLineNumber(spec: string | string[]) { | CODE |
| LOW | packages/wdio-config/src/node/ConfigParser.ts | 654 | function filterDublicationArrayItems(specList: Spec[]) { | CODE |
| LOW | packages/wdio-cucumber-framework/src/parallel.ts | 461 | function collectSupportCodeMessages(supportCodeLibrary: SupportCodeLibrary): SupportCodeMessages { | CODE |
| LOW | packages/wdio-cucumber-framework/src/utils.ts | 227 | export function generateSkipTagsFromCapabilities(capabilities: Capabilities.ResolvedTestrunnerCapabilities, tags: string | CODE |
| LOW | packages/wdio-browser-runner/src/browser/expect.ts | 233 | export function shouldLoadAssertionContext (context: unknown): boolean { | CODE |
| LOW | packages/wdio-browser-runner/src/browser/expect.ts | 265 | function serializeAsymmetricMatchers(arg: unknown): unknown { | CODE |
| LOW | …s/wdio-allure-reporter/tests/__fixtures__/testState.ts | 35 | export function testFailedWithMultipleErrors() { | CODE |
| LOW | …s/wdio-allure-reporter/tests/__fixtures__/testState.ts | 50 | export function testFailedWithMultipleErrorsAndStacksNotContainingMessages() { | CODE |
| LOW | …s/wdio-allure-reporter/tests/__fixtures__/testState.ts | 65 | export function testFailedWithAssertionErrorFromExpectWebdriverIO() { | CODE |
| LOW | …s/wdio-allure-reporter/tests/__fixtures__/testState.ts | 99 | export function testFailedWithHtmlEntities() { | CODE |
| LOW | …s/wdio-allure-reporter/tests/__fixtures__/testState.ts | 175 | export function hookFailedWithHtmlEntities(): WDIOReporter.Hook { | CODE |
| LOW | packages/wdio-allure-reporter/src/reporter.ts | 126 | function hasCucumberKeywordInTitle(title?: string): boolean { | CODE |
| LOW | packages/wdio-allure-reporter/src/common/api.ts | 252 | export async function addGlobalAttachmentFromPath(name: string, path: string, contentType: ContentType | string = Conten | CODE |
| LOW | packages/wdio-session/src/actions/emulate.ts | 156 | async function readGeolocationPermission (browser: WebdriverIO.Browser): Promise<PermissionSetting | undefined> { | CODE |
| LOW | packages/wdio-session/src/actions/emulate.ts | 185 | async function writeGeolocationPermission (browser: WebdriverIO.Browser, origin: string, setting: PermissionSetting) { | CODE |
| LOW | packages/wdio-session/src/actions/emulate.ts | 320 | async function installClassicGeolocation (browser: WebdriverIO.Browser, latitude: number, longitude: number, accuracy: n | CODE |
| LOW | packages/wdio-runner/src/utils.ts | 184 | function isSerializedAsymmetricMatcher(arg: unknown): arg is SerializedAsymmetricMatcher { | CODE |
| LOW | packages/wdio-runner/src/browser.ts | 588 | function assertBrowserChannelHandled (message: never): never { | CODE |
| LOW | packages/wdio-cli/src/commands/run.ts | 277 | async function tsConfigPathFromConfigFile(wdioConfPath: string, params: Partial<RunCommandArguments>): Promise<string | | CODE |
| LOW | packages/wdio-appium-service/src/cli-utils.ts | 15 | function inspectorPluginNotInstalledError(message: string) { | CODE |
| LOW | packages/wdio-appium-service/src/cli-utils.ts | 74 | export async function determineAppiumCliCommand(command = 'appium'): Promise<string> { | CODE |
| LOW | packages/wdio-appium-service/src/cli-utils.ts | 87 | export async function checkInspectorPluginInstalled(appiumCommandPath: string): Promise<void> { | CODE |
| LOW | packages/wdio-appium-service/src/cli-utils.ts | 123 | async function askToInstallInspectorPlugin(): Promise<boolean> { | CODE |
| LOW | packages/wdio-appium-service/src/cli-utils.ts | 156 | export async function ensureInspectorPluginInstalled(appiumCommandPath: string): Promise<void> { | CODE |
| LOW | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 155 | export async function optimizeMultipleSelectors( | CODE |
| LOW | …e/src/mobileSelectorPerformanceOptimizer/mspo-store.ts | 27 | export function clearContextNamesResolver(resolver: () => ContextNames | undefined): void { | CODE |
| LOW | …e/src/mobileSelectorPerformanceOptimizer/aggregator.ts | 140 | export async function aggregateSelectorPerformanceData( | CODE |
| LOW | …e/src/mobileSelectorPerformanceOptimizer/aggregator.ts | 578 | function deduplicateSelectorsForCli( | CODE |
| LOW | …e/src/mobileSelectorPerformanceOptimizer/aggregator.ts | 656 | function generateGroupedSummaryReport( | CODE |
| LOW | …leSelectorPerformanceOptimizer/utils/command-timing.ts | 6 | export function findMostRecentUnmatchedUserCommand( | CODE |
| LOW | …leSelectorPerformanceOptimizer/utils/command-timing.ts | 17 | export function findMatchingInternalCommandTiming( | CODE |
| LOW | …orPerformanceOptimizer/utils/xpath-selector-builder.ts | 13 | export function buildSelectorFromElementData( | CODE |
| LOW | …orPerformanceOptimizer/utils/xpath-selector-builder.ts | 54 | function buildUniquePredicateString( | CODE |
| LOW | …electorPerformanceOptimizer/utils/xpath-page-source.ts | 18 | export function isSelectorUniqueInPageSource(selector: string, pageSource: string): boolean { | CODE |
| LOW | …electorPerformanceOptimizer/utils/xpath-page-source.ts | 52 | export function countMatchingElementsByPredicate(predicateString: string, pageSource: string): number { | CODE |
| LOW | …electorPerformanceOptimizer/utils/xpath-page-source.ts | 97 | function matchesPredicateConditions(attrs: string, conditions: PredicateCondition[]): boolean { | CODE |
| LOW | …electorPerformanceOptimizer/utils/xpath-page-source.ts | 111 | export function countMatchingElementsByClassChain(chainString: string, pageSource: string): number { | CODE |
| LOW | …SelectorPerformanceOptimizer/utils/performance-data.ts | 7 | export function createOptimizedSelectorData( | CODE |
| LOW | …mobileSelectorPerformanceOptimizer/utils/formatting.ts | 47 | export function logOptimizationConclusion( | CODE |
| LOW | …electorPerformanceOptimizer/utils/selector-location.ts | 134 | function findPageObjectFilesFromConfig(pageObjectPaths: string[]): string[] { | CODE |
| LOW | …eSelectorPerformanceOptimizer/utils/xpath-detection.ts | 12 | export function detectUnmappableXPathFeatures(xpath: string): string[] { | CODE |
| LOW | …rformanceOptimizer/utils/xpath-page-source-executor.ts | 88 | export function findElementByXPathWithFallback(xpathExpr: string, pageSource: string): XPathExecutionResult | null { | CODE |
| LOW | …SelectorPerformanceOptimizer/utils/selector-testing.ts | 11 | async function extractMatchingElementsFromPageSource( | CODE |
| LOW | …eSelectorPerformanceOptimizer/utils/xpath-converter.ts | 21 | export async function convertXPathToOptimizedSelector( | CODE |
| LOW | packages/wdio-lighthouse-service/src/commands.ts | 41 | function isCDPSessionOnMessageObject( | CODE |
| LOW | packages/wdio-lighthouse-service/src/utils.ts | 153 | export function hasCorePerformanceMetrics (lhr?: LighthouseResultLike): lhr is LighthouseResultLike { | CODE |
| LOW | packages/wdio-utils/src/shim.ts | 105 | export function registerElementArrayFactory (factory: ElementArrayFactory) { | CODE |
| LOW | packages/wdio-utils/src/shim.ts | 251 | function createElementPromiseProxy ( | CODE |
| LOW | packages/wdio-utils/src/initializeServices.ts | 94 | export async function initializeLauncherService ( | CODE |
| LOW | packages/wdio-utils/src/envDetector.ts | 274 | export function capabilitiesEnvironmentDetector(capabilities: WebdriverIO.Capabilities) { | CODE |
| LOW | packages/wdio-utils/src/envDetector.ts | 295 | export function sessionEnvironmentDetector({ | CODE |
| 73 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | packages/wdio-ai-service/src/tools.ts | 337 | const native = !context.agent.session.plan.applies.includes('W') | CODE |
| CRITICAL | packages/wdio-mocha-framework/tests/adapter.test.ts | 70 | expect(runner.suite.beforeAll.mock.calls.map(([title]: [string]) => title)).toEqual(before) | CODE |
| CRITICAL | packages/wdio-mocha-framework/tests/adapter.test.ts | 71 | expect(runner.suite.afterAll.mock.calls.map(([title]: [string]) => title)).toEqual(after) | CODE |
| CRITICAL | …ckages/webdriverio/tests/session/bidiMapperLog.test.ts | 53 | const cdpCalls = () => browser._bidiHandler.send.mock.calls.map(([{ params }]) => params) | CODE |
| CRITICAL | …ckages/webdriverio/tests/session/bidiMapperLog.test.ts | 77 | expect(browser._bidiHandler.send.mock.calls.map(([command]) => command)).toEqual([ | CODE |
| CRITICAL | e2e/session/contexts.test.ts | 45 | expect(two.json.result.data.tabs.map((t: { title: string, current: boolean }) => [t.title, t.current])) | CODE |
| CRITICAL | e2e/session/export.test.ts | 61 | expect(listed.json.result.data.entries.map((e: { kind: string }) => e.kind)).toContain('open') | CODE |
| CRITICAL | e2e/session/visual.test.ts | 76 | const tags = listed.json.result.data.tags.map((tag: { tag: string }) => tag.tag) | CODE |
| CRITICAL | e2e/session/lifecycle.test.ts | 89 | expect(list.json.result.data.sessions.map((s: { name: string }) => s.name).sort()).toEqual(['a', 'b']) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | website/docs/ConfigurationFile.md | 21 | // Server Configurations | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 41 | // values you must put here, in order to connect to these services. | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 61 | // of the configuration file being run. | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 81 | // ============ | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 101 | maxInstancesPerCapability: 10, | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 121 | // Parameter to ignore some or all default flags | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 141 | // If outputDir is provided WebdriverIO can capture driver session logs | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 161 | // Set specific log levels per logger | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 181 | // | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 201 | // Delay in seconds between the spec file retry attempts | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 221 | mochaOpts: { | COMMENT |
| LOW | website/docs/ConfigurationFile.md | 261 | // Your TSConfig is automatically detected from the current working directory | COMMENT |
| LOW | website/static/robots.txt | 1 | # robots.txt for https://webdriver.io | COMMENT |
| LOW | examples/wdio.conf.js | 1 | COMMENT | |
| LOW | examples/wdio.conf.js | 21 | // ================= | COMMENT |
| LOW | examples/wdio.conf.js | 41 | // The specs are defined as an array of spec files (optionally using wildcards | COMMENT |
| LOW | examples/wdio.conf.js | 61 | // ============ | COMMENT |
| LOW | examples/wdio.conf.js | 101 | // | COMMENT |
| LOW | examples/wdio.conf.js | 121 | // bail (default is 0 - don't bail, run all tests). | COMMENT |
| LOW | examples/wdio.conf.js | 141 | // Retried specfiles are inserted at the beginning of the queue and retried immediately | COMMENT |
| LOW | examples/wdio.conf.js | 161 | }, | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 1 | import path from 'node:path' | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 21 | // | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 41 | // Test Configurations | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 61 | // | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 81 | reporters: ['spec'], | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 101 | // }, | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 121 | // Hook that gets executed _before_ a hook within the suite starts (e.g. runs before calling | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 141 | // }, | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 161 | // Runs before a Cucumber Scenario. | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 181 | // @param {object} result results object containing scenario results | COMMENT |
| LOW | examples/pageobject/wdio.conf.js | 201 | // | COMMENT |
| LOW | examples/wdio/vite-vue-example/wdio.conf.ts | 1 | import url from 'node:url' | COMMENT |
| LOW | examples/wdio/vite-vue-example/wdio.conf.ts | 21 | // worker process. In order to have a group of spec files run in the same worker | COMMENT |
| LOW | examples/wdio/vite-vue-example/wdio.conf.ts | 41 | rootDir: __dirname | COMMENT |
| LOW | examples/wdio/vite-vue-example/wdio.conf.ts | 61 | // If you have trouble getting all important capabilities together, check out the | COMMENT |
| LOW | examples/wdio/vite-vue-example/wdio.conf.ts | 81 | // =================== | COMMENT |
| LOW | examples/wdio/vite-vue-example/wdio.conf.ts | 101 | // If you only want to run your tests until a specific amount of tests have failed use | COMMENT |
| LOW | examples/wdio/vite-vue-example/wdio.conf.ts | 121 | // Test runner services | COMMENT |
| LOW | examples/wdio/vite-vue-example/wdio.conf.ts | 141 | // Whether or not retried spec files should be retried immediately or deferred to the end of the queue | COMMENT |
| LOW | …kages/wdio-config/tests/__fixtures__/prefix-test-02.ts | 1 | // .keepMe | COMMENT |
| LOW | …kages/wdio-config/tests/__fixtures__/prefix-test-01.ts | 1 | // .keepMe | COMMENT |
| LOW | packages/wdio-ai-service/src/recorder.ts | 161 | /** | COMMENT |
| LOW | packages/wdio-lighthouse-service/README.md | 221 | ### `getPageWeight` Command | COMMENT |
| LOW | packages/webdriver/src/bidi/core.ts | 61 | #id = 0 | COMMENT |
| LOW | packages/webdriverio/third_party/fake-timers.js | 1841 | COMMENT | |
| LOW | packages/webdriverio/src/utils/interception/index.ts | 121 | #filterOptions: MockFilterOptions | COMMENT |
| LOW | …ges/webdriverio/src/commands/element/getCSSProperty.ts | 41 | // rgba: 'rgba(0, 136, 204, 1)' | COMMENT |
| LOW | packages/webdriverio/src/commands/mobile/getContext.ts | 61 | * <example> | COMMENT |
| LOW | packages/webdriverio/src/commands/mobile/getContexts.ts | 61 | // Returns ['NATIVE_APP', 'WEBVIEW_com.wdiodemoapp', ...] | COMMENT |
| LOW | packages/webdriverio/src/commands/mobile/getContexts.ts | 81 | // webviewPageId: '58B0AA2DBBBBBE9008C35AE42385BB0D' | COMMENT |
| LOW | packages/webdriverio/src/commands/mobile/getContexts.ts | 101 | // }, | COMMENT |
| LOW | packages/webdriverio/src/commands/mobile/getContexts.ts | 121 | // // Indicates whether the web page is currently attached to a web view. | COMMENT |
| LOW | packages/webdriverio/src/commands/mobile/swipe.ts | 221 | }) | COMMENT |
| LOW | packages/webdriverio/src/session/context.ts | 121 | export type FlatContextTree = Omit<local.BrowsingContextInfo, 'children'> & { children: string[] } | COMMENT |
| LOW | …wdio-cucumberjs-json-reporter/tests/__mocks__/mocks.ts | 401 | // 'acceptInsecureCerts': false, | COMMENT |
| LOW | …wdio-cucumberjs-json-reporter/tests/__mocks__/mocks.ts | 421 | // 'platform': 'Mac OS X', | COMMENT |
| LOW | …wdio-cucumberjs-json-reporter/tests/__mocks__/mocks.ts | 441 | // 'suites': {}, | COMMENT |
| LOW | …wdio-cucumberjs-json-reporter/tests/__mocks__/mocks.ts | 461 | // 'customData': { | COMMENT |
| LOW | …wdio-cucumberjs-json-reporter/tests/__mocks__/mocks.ts | 481 | // 'mochaOpts': { 'timeout': 10000 }, | COMMENT |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | infra/docs/tests/generateDocs.test.ts | 40 | print('Generate Protocol Docs') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 52 | print('Generate Protocol Docs') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 54 | print('Generate WebdriverIO Docs') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 56 | print('Generate Reporter & Services Docs') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 60 | print('Generate Event Docs') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 62 | print('Generate Desktop Service Docs (Electron + Tauri + Dioxus)') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 66 | print('Copy over Contributing Guidelines') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 68 | print('Copy over Awesome Resources') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 71 | print('English-only docs (skipping translation download)') | CODE |
| HIGH⚡ | infra/docs/src/generateDocs.ts | 73 | print('Download docs translations') | CODE |
| HIGH | infra/bidiCodegen/src/generate.ts | 205 | print(bidiCode, { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | infra/docs/src/downloadDocsTranslations.ts | 241 | // Step 1: Determine default branch if not specified | COMMENT |
| LOW⚡ | infra/docs/src/downloadDocsTranslations.ts | 247 | // Step 2: Download the zipball | COMMENT |
| LOW | infra/docs/src/downloadDocsTranslations.ts | 271 | // Step 3: Extract to temp directory first | COMMENT |
| LOW | infra/docs/src/downloadDocsTranslations.ts | 287 | // Step 4: Move contents from temp directory to final location | COMMENT |
| LOW | website/docs/VisualTesting.md | 320 | ### Step 1: Add Type Definitions | COMMENT |
| LOW | website/docs/VisualTesting.md | 331 | ### Step 2: Enable Type Safety for Service Options | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-app-percy.md | 12 | ### Step 1: Create new app project on percy dashboard | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-app-percy.md | 16 | ### Step 2: Set the project token as an environment variable | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-app-percy.md | 26 | ### Step 3: Install Percy packages | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-app-percy.md | 35 | ### Step 4: Install dependencies | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-app-percy.md | 43 | ### Step 5: Update test script | COMMENT |
| LOW | website/docs/visual-testing/integrate-with-app-percy.md | 63 | ### Step 6: Run your test script | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-percy.md | 12 | ### Step 1: Create a Percy project | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-percy.md | 17 | ### Step 2: Set the project token as an environment variable | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-percy.md | 27 | ### Step 3: Install Percy dependencies | COMMENT |
| LOW⚡ | website/docs/visual-testing/integrate-with-percy.md | 37 | ### Step 4: Update your test script | COMMENT |
| LOW | website/docs/visual-testing/integrate-with-percy.md | 93 | ### Step 5: Run Percy | COMMENT |
| LOW | website/docs/mcp/cloud-providers.md | 131 | ### Step 1: Upload your app | COMMENT |
| LOW | website/docs/mcp/cloud-providers.md | 156 | ### Step 2: List available apps | COMMENT |
| LOW | website/docs/mcp/cloud-providers.md | 172 | ### Step 3: Start the session | COMMENT |
| LOW⚡ | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 51 | // Step 1: Test the current XPath selector first | COMMENT |
| LOW⚡ | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 59 | // Step 2: Find optimized selector | COMMENT |
| LOW⚡ | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 76 | // Step 3: Log the potential optimized selector | COMMENT |
| LOW⚡ | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 81 | // Step 4: Test the optimized selector | COMMENT |
| LOW | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 109 | // Step 5: Compare and conclude | COMMENT |
| LOW | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 130 | // Step 6: Execute with optimized selector | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | __mocks__/fetch.ts | 399 | { name: 'cookie1', value: 'dummy-value-1' }, | CODE |
| LOW⚡ | __mocks__/fetch.ts | 400 | { name: 'cookie2', value: 'dummy-value-2' }, | CODE |
| LOW⚡ | __mocks__/fetch.ts | 401 | { name: 'cookie3', value: 'dummy-value-3' }, | CODE |
| LOW | packages/wdio-session/src/actions/exec.ts | 31 | collapse(el.getAttribute('placeholder')) || collapse(el.innerText || el.textContent) | CODE |
| LOW | packages/wdio-snapshot/src/web.ts | 324 | const placeholder = el.getAttribute('placeholder') | CODE |
| LOW⚡ | …/webdriverio/tests/commands/browser/setCookies.test.ts | 14 | const cookie1 = { name: 'cookie1', value: 'dummy-value-1' } | CODE |
| LOW⚡ | …/webdriverio/tests/commands/browser/setCookies.test.ts | 15 | const cookie2 = { name: 'cookie2', value: 'dummy-value-2' } | CODE |
| LOW⚡ | …/webdriverio/tests/commands/browser/setCookies.test.ts | 16 | const cookie3 = { name: 'cookie2', value: 'dummy-value-3' } | CODE |
| LOW⚡ | …/webdriverio/tests/commands/browser/getCookies.test.ts | 36 | { name: 'cookie1', value: 'dummy-value-1' }, | CODE |
| LOW⚡ | …/webdriverio/tests/commands/browser/getCookies.test.ts | 37 | { name: 'cookie2', value: 'dummy-value-2' }, | CODE |
| LOW⚡ | …/webdriverio/tests/commands/browser/getCookies.test.ts | 38 | { name: 'cookie3', value: 'dummy-value-3' }, | CODE |
| LOW | …/webdriverio/tests/commands/browser/getCookies.test.ts | 63 | expect(cookies).toEqual([{ name: 'cookie1', value: 'dummy-value-1' }]) | CODE |
| LOW | packages/webdriverio/src/scripts/findByRole.ts | 82 | return (el.getAttribute('placeholder') || '').replace(/\s+/g, ' ').trim() | CODE |
| LOW | packages/webdriverio/src/commands/element/isSelected.ts | 11 | <option value="John Doe">John Doe</option> | CODE |
| LOW⚡ | packages/webdriverio/src/commands/element/getHTML.ts | 23 | <span>Lorem ipsum dolor amet</span> | CODE |
| LOW⚡ | packages/webdriverio/src/commands/element/getHTML.ts | 30 | // "<div id="test"><span>Lorem ipsum dolor amet</span></div>" | COMMENT |
| LOW⚡ | packages/webdriverio/src/commands/element/getHTML.ts | 35 | // "<span>Lorem ipsum dolor amet</span>" | COMMENT |
| LOW | packages/webdriverio/src/commands/element/getValue.ts | 11 | <input type="text" value="John Doe" id="username"> | CODE |
| LOW | packages/webdriverio/src/commands/element/getValue.ts | 16 | console.log(value); // outputs: "John Doe" | CODE |
| LOW⚡ | packages/webdriverio/src/commands/element/getText.ts | 14 | Lorem ipsum <strong>dolor</strong> sit amet,<br /> | CODE |
| LOW⚡ | packages/webdriverio/src/commands/element/getText.ts | 23 | // "Lorem ipsum dolor sit amet,consetetur sadipscing elitr" | COMMENT |
| LOW⚡ | packages/webdriverio/src/commands/element/getText.ts | 23 | // "Lorem ipsum dolor sit amet,consetetur sadipscing elitr" | COMMENT |
| LOW | packages/webdriverio/src/commands/element/getTagName.ts | 7 | <div id="elem">Lorem ipsum</div> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | infra/docs/src/downloadDocsTranslations.ts | 241 | // Step 1: Determine default branch if not specified | COMMENT |
| LOW⚡ | infra/docs/src/downloadDocsTranslations.ts | 247 | // Step 2: Download the zipball | COMMENT |
| LOW | infra/docs/src/downloadDocsTranslations.ts | 271 | // Step 3: Extract to temp directory first | COMMENT |
| LOW | infra/docs/src/downloadDocsTranslations.ts | 287 | // Step 4: Move contents from temp directory to final location | COMMENT |
| LOW⚡ | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 51 | // Step 1: Test the current XPath selector first | COMMENT |
| LOW⚡ | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 59 | // Step 2: Find optimized selector | COMMENT |
| LOW⚡ | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 76 | // Step 3: Log the potential optimized selector | COMMENT |
| LOW⚡ | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 81 | // Step 4: Test the optimized selector | COMMENT |
| LOW | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 109 | // Step 5: Compare and conclude | COMMENT |
| LOW | …ce/src/mobileSelectorPerformanceOptimizer/optimizer.ts | 130 | // Step 6: Execute with optimized selector | COMMENT |
| LOW | packages/webdriverio/src/commands/browser/execute.ts | 108 | * a function parameter, therefore we need to check if it starts with "function () {" | COMMENT |
| LOW | packages/webdriverio/src/node/saveScreenshot.ts | 156 | * "unsupported operation - Non-top-level 'context'". Therefor we need to check if | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ges/webdriverio/src/commands/element/scrollIntoView.ts | 253 | // element is already positioned as requested, nothing to scroll - but only trust | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/webdriverio/src/utils/bidi/elementCommands.ts | 272 | // ── Reads ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/webdriverio/src/utils/bidi/elementCommands.ts | 343 | // ── Select ───────────────────────────────────────────────── | COMMENT |