UI はローカライズ済みです。スキルの紹介と説明文書は選択した言語へ AI が自動翻訳し、コード・コマンド・パス・専門用語は原文のままです。原作者の文書が優先されます。
スキルを探す
データ・研究 · SKILL.md

quality-engineering-selector-stability

quality-engineering-selector-stability

Cross-stack selector and test-id policy for web and mobile automation. Use when writing or reviewing E2E/UI test locators, or adding data-testid/accessibility identifiers to components.

Independent GitHub snapshot · Automated classification · Original documentation governs

スキルの説明

GitHub

name: quality-engineering-selector-stability description: Cross-stack selector and test-id policy for web and mobile automation. Use when writing or reviewing E2E/UI test locators, or adding data-testid/accessibility identifiers to components. metadata: triggers: files: - "/e2e//.{ts,js}" - "**/.e2e.{ts,js}" keywords: - selector - locator - data-testid - testID - accessibilityIdentifier - testTag - stable locator - selector drift

Quality Engineering: Selector Stability

Priority: P0 (CRITICAL)

Web Ladder

getByRole / getByLabel > getByTestId (data-testid) > attribute CSS. Never XPath, nth-child, or generated class names.

Mobile Ladder

Accessibility id > resource-id / testTag > predicate/uiautomator > XPath. Never XPath.

Framework Map

  • React/Next.js: data-testid. React Native: testID + accessibilityLabel.
  • Flutter: Semantics(identifier:) for black-box E2E; WidgetKeys stay for widget tests.
  • SwiftUI/UIKit: .accessibilityIdentifier. Compose: Modifier.testTag + testTagsAsResourceId = true.

Naming

<screen>-<element>-<role>, kebab-case (e.g. checkout-submit-button).

Insertion Policy

Add ids to leaf interactive/assertable elements only, never layout wrappers. Never rename an existing id — ids are a public contract other tests depend on.

Drift Classes

rename (id changed), restructure (DOM/tree moved), i18n (visible text changed, id untouched).

Anti-Patterns

  • Text selectors on translated strings, index-based locators (nth), generated/hashed class names.
  • Using accessibilityLabel as a test id (it is user-facing a11y text, not a stable identifier).
  • "xpath just for now" — there is no temporary XPath; use the ladder from the first commit.

References

保存したスキル