Files
Claude-Code-Workflow/ccw/frontend/playwright-report/data/cb02cc89b036f72d51e391f540e49f54564eae7f.md
catlog22 81725c94b1 Add E2E tests for internationalization across multiple pages
- Implemented navigation.spec.ts to test language switching and translation of navigation elements.
- Created sessions-page.spec.ts to verify translations on the sessions page, including headers, status badges, and date formatting.
- Developed settings-page.spec.ts to ensure settings page content is translated and persists across sessions.
- Added skills-page.spec.ts to validate translations for skill categories, action buttons, and empty states.
2026-01-30 22:54:21 +08:00

12 KiB

Page snapshot

- generic [ref=e3]:
  - banner [ref=e4]:
    - link "navigation.header.brand" [ref=e6] [cursor=pointer]:
      - /url: /
      - img [ref=e7]
      - generic [ref=e11]: navigation.header.brand
    - generic [ref=e12]:
      - combobox "Select language" [active] [ref=e13] [cursor=pointer]:
        - img [ref=e14]
        - generic:
          - generic:
            - generic: 🇨🇳
            - generic: 中文
        - img [ref=e21]
      - button "common.aria.switchToDarkMode" [ref=e23] [cursor=pointer]:
        - img [ref=e24]
      - button "common.aria.userMenu" [ref=e27] [cursor=pointer]:
        - img [ref=e28]
  - generic [ref=e31]:
    - navigation "Claude Code Workflow" [ref=e32]:
      - navigation [ref=e33]:
        - list [ref=e34]:
          - listitem [ref=e35]:
            - link "navigation.main.home" [ref=e36] [cursor=pointer]:
              - /url: /
              - img [ref=e37]
              - generic [ref=e40]: navigation.main.home
          - listitem [ref=e41]:
            - link "navigation.main.sessions" [ref=e42] [cursor=pointer]:
              - /url: /sessions
              - img [ref=e43]
              - generic [ref=e48]: navigation.main.sessions
          - listitem [ref=e49]:
            - link "navigation.main.liteTasks" [ref=e50] [cursor=pointer]:
              - /url: /lite-tasks
              - img [ref=e51]
              - generic [ref=e53]: navigation.main.liteTasks
          - listitem [ref=e54]:
            - link "navigation.main.project" [ref=e55] [cursor=pointer]:
              - /url: /project
              - img [ref=e56]
              - generic [ref=e61]: navigation.main.project
          - listitem [ref=e62]:
            - link "navigation.main.history" [ref=e63] [cursor=pointer]:
              - /url: /history
              - img [ref=e64]
              - generic [ref=e67]: navigation.main.history
          - listitem [ref=e68]:
            - link "navigation.main.orchestrator" [ref=e69] [cursor=pointer]:
              - /url: /orchestrator
              - img [ref=e70]
              - generic [ref=e74]: navigation.main.orchestrator
          - listitem [ref=e75]:
            - link "navigation.main.loops" [ref=e76] [cursor=pointer]:
              - /url: /loops
              - img [ref=e77]
              - generic [ref=e82]: navigation.main.loops
          - listitem [ref=e83]:
            - link "navigation.main.issues" [ref=e84] [cursor=pointer]:
              - /url: /issues
              - img [ref=e85]
              - generic [ref=e89]: navigation.main.issues
          - listitem [ref=e90]:
            - link "navigation.main.skills" [ref=e91] [cursor=pointer]:
              - /url: /skills
              - img [ref=e92]
              - generic [ref=e98]: navigation.main.skills
          - listitem [ref=e99]:
            - link "navigation.main.commands" [ref=e100] [cursor=pointer]:
              - /url: /commands
              - img [ref=e101]
              - generic [ref=e104]: navigation.main.commands
          - listitem [ref=e105]:
            - link "navigation.main.memory" [ref=e106] [cursor=pointer]:
              - /url: /memory
              - img [ref=e107]
              - generic [ref=e117]: navigation.main.memory
          - listitem [ref=e118]:
            - link "navigation.main.settings" [ref=e119] [cursor=pointer]:
              - /url: /settings
              - img [ref=e120]
              - generic [ref=e123]: navigation.main.settings
          - listitem [ref=e124]:
            - link "navigation.main.help" [ref=e125] [cursor=pointer]:
              - /url: /help
              - img [ref=e126]
              - generic [ref=e130]: navigation.main.help
      - button "navigation.sidebar.collapseAria" [ref=e132] [cursor=pointer]:
        - img [ref=e133]
        - generic [ref=e137]: navigation.sidebar.collapse
    - main [ref=e138]:
      - generic [ref=e139]:
        - generic [ref=e140]:
          - heading "settings.title" [level=1] [ref=e141]:
            - img [ref=e142]
            - text: settings.title
          - paragraph [ref=e145]: settings.description
        - generic [ref=e146]:
          - heading "settings.sections.appearance" [level=2] [ref=e147]:
            - img [ref=e148]
            - text: settings.sections.appearance
          - generic [ref=e151]:
            - generic [ref=e152]:
              - paragraph [ref=e153]: settings.appearance.theme
              - paragraph [ref=e154]: settings.appearance.description
            - generic [ref=e155]:
              - button "settings.appearance.themeOptions.light" [ref=e156] [cursor=pointer]:
                - img [ref=e157]
                - text: settings.appearance.themeOptions.light
              - button "settings.appearance.themeOptions.dark" [ref=e167] [cursor=pointer]:
                - img [ref=e168]
                - text: settings.appearance.themeOptions.dark
              - button "settings.appearance.themeOptions.system" [ref=e170] [cursor=pointer]
        - generic [ref=e171]:
          - heading "settings.sections.language" [level=2] [ref=e172]:
            - img [ref=e173]
            - text: settings.sections.language
          - generic [ref=e181]:
            - generic [ref=e182]:
              - paragraph [ref=e183]: settings.language.displayLanguage
              - paragraph [ref=e184]: settings.language.chooseLanguage
            - combobox "Select language" [ref=e185] [cursor=pointer]:
              - generic:
                - generic:
                  - generic: 🇨🇳
                  - generic: 中文
              - img [ref=e186]
        - generic [ref=e188]:
          - heading "settings.sections.cliTools" [level=2] [ref=e189]:
            - img [ref=e190]
            - text: settings.sections.cliTools
          - paragraph [ref=e201]:
            - text: settings.cliTools.description
            - strong [ref=e202]: gemini
          - generic [ref=e203]:
            - generic [ref=e205] [cursor=pointer]:
              - generic [ref=e206]:
                - generic [ref=e207]:
                  - img [ref=e209]
                  - generic [ref=e220]:
                    - generic [ref=e221]:
                      - generic [ref=e222]: gemini
                      - generic [ref=e223]: settings.cliTools.default
                      - generic [ref=e224]: builtin
                    - paragraph [ref=e225]: gemini-2.5-pro
                - generic [ref=e226]:
                  - button "settings.cliTools.enabled" [ref=e227]:
                    - img [ref=e228]
                    - text: settings.cliTools.enabled
                  - img [ref=e230]
              - generic [ref=e232]:
                - generic [ref=e233]: analysis
                - generic [ref=e234]: debug
            - generic [ref=e237] [cursor=pointer]:
              - generic [ref=e238]:
                - img [ref=e240]
                - generic [ref=e251]:
                  - generic [ref=e252]:
                    - generic [ref=e253]: qwen
                    - generic [ref=e254]: builtin
                  - paragraph [ref=e255]: coder-model
              - generic [ref=e256]:
                - button "settings.cliTools.enabled" [ref=e257]:
                  - img [ref=e258]
                  - text: settings.cliTools.enabled
                - img [ref=e260]
            - generic [ref=e264] [cursor=pointer]:
              - generic [ref=e265]:
                - img [ref=e267]
                - generic [ref=e278]:
                  - generic [ref=e279]:
                    - generic [ref=e280]: codex
                    - generic [ref=e281]: builtin
                  - paragraph [ref=e282]: gpt-5.2
              - generic [ref=e283]:
                - button "settings.cliTools.enabled" [ref=e284]:
                  - img [ref=e285]
                  - text: settings.cliTools.enabled
                - img [ref=e287]
            - generic [ref=e291] [cursor=pointer]:
              - generic [ref=e292]:
                - img [ref=e294]
                - generic [ref=e305]:
                  - generic [ref=e306]:
                    - generic [ref=e307]: claude
                    - generic [ref=e308]: builtin
                  - paragraph [ref=e309]: sonnet
              - generic [ref=e310]:
                - button "settings.cliTools.enabled" [ref=e311]:
                  - img [ref=e312]
                  - text: settings.cliTools.enabled
                - img [ref=e314]
        - generic [ref=e316]:
          - heading "settings.dataRefresh.title" [level=2] [ref=e317]:
            - img [ref=e318]
            - text: settings.dataRefresh.title
          - generic [ref=e323]:
            - generic [ref=e324]:
              - generic [ref=e325]:
                - paragraph [ref=e326]: settings.dataRefresh.autoRefresh
                - paragraph [ref=e327]: settings.dataRefresh.autoRefreshDesc
              - button "settings.dataRefresh.enabled" [ref=e328] [cursor=pointer]
            - generic [ref=e329]:
              - generic [ref=e330]:
                - paragraph [ref=e331]: settings.dataRefresh.refreshInterval
                - paragraph [ref=e332]: settings.dataRefresh.refreshIntervalDesc
              - generic [ref=e333]:
                - button "15s" [ref=e334] [cursor=pointer]
                - button "30s" [ref=e335] [cursor=pointer]
                - button "60s" [ref=e336] [cursor=pointer]
                - button "120s" [ref=e337] [cursor=pointer]
        - generic [ref=e338]:
          - heading "settings.notifications.title" [level=2] [ref=e339]:
            - img [ref=e340]
            - text: settings.notifications.title
          - generic [ref=e343]:
            - generic [ref=e344]:
              - generic [ref=e345]:
                - paragraph [ref=e346]: settings.notifications.enableNotifications
                - paragraph [ref=e347]: settings.notifications.enableNotificationsDesc
              - button "settings.dataRefresh.enabled" [ref=e348] [cursor=pointer]
            - generic [ref=e349]:
              - generic [ref=e350]:
                - paragraph [ref=e351]: settings.notifications.soundEffects
                - paragraph [ref=e352]: settings.notifications.soundEffectsDesc
              - button "settings.notifications.off" [ref=e353] [cursor=pointer]
        - generic [ref=e354]:
          - heading "settings.sections.display" [level=2] [ref=e355]:
            - img [ref=e356]
            - text: settings.sections.display
          - generic [ref=e360]:
            - generic [ref=e361]:
              - paragraph [ref=e362]: settings.display.showCompletedTasks
              - paragraph [ref=e363]: settings.display.showCompletedTasksDesc
            - button "settings.display.show" [ref=e364] [cursor=pointer]
        - generic [ref=e365]:
          - generic [ref=e366]:
            - heading "settings.sections.hooks" [level=2] [ref=e367]:
              - img [ref=e368]
              - text: settings.sections.hooks
            - generic [ref=e375]: 0/0 cliHooks.stats.enabled
          - generic [ref=e376]:
            - img [ref=e377]
            - textbox "cliHooks.filters.searchPlaceholder" [ref=e380]
        - generic [ref=e386]:
          - generic [ref=e387]:
            - heading "settings.sections.rules" [level=2] [ref=e388]:
              - img [ref=e389]
              - text: settings.sections.rules
            - generic [ref=e396]: 0/0 cliRules.stats.enabled
          - generic [ref=e397]:
            - img [ref=e398]
            - textbox "cliRules.filters.searchPlaceholder" [ref=e401]
        - generic [ref=e407]:
          - heading "common.actions.reset" [level=2] [ref=e408]:
            - img [ref=e409]
            - text: common.actions.reset
          - paragraph [ref=e412]: settings.reset.description
          - button "common.actions.resetToDefaults" [ref=e413] [cursor=pointer]:
            - img [ref=e414]
            - text: common.actions.resetToDefaults