From 95e00a01a18fa1dfafea8565a203339a972288a4 Mon Sep 17 00:00:00 2001 From: re2zero Date: Wed, 19 Aug 2026 11:38:34 +0800 Subject: [PATCH 1/2] at compare base --- tests/at/at-tree.yaml | 468 - tests/at/cases_mapped.yaml | 904 -- tests/at/cases_raw.yaml | 7646 ----------------- tests/at/dump/runtime.yaml | 3682 -------- tests/at/dump/scanned_gaps.yaml | 2736 ------ tests/at/dump/scanned_ok.yaml | 88 - tests/at/dump/states/00_all.yaml | 3461 -------- tests/at/element_gaps.yaml | 132 - tests/at/suite-cases.yaml | 634 -- tests/at/yaml/elements.yaml | 169 - ...41\243\346\211\223\345\274\200.suite.yaml" | 28 - ...55\276\350\217\234\345\215\225.suite.yaml" | 64 - ...07\212\350\217\234\345\215\225.suite.yaml" | 76 - ...37\237\350\217\234\345\215\225.suite.yaml" | 136 - ...37\237\350\217\234\345\215\225.suite.yaml" | 63 - ...55\276\350\247\206\345\233\276.suite.yaml" | 36 - ...22\256\345\210\207\346\215\242.suite.yaml" | 56 - ...75\225\350\247\206\345\233\276.suite.yaml" | 40 - ...33\276\350\247\206\345\233\276.suite.yaml" | 42 - ...70\273\350\217\234\345\215\225.suite.yaml" | 36 - ...42\230\350\217\234\345\215\225.suite.yaml" | 44 - ...20\234\347\264\242\346\241\206.suite.yaml" | 48 - ...76\223\345\205\245\346\241\206.suite.yaml" | 32 - ...55\276\351\241\265\346\240\217.suite.yaml" | 40 - ...\231\250V25-\347\224\250\344\276\213.xlsx" | Bin 0 -> 641305 bytes 25 files changed, 20661 deletions(-) delete mode 100644 tests/at/at-tree.yaml delete mode 100644 tests/at/cases_mapped.yaml delete mode 100644 tests/at/cases_raw.yaml delete mode 100644 tests/at/dump/runtime.yaml delete mode 100644 tests/at/dump/scanned_gaps.yaml delete mode 100644 tests/at/dump/scanned_ok.yaml delete mode 100644 tests/at/dump/states/00_all.yaml delete mode 100644 tests/at/element_gaps.yaml delete mode 100644 tests/at/suite-cases.yaml delete mode 100644 tests/at/yaml/elements.yaml delete mode 100644 "tests/at/yaml/\344\270\273\347\225\214\351\235\242 \342\200\224 \346\227\240\346\226\207\346\241\243\346\211\223\345\274\200/\344\270\273\347\225\214\351\235\242 \342\200\224 \346\227\240\346\226\207\346\241\243\346\211\223\345\274\200.suite.yaml" delete mode 100644 "tests/at/yaml/\345\217\263\351\224\256\344\276\247\346\240\217\344\271\246\347\255\276\350\217\234\345\215\225/\345\217\263\351\224\256\344\276\247\346\240\217\344\271\246\347\255\276\350\217\234\345\215\225.suite.yaml" delete mode 100644 "tests/at/yaml/\345\217\263\351\224\256\344\276\247\346\240\217\346\263\250\351\207\212\350\217\234\345\215\225/\345\217\263\351\224\256\344\276\247\346\240\217\346\263\250\351\207\212\350\217\234\345\215\225.suite.yaml" delete mode 100644 "tests/at/yaml/\345\217\263\351\224\256\346\226\207\346\241\243\345\214\272\345\237\237\350\217\234\345\215\225/\345\217\263\351\224\256\346\226\207\346\241\243\345\214\272\345\237\237\350\217\234\345\215\225.suite.yaml" delete mode 100644 "tests/at/yaml/\345\217\263\351\224\256\347\274\251\346\224\276\345\214\272\345\237\237\350\217\234\345\215\225/\345\217\263\351\224\256\347\274\251\346\224\276\345\214\272\345\237\237\350\217\234\345\215\225.suite.yaml" delete mode 100644 "tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \344\271\246\347\255\276\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \344\271\246\347\255\276\350\247\206\345\233\276.suite.yaml" delete mode 100644 "tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \346\214\211\351\222\256\345\210\207\346\215\242/\345\267\246\344\276\247\346\240\217 \342\200\224 \346\214\211\351\222\256\345\210\207\346\215\242.suite.yaml" delete mode 100644 "tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\233\256\345\275\225\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\233\256\345\275\225\350\247\206\345\233\276.suite.yaml" delete mode 100644 "tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\274\251\347\225\245\345\233\276\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\274\251\347\225\245\345\233\276\350\247\206\345\233\276.suite.yaml" delete mode 100644 "tests/at/yaml/\346\240\207\351\242\230\346\240\217\344\270\273\350\217\234\345\215\225/\346\240\207\351\242\230\346\240\217\344\270\273\350\217\234\345\215\225.suite.yaml" delete mode 100644 "tests/at/yaml/\346\240\207\351\242\230\346\240\217\344\270\273\351\242\230\350\217\234\345\215\225/\346\240\207\351\242\230\346\240\217\344\270\273\351\242\230\350\217\234\345\215\225.suite.yaml" delete mode 100644 "tests/at/yaml/\346\240\207\351\242\230\346\240\217\346\220\234\347\264\242\346\241\206/\346\240\207\351\242\230\346\240\217\346\220\234\347\264\242\346\241\206.suite.yaml" delete mode 100644 "tests/at/yaml/\346\240\207\351\242\230\346\240\217\347\274\251\346\224\276\350\276\223\345\205\245\346\241\206/\346\240\207\351\242\230\346\240\217\347\274\251\346\224\276\350\276\223\345\205\245\346\241\206.suite.yaml" delete mode 100644 "tests/at/yaml/\351\241\266\351\203\250\346\240\207\347\255\276\351\241\265\346\240\217/\351\241\266\351\203\250\346\240\207\347\255\276\351\241\265\346\240\217.suite.yaml" create mode 100644 "tests/casefile/\346\226\207\346\241\243\346\237\245\347\234\213\345\231\250V25-\347\224\250\344\276\213.xlsx" diff --git a/tests/at/at-tree.yaml b/tests/at/at-tree.yaml deleted file mode 100644 index c14bd246..00000000 --- a/tests/at/at-tree.yaml +++ /dev/null @@ -1,468 +0,0 @@ -version: '1.0' -tree: -- id: n0 - role: form - name: Form_DMainWindow - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n1 - role: form - name: Form_Central - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n2 - role: form - name: Form_widget_1 - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n3 - role: form - name: Form_CentralNavPage - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n6 - role: button - name: Button_SelectFile - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 中央空白页(无文件打开时) | 功能: 打开文件选择对话框' - annotation_status: reviewed - - id: n7 - role: image - name: Label_Icon - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - - id: n8 - role: form - name: Form_CentralDocPage - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n9 - role: form - name: Form_DocSheet - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n10 - role: form - name: Form_SheetSidebar - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n11 - role: form - name: Form_SearchResWidget - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n13 - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - - id: n14 - role: check box - name: Button_thumbnail - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏顶部按钮组 | 功能: 切换到缩略图视图' - annotation_status: reviewed - - id: n15 - role: check box - name: Button_catalog - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏顶部按钮组 | 功能: 切换到目录视图' - annotation_status: reviewed - - id: n16 - role: check box - name: Button_bookmark - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏顶部按钮组 | 功能: 切换到书签视图' - annotation_status: reviewed - - id: n17 - role: check box - name: Button_annotation - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏顶部按钮组 | 功能: 切换到批注视图' - annotation_status: reviewed - - id: n18 - role: check box - name: Button_search - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏顶部按钮组 | 功能: 切换到搜索视图' - annotation_status: reviewed - - id: n19 - role: form - name: Form_BookMarkWidget - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n20 - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - - id: n22 - role: button - name: Button_BookmarkAdd - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏书签视图底部 | 功能: 添加书签' - annotation_status: reviewed - - id: n24 - role: form - name: Form_NotesWidget - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n25 - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - - id: n49 - role: button - name: Button_NotesAdd - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏批注视图底部 | 功能: 添加批注' - annotation_status: reviewed - - id: n51 - role: form - name: Form_ThumbnailWidget - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n52 - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - - id: n153 - role: form - name: Form_Paging - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n155 - role: form - name: Form_Page - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n156 - role: text - name: pageEdit - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏缩略图视图分页区 | 功能: 输入页码跳转' - annotation_status: reviewed - - id: n158 - role: button - name: Button_ThumbnailPre - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏缩略图视图分页区 | 功能: 上一页缩略图' - annotation_status: reviewed - - id: n159 - role: button - name: Button_ThumbnailNext - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏缩略图视图分页区 | 功能: 下一页缩略图' - annotation_status: reviewed - - id: n161 - role: form - name: Form_CatalogWidget - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n163 - role: tree - name: View_CatalogTree - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 左侧栏目录视图 | 功能: 显示文档目录树' - annotation_status: reviewed - - id: n208 - role: form - name: Form_DocTabBar - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n209 - role: page tab list - name: normal.pdf - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 顶部标签页栏 | 功能: 已打开文档的标签页列表' - annotation_status: reviewed - children: - - id: n210 - role: page tab - name: normal.pdf - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 顶部标签页栏 | 功能: normal.pdf文档标签页' - annotation_status: reviewed - - id: n211 - role: button - name: 向左滚动 - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 顶部标签页栏 | 功能: 标签页向左滚动' - annotation_status: reviewed - - id: n212 - role: button - name: 向右滚动 - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 顶部标签页栏 | 功能: 标签页向右滚动' - annotation_status: reviewed - - id: n213 - role: button - name: DTabBarAddButton - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 顶部标签页栏右侧 | 功能: 新建标签页' - annotation_status: reviewed - - id: n217 - role: form - name: Form_DMainWindowTitlebar - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n221 - role: form - name: Form_DTitlebarLeftArea - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n223 - role: form - name: Form_TitleWidget - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n224 - role: check box - name: Button_ThumbnailToggle - object_name: Thumbnails - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏左侧 | 功能: 展开/收起侧边栏' - annotation_status: reviewed - - id: n225 - role: form - name: Form_widget - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n226 - role: form - name: Form_scaleEdit_P - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n227 - role: text - name: DLineEditChildLineEdit - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏缩放输入框 | 功能: 输入缩放比例' - annotation_status: reviewed - - id: n240 - role: form - name: Form_widget_4 - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n242 - role: form - name: Form_findSearchEdit_P - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n243 - role: text - name: DLineEditChildLineEdit - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏搜索框 | 功能: 输入搜索关键词' - annotation_status: reviewed - children: - - id: n244 - role: button - name: DLineEditClearButton - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏搜索框内 | 功能: 清除搜索内容' - annotation_status: reviewed - - id: n245 - role: button - name: DSearchEditIconButton - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏搜索框内 | 功能: 搜索按钮' - annotation_status: reviewed - - id: n246 - role: form - name: Form_DSearchEditIconWidget - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n247 - role: button - name: DSearchEditIconButton - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏搜索框内 | 功能: 搜索按钮(图标)' - annotation_status: reviewed -- id: n253 - role: popup menu - name: DTitlebarThemeMenu - object_name: '' - accessible_id: '' - classification: container - comment: '' - annotation_status: draft - children: - - id: n254 - role: menu item - name: 浅色 - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏主题菜单 | 功能: 切换到浅色主题' - annotation_status: reviewed - - id: n255 - role: menu item - name: 深色 - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏主题菜单 | 功能: 切换到深色主题' - annotation_status: reviewed - - id: n256 - role: menu item - name: 跟随系统 - object_name: '' - accessible_id: '' - classification: interactive - comment: 'GUI位置: 标题栏主题菜单 | 功能: 主题跟随系统设置' - annotation_status: reviewed diff --git a/tests/at/cases_mapped.yaml b/tests/at/cases_mapped.yaml deleted file mode 100644 index e05dfdba..00000000 --- a/tests/at/cases_mapped.yaml +++ /dev/null @@ -1,904 +0,0 @@ -# 格式范例 — cases_mapped.yaml -# 此文件由 LLM 从 suite-cases.yaml 映射生成,格式如下: -# cases: -# - name: suite名称 -# module: 模块名 -# steps: -# - step_type: action -# action: session_start -# command: deepin-reader ${TEST_FILES_DIR}/normal.pdf -# - step_type: action -# action: mouse_click -# selector: {name: Button_xxx} -# - step_type: action -# action: dtk_main_menu -# items: [主题, 浅色] -# - step_type: action -# action: dtk_context_menu -# selector: {name: pageEdit} -# items: [搜索] -# - step_type: assert -# action: assert_element -# selector: {name: Button_xxx} -version: '1.0' -cases: -- id: suite_main_no_doc - name: 主界面 — 无文档打开 — 打开文件 - module: 主界面 — 无文档打开 - annotation: - 测试界面: 主界面 — 无文档打开 - 测试功能: 打开文件 - 前置条件: deepin-reader 已启动,未打开任何文档 - AT元素: n6 (Button_SelectFile, button, 打开文件选择对话框) - steps: - - step_type: action - description: 启动 deepin-reader,不打开任何文档 - action: session_start - command: deepin-reader - - step_type: assert - description: 主界面显示打开文件按钮(Button_SelectFile) - element_ref: n6 - selector: - name: Button_SelectFile - action: assert_element - - step_type: action - description: 点击打开文件按钮 - element_ref: n6 - selector: - name: Button_SelectFile - action: mouse_click -- id: suite_sidebar_tabs - name: 左侧栏 — 按钮切换 — 缩略图/目录/书签/注释 - module: 左侧栏 — 按钮切换 - annotation: - 测试界面: 左侧栏 — 按钮切换 - 测试功能: 侧边栏四个功能按钮切换(缩略图/目录/书签/注释) - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素: n14 (Button_thumbnail), n15 (Button_catalog), n16 (Button_bookmark), n17 (Button_annotation), n18 (Button_search), n163 (View_CatalogTree), n22 (Button_BookmarkAdd), n49 (Button_NotesAdd) - steps: - - step_type: action - description: 启动 deepin-reader并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: 点击标题栏缩略图切换按钮展开侧边栏 - element_ref: n224 - selector: - name: Button_ThumbnailToggle - action: mouse_click - - step_type: action - description: 打开文档,展开左侧栏,点击缩略图按钮 - element_ref: n14 - selector: - name: Button_thumbnail - action: mouse_click - - step_type: assert - description: 缩略图按钮可点击,界面保持响应 - element_ref: n14 - selector: - name: Button_thumbnail - action: assert_element - - step_type: action - description: 点击目录按钮 - element_ref: n15 - selector: - name: Button_catalog - action: mouse_click - - step_type: assert - description: 显示目录视图(View_CatalogTree) - element_ref: n163 - selector: - name: View_CatalogTree - action: assert_element - - step_type: action - description: 点击书签按钮 - element_ref: n16 - selector: - name: Button_bookmark - action: mouse_click - - step_type: assert - description: 显示书签视图,含添加书签按钮(Button_BookmarkAdd) - element_ref: n22 - selector: - name: Button_BookmarkAdd - action: assert_element - - step_type: action - description: 点击注释按钮 - element_ref: n17 - selector: - name: Button_annotation - action: mouse_click - - step_type: assert - description: 显示注释视图,含添加注释按钮(Button_NotesAdd) - element_ref: n49 - selector: - name: Button_NotesAdd - action: assert_element -- id: suite_sidebar_thumbnails - name: 左侧栏 — 缩略图视图 — 分页导航 - module: 左侧栏 — 缩略图视图 - annotation: - 测试界面: 左侧栏 — 缩略图视图 - 测试功能: 缩略图分页导航 - 前置条件: deepin-reader 已打开一个多页 PDF 文档,左侧栏展开且选中缩略图视图 - AT元素: n14 (Button_thumbnail, check box, 切换到缩略图视图), n156 (pageEdit, text, 输入页码跳转), n158 (Button_ThumbnailPre, button, 上一页缩略图), n159 (Button_ThumbnailNext, button, 下一页缩略图) - steps: - - step_type: action - description: 启动 deepin-reader并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: 点击标题栏缩略图切换按钮展开侧边栏 - element_ref: n224 - selector: - name: Button_ThumbnailToggle - action: mouse_click - - step_type: action - description: 展开左侧栏,点击缩略图按钮切换到缩略图视图 - element_ref: n14 - selector: - name: Button_thumbnail - action: mouse_click - - step_type: action - description: 点击底部页数框(pageEdit)以聚焦 - element_ref: n156 - selector: - name: pageEdit - role: text - action: mouse_click - - step_type: action - description: 删除底部页数框(pageEdit)中的数值 - element_ref: n156 - selector: - name: pageEdit - role: text - action: keyboard_press - key: BackSpace - - step_type: action - description: 按Escape键取消编辑,让输入框恢复原值 - action: keyboard_press - key: Escape - - step_type: assert - description: 输入框中应该再次显示最近一次的数据 - element_ref: n156 - selector: - name: pageEdit - role: text - action: assert_element -- id: suite_tab_management - name: 顶部标签页栏 — 添加/滚动/切换 - module: 顶部标签页栏 - annotation: - 测试界面: 顶部标签页栏 - 测试功能: 标签页添加、滚动、关闭 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素: n209 (page tab list, 已打开文档的标签页列表), n210 (page tab, normal.pdf文档标签页), n211 (向左滚动, button, 标签页向左滚动), n212 (向右滚动, button, 标签页向右滚动), n213 (DTabBarAddButton, button, 新建标签页) - steps: - - step_type: action - description: 启动 deepin-reader并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: 点击/断言标签页 normal.pdf - element_ref: n210 - selector: - name: normal.pdf - role: page tab - action: mouse_click - - step_type: assert - description: 点击/断言标签页 normal.pdf - element_ref: n209 - selector: - name: normal.pdf - role: page tab - action: assert_element - - step_type: assert - description: 点击/断言标签页 normal.pdf - element_ref: n211 - selector: - name: normal.pdf - role: page tab - action: assert_element - - step_type: assert - description: 点击/断言标签页 normal.pdf - element_ref: n212 - selector: - name: normal.pdf - role: page tab - action: assert_element -- id: suite_titlebar_search - name: 标题栏搜索框 — 关键字输入/清除/搜索 - module: 标题栏搜索框 - annotation: - 测试界面: 标题栏搜索框 - 测试功能: 搜索关键字输入、清除、搜索执行 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素: n243 (DLineEditChildLineEdit, text, 输入搜索关键词), n244 (DLineEditClearButton, button, 清除搜索内容), n245 (DSearchEditIconButton, button, 搜索按钮) - steps: - - step_type: action - description: 启动 deepin-reader并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: 通过主菜单打开搜索框 - action: dtk_main_menu - items: - - 搜索 - - step_type: action - description: 点击搜索输入框以聚焦 - element_ref: n243 - selector: - name: DLineEditChildLineEdit - parent: Form_findSearchEdit_P - action: mouse_click - - step_type: action - description: 在搜索框输入关键字test - element_ref: n243 - selector: - name: DLineEditChildLineEdit - parent: Form_findSearchEdit_P - action: keyboard_type_text - text: test - - step_type: action - description: 按Enter键执行搜索 - action: keyboard_press - key: Return - - step_type: assert - description: 正常显示搜索结果,搜索框仍然可见 - element_ref: n243 - selector: - name: DLineEditChildLineEdit - parent: Form_findSearchEdit_P - action: assert_element - - step_type: action - description: 点击搜索框右侧清除按钮(DLineEditClearButton) - element_ref: n244 - selector: - name: DLineEditClearButton - parent: Form_findSearchEdit_P - action: mouse_click - - step_type: assert - description: 可以正常关闭搜索,搜索框仍然可见 - element_ref: n243 - selector: - name: DLineEditChildLineEdit - parent: Form_findSearchEdit_P - action: assert_element -- id: suite_titlebar_scale - name: 标题栏缩放输入框 — 缩放比例输入 - module: 标题栏缩放输入框 - annotation: - 测试界面: 标题栏缩放输入框 - 测试功能: 缩放比例输入 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素: n227 (DLineEditChildLineEdit, text, 输入缩放比例) - steps: - - step_type: action - description: 启动 deepin-reader并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: 点击百分比图标编辑框以聚焦 - element_ref: n227 - selector: - name: DLineEditChildLineEdit - action: mouse_click - - step_type: action - description: 输入新的缩放比例 - element_ref: n227 - selector: - name: DLineEditChildLineEdit - role: text - action: keyboard_type_text - text: '100' - - step_type: action - description: 按Enter键确认缩放比例 - action: keyboard_press - key: Return - - step_type: assert - description: 缩放输入框仍然可见,文档按输入的缩放比例显示 - element_ref: n227 - selector: - name: DLineEditChildLineEdit - action: assert_element -- id: suite_sidebar_catalog - name: 左侧栏 — 目录视图 — 目录树显示和点击跳转 - module: 左侧栏 — 目录视图 - annotation: - 测试界面: 左侧栏 — 目录视图 - 测试功能: 目录树显示和点击跳转 - 前置条件: deepin-reader 已打开一个有目录的 PDF 文档,左侧栏展开且选中目录视图 - AT元素: n15 (Button_catalog, check box, 切换到目录视图), n163 (View_CatalogTree, tree, 显示文档目录树) - steps: - - step_type: action - description: 启动 deepin-reader并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: 点击标题栏缩略图切换按钮展开侧边栏 - element_ref: n224 - selector: - name: Button_ThumbnailToggle - action: mouse_click - - step_type: action - description: 展开左侧栏,点击目录按钮 - element_ref: n15 - selector: - name: Button_catalog - action: mouse_click - - step_type: assert - description: 显示目录树(View_CatalogTree) - element_ref: n163 - selector: - name: View_CatalogTree - action: assert_element - - step_type: action - description: 点击目录树中任意一个目录项 - element_ref: n163 - selector: - name: View_CatalogTree - action: mouse_click - - step_type: assert - description: 目录视图仍然可见,文档跳转到对应页面 - element_ref: n163 - selector: - name: View_CatalogTree - action: assert_element -- id: suite_sidebar_bookmarks - name: 左侧栏 — 书签视图 — 添加书签 - module: 左侧栏 — 书签视图 - annotation: - 测试界面: 左侧栏 — 书签视图 - 测试功能: 添加书签 - 前置条件: deepin-reader 已打开一个 PDF 文档,左侧栏展开且选中书签视图 - AT元素: n16 (Button_bookmark, check box, 切换到书签视图), n22 (Button_BookmarkAdd, button, 添加书签) - steps: - - step_type: action - description: 启动 deepin-reader并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: 点击标题栏缩略图切换按钮展开侧边栏 - element_ref: n224 - selector: - name: Button_ThumbnailToggle - action: mouse_click - - step_type: action - description: 切换到书签视图 - element_ref: n16 - selector: - name: Button_bookmark - action: mouse_click - - step_type: action - description: 点击添加书签按钮 - element_ref: n22 - selector: - name: Button_BookmarkAdd - action: mouse_click - - step_type: assert - description: 当前页正常添加书签,书签视图仍然可见 - element_ref: n22 - selector: - name: Button_BookmarkAdd - action: assert_element -- id: suite_titlebar_main_menu - name: 标题栏主菜单 — 所有菜单项导航 - module: 标题栏主菜单 - annotation: - 测试界面: 标题栏主菜单 - 测试功能: 主菜单所有菜单项导航测试 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素: n6 (Button_SelectFile, button, 打开文件选择对话框) - steps: - - step_type: action - description: 启动 deepin-reader 并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: '主菜单导航: 工具/选择工具' - action: dtk_main_menu - items: - - 工具 - - 选择工具 - - step_type: action - description: '主菜单导航: 工具/手形工具' - action: dtk_main_menu - items: - - 工具 - - 手形工具 - - step_type: action - description: '主菜单导航: 搜索' - action: dtk_main_menu - items: - - 搜索 - - step_type: action - description: 关闭搜索框 - action: keyboard_press - key: Escape - - step_type: assert - description: 菜单操作后应用仍正常响应(主界面可见) - action: assert_element - selector: - name: Form_CentralDocPage -- id: suite_context_menu_doc - name: 右键文档区域菜单 — 所有菜单项 - module: 右键文档区域菜单 - annotation: - 测试界面: 右键文档区域菜单 - 测试功能: 文档右键菜单所有菜单项 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素: n2 (Form_widget_1, form, 主界面文档区域容器) - steps: - - step_type: action - description: 启动 deepin-reader 并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 搜索 - description: 在文档区域右键,选择"搜索" - - step_type: action - action: keyboard_press - key: Escape - description: keyboard_press - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 后一页 - description: 在文档区域右键,选择"后一页" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 最后一页 - description: 在文档区域右键,选择"最后一页" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 前一页 - description: 在文档区域右键,选择"前一页" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 第一页 - description: 在文档区域右键,选择"第一页" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 后一页 - description: 在文档区域右键,选择"后一页" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加书签 - description: 在文档区域右键,选择"添加书签" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加注释 - description: 在文档区域右键,选择"添加注释" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 全屏 - description: 在文档区域右键,选择"全屏" - - step_type: action - action: keyboard_press - key: Escape - description: keyboard_press - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 幻灯片放映 - description: 在文档区域右键,选择"幻灯片放映" - - step_type: action - action: keyboard_press - key: Escape - description: keyboard_press - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 左旋转 - description: 在文档区域右键,选择"左旋转" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 右旋转 - description: 在文档区域右键,选择"右旋转" - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 文档信息 - description: 在文档区域右键,选择"文档信息" - - step_type: action - action: keyboard_press - key: Escape - description: keyboard_press - - step_type: assert - action: assert_element - selector: - name: Form_CentralDocPage - role: form - description: 断言元素存在 -- id: suite_context_menu_scale - name: 右键缩放区域菜单 — 所有菜单项 - module: 右键缩放区域菜单 - annotation: - 测试界面: 右键缩放区域菜单 - 测试功能: 缩放菜单所有菜单项 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素: n227 (DLineEditChildLineEdit, text, 输入缩放比例) - steps: - - step_type: action - description: 启动 deepin-reader 并打开文档 - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - - step_type: action - description: 点击文档区域确保焦点在文档上 - action: mouse_click - selector: - name: Form_CentralDocPage - - step_type: action - description: 点击缩放框箭头按钮弹出缩放菜单(双页显示) - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 双页显示 - - step_type: action - description: 点击缩放框箭头按钮弹出缩放菜单(默认大小) - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 默认大小 - - step_type: action - description: 点击缩放框箭头按钮弹出缩放菜单(适合页面) - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 适合页面 - - step_type: action - description: 点击缩放框箭头按钮弹出缩放菜单(适应高度) - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 适应高度 - - step_type: action - description: 点击缩放框箭头按钮弹出缩放菜单(适应宽度) - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 适应宽度 - - step_type: assert - description: 菜单操作后应用仍正常响应 - element_ref: n6 - selector: - name: Form_CentralDocPage - role: form - action: assert_element -- id: suite_context_menu_note - name: 右键侧栏注释菜单 — 所有菜单项 - module: 右键侧栏注释菜单 - annotation: - 测试界面: 右键侧栏注释菜单 - 测试功能: 注释右键菜单所有菜单项 - 前置条件: deepin-reader 已打开一个 PDF 文档且侧栏有注释 - AT元素: n25 (View_ImageList, list, 批注视图列表) - steps: - - step_type: action - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - description: 启动应用 - - step_type: action - description: 点击标题栏缩略图切换按钮展开侧边栏 - element_ref: n224 - selector: - name: Button_ThumbnailToggle - action: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加注释 - description: dtk_context_menu - - step_type: action - action: mouse_click - selector: - name: Button_annotation - description: mouse_click - - step_type: action - action: mouse_click - selector: - name: View_ImageList - child_index: 0 - description: 左键选中第一条注释 - - step_type: action - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 复制 - description: 右键第一条注释弹出菜单 - - step_type: action - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 删除注释 - description: 右键第一条注释弹出菜单 - - step_type: action - action: mouse_click - selector: - name: Button_bookmark - description: mouse_click - - step_type: action - action: mouse_click - selector: - name: Form_CentralDocPage - description: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加注释 - description: dtk_context_menu - - step_type: action - action: mouse_click - selector: - name: Button_annotation - description: mouse_click - - step_type: action - action: mouse_click - selector: - name: View_ImageList - child_index: 0 - description: 左键选中第一条注释 - - step_type: action - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 全部删除 - description: 右键第一条注释弹出菜单 - - step_type: assert - action: assert_element - selector: - name: Form_CentralDocPage - role: form - description: 断言元素存在 -- id: suite_context_menu_bookmark - name: 右键侧栏书签菜单 — 所有菜单项 - module: 右键侧栏书签菜单 - annotation: - 测试界面: 右键侧栏书签菜单 - 测试功能: 书签右键菜单所有菜单项 - 前置条件: deepin-reader 已打开一个 PDF 文档且侧栏有书签 - AT元素: n20 (View_ImageList, list, 书签视图列表) - steps: - - step_type: action - action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - description: 启动应用 - - step_type: action - description: 点击标题栏缩略图切换按钮展开侧边栏 - element_ref: n224 - selector: - name: Button_ThumbnailToggle - action: mouse_click - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加书签 - description: dtk_context_menu - - step_type: action - action: mouse_click - selector: - name: Button_bookmark - description: mouse_click - - step_type: action - action: mouse_click - selector: - name: View_ImageList - child_index: 0 - description: 左键选中第一条书签 - - step_type: action - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 删除书签 - description: 右键第一条书签弹出菜单 - - step_type: action - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加书签 - description: dtk_context_menu - - step_type: action - action: mouse_click - selector: - name: Button_bookmark - description: mouse_click - - step_type: action - action: mouse_click - selector: - name: View_ImageList - child_index: 0 - description: 左键选中第一条书签 - - step_type: action - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 全部删除 - description: 右键第一条书签弹出菜单 - - step_type: assert - action: assert_element - selector: - name: Form_CentralDocPage - role: form - description: 断言元素存在 -- id: suite_theme_menu_v2 - name: 标题栏主题菜单 — 浅色/深色/跟随系统切换(items方式) - module: 标题栏主题菜单 - annotation: - 测试界面: 标题栏主题菜单 - 测试功能: 浅色/深色/跟随系统主题切换 - 前置条件: deepin-reader 已打开,标题栏主题菜单可用 - AT元素: n6 (Button_SelectFile, button, 主界面打开文件按钮), n254 (浅色, menu item, 切换到浅色主题), n255 (深色, menu item, 切换到深色主题), n256 (跟随系统, menu item, 主题跟随系统设置) - steps: - - step_type: action - description: 启动 deepin-reader,不打开文档 - action: session_start - command: deepin-reader - - step_type: action - description: 打开主题菜单,选择"浅色" - action: dtk_main_menu - items: - - 主题 - - 浅色 - - step_type: assert - description: 应用切换到浅色主题,主界面仍然响应 - element_ref: n6 - selector: - name: Button_SelectFile - action: assert_element - - step_type: action - description: 打开主题菜单,选择"深色" - action: dtk_main_menu - items: - - 主题 - - 深色 - - step_type: assert - description: 应用切换到深色主题,主界面仍然响应 - element_ref: n6 - selector: - name: Button_SelectFile - action: assert_element - - step_type: action - description: 打开主题菜单,选择"跟随系统" - action: dtk_main_menu - items: - - 主题 - - 跟随系统 - - step_type: assert - description: 应用主题跟随系统设置,主界面仍然响应 - element_ref: n6 - selector: - name: Button_SelectFile - action: assert_element diff --git a/tests/at/cases_raw.yaml b/tests/at/cases_raw.yaml deleted file mode 100644 index 191661c2..00000000 --- a/tests/at/cases_raw.yaml +++ /dev/null @@ -1,7646 +0,0 @@ -metadata: - generated_at: '2026-07-13T21:02:33.142967' - source: 文档查看器V25-用例.xlsx -cases: -- id: case_1704991 - name: 【玲珑】【文档查看器】卸载指定版本的玲珑应用 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】卸载指定版本的玲珑应用 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli uninstall org.deepin.reader/6.0.17 - needs_accessible_name: false - - step_type: action - description: 2. 在终端执行命令:ll-cli info org.deepin.reader - needs_accessible_name: false - - step_type: assert - description: 1. 【文档查看器】玲珑指定版本的应用卸载成功 - needs_accessible_name: false - - step_type: assert - description: 2. 没有指定版本玲珑应用【文档查看器】的应用信息 - needs_accessible_name: false -- id: case_1704989 - name: 【玲珑】【文档查看器】卸载玲珑应用 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】卸载玲珑应用 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli uninstall org.deepin.reader - needs_accessible_name: false - - step_type: action - description: 2. 在终端执行命令:ll-cli info org.deepin.reader - needs_accessible_name: false - - step_type: assert - description: 1. 【文档查看器】玲珑应用卸载成功 - needs_accessible_name: false - - step_type: assert - description: 2. 没有玲珑应用【文档查看器】的应用信息 - needs_accessible_name: false -- id: case_1704987 - name: 【玲珑】【文档查看器】查看玲珑应用包含的文件 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】查看玲珑应用包含的文件 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli content org.deepin.reader - needs_accessible_name: false - - step_type: assert - description: 1. 展示已安装的【文档查看器】应用包含的文件 - needs_accessible_name: false -- id: case_1704985 - name: 【玲珑】【文档查看器】杀掉玲珑应用运行进程 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】杀掉玲珑应用运行进程 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli kill org.deepin.reader - needs_accessible_name: false - - step_type: action - description: 2. 终止后再次终端执行命令:ll-cli ps - needs_accessible_name: false - - step_type: assert - description: 1. 【文档查看器】应用进程运行被终止 - needs_accessible_name: false - - step_type: assert - description: 2. 没有显示【文档查看器】运行 - needs_accessible_name: false -- id: case_1704983 - name: 【玲珑】【文档查看器】检查玲珑应用运行情况 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】检查玲珑应用运行情况 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli ps - needs_accessible_name: false - - step_type: assert - description: 1. 可以查看到【文档查看器】的运行情况,包含:App、ContainerID、Pid、Path - needs_accessible_name: false -- id: case_1704981 - name: 【玲珑】【文档查看器】进入容器内部 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】进入容器内部 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli run org.deepin.reader --exec /bin/bash - needs_accessible_name: false - - step_type: assert - description: 1. 进入【文档查看器】容器内部,可以内部执行命令,例如:ls - needs_accessible_name: false -- id: case_1704975 - name: 【玲珑】【文档查看器】玲珑应用,基本功能测试 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】玲珑应用,基本功能测试 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 【文档查看器】应用,双击运行 - needs_accessible_name: false - - step_type: action - description: 2. 选择pdf、djvu、docx文件类型打开浏览 - needs_accessible_name: false - - step_type: action - description: 3. 搜索、添加/删除书签、注释等功能 - needs_accessible_name: false - - step_type: action - description: 4. 全屏、幻灯片放映 - needs_accessible_name: false - - step_type: assert - description: 5. 文档信息查看 - needs_accessible_name: false - - step_type: assert - description: 1. 功能正常 - needs_accessible_name: false - - step_type: assert - description: 2. 功能正常 - needs_accessible_name: false - - step_type: assert - description: 3. 功能正常 - needs_accessible_name: false - - step_type: assert - description: 4. 功能正常 - needs_accessible_name: false - - step_type: assert - description: 5. 功能正常 - needs_accessible_name: false -- id: case_1704971 - name: 【玲珑】【文档查看器】运行玲珑应用 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】运行玲珑应用 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli run org.deepin.reader - needs_accessible_name: false - - step_type: assert - description: 1. 打开运行【文档查看器】应用 - needs_accessible_name: false -- id: case_1704969 - name: 【玲珑】【文档查看器】安装玲珑应用指定版本 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】安装玲珑应用指定版本 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli run org.deepin.reader/6.0.17 - needs_accessible_name: false - - step_type: assert - description: '1.0' - needs_accessible_name: false -- id: case_1704967 - name: 【玲珑】【文档查看器】安装玲珑应用 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】安装玲珑应用 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli install org.deepin.reader - needs_accessible_name: false - - step_type: assert - description: 1. 等待一段时间后,【文档查看器】安装完成(如果有多个版本,默认安装最高版本),可以使用命令查看信息:ll-cli info org.deepin.reader - needs_accessible_name: false -- id: case_1704965 - name: 【玲珑】【文档查看器】仓库玲珑应用信息 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】仓库玲珑应用信息 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli search org.deepin.reader - needs_accessible_name: false - - step_type: assert - description: 1. 展示【文档查看器】应用的相关信息,包含appid、name、version、arch、channel、module、description;如果版本有多个,则全部展示 - needs_accessible_name: false -- id: case_1704963 - name: 【玲珑】【文档查看器】查看玲珑应用信息 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器(#110615) - description: 【玲珑】【文档查看器】查看玲珑应用信息 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在终端执行命令:ll-cli info org.deepin.reader - needs_accessible_name: false - - step_type: assert - description: 1. 展示玲珑应用(文档查看器)的应用信息; - needs_accessible_name: false - - step_type: assert - description: 'PS: 没有安装则不展示应用信息' - needs_accessible_name: false -- id: case_1581295 - name: 删除输入框数值再点击其他位置 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 删除输入框数值再点击其他位置 - status: active - reason: '' - steps: - - step_type: action - description: 1. 展开左边栏,删除底部页数框中的数值,再点击窗口内外其他位置 - needs_accessible_name: false - - step_type: action - description: 2. 删除百分比数值框中的数值,再点击窗口内外其他位置 - needs_accessible_name: false - - step_type: assert - description: 1. 输入框中应该再次显示最近一次的数据 - needs_accessible_name: false - - step_type: assert - description: 2. 输入框中应该再次显示最近一次的数据 - needs_accessible_name: false -- id: case_1581293 - name: 多个标签页的显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 多个标签页的显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开多个标签页,查看显示 - needs_accessible_name: false - - step_type: action - description: 2. 已打开多个标签页,添加其他标签页 - needs_accessible_name: false - - step_type: action - description: 3. 点击左移右移按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 标签栏需全部占满,无空出区域;标签页最小140px;显示效果与设计图一致 - needs_accessible_name: false - - step_type: assert - description: 2. 新添加的标签页高亮显示 - needs_accessible_name: false - - step_type: assert - description: 3. 正常显示 - needs_accessible_name: false -- id: case_1581285 - name: 切换单页/双页,页面需适配 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 切换单页/双页,页面需适配 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,查看默认百分比显示 - needs_accessible_name: false - - step_type: action - description: 2. 切换到双页显示 - needs_accessible_name: false - - step_type: action - description: 3. 再切到单页显示 - needs_accessible_name: false - - step_type: action - description: 4. 单页显示时打开左边栏 - needs_accessible_name: false - - step_type: action - description: 5. 双页页显示时打开左边栏 - needs_accessible_name: false - - step_type: assert - description: 1. 默认显示单页,100%比例 - needs_accessible_name: false - - step_type: assert - description: 2. 页面适配,无截断显示 - needs_accessible_name: false - - step_type: assert - description: 3. 页面适配,无截断显示 - needs_accessible_name: false - - step_type: assert - description: 4. 页面适配,无截断显示 - needs_accessible_name: false - - step_type: assert - description: 5. 页面适配,无截断显示 - needs_accessible_name: false -- id: case_1581283 - name: 上下页面均有一部分显示在当前窗口时,未选中文本右击弹出菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 上下页面均有一部分显示在当前窗口时,未选中文本右击弹出菜单 - status: active - reason: '' - steps: - - step_type: action - description: 1. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击第一页 - needs_accessible_name: false - - step_type: action - description: 2. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击前一页 - needs_accessible_name: false - - step_type: assert - description: 3. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击后一页,查看 - needs_accessible_name: false - - step_type: assert - description: 4. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击最后一页,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 页面跳转正确 - needs_accessible_name: false - - step_type: assert - description: 2. 页面跳转正确 - needs_accessible_name: false - - step_type: assert - description: 3. 页面跳转正确 - needs_accessible_name: false - - step_type: assert - description: 4. 页面跳转正确 - needs_accessible_name: false -- id: case_1581281 - name: 多次搜索 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 多次搜索 - status: active - reason: '' - steps: - - step_type: action - description: 1. 输入关键字并搜索 - needs_accessible_name: false - - step_type: action - description: 2. 按键盘Backspace键删除关键字,重新输入其他关键字并搜索 - needs_accessible_name: false - - step_type: action - description: 3. 点击搜索框中的上下键切换 - needs_accessible_name: false - - step_type: assert - description: 1. 左边栏弹出搜索结果缩略图,文档中关键字被选中 - needs_accessible_name: false - - step_type: assert - description: 2. 左边栏正常显示新的搜索结果缩略图,不会叠加显示,右侧文档中显示正常 - needs_accessible_name: false - - step_type: assert - description: 3. 左边栏和右侧文档中显示均正确 - needs_accessible_name: false -- id: case_1581279 - name: 标签页拖拽至其他应用 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 标签页拖拽至其他应用 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 窗口中只有一个标签页,将标签页拖拽到其他应用(如:编辑器)的工具栏或正文区域,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 窗口中有多个标签页,将标签页拖拽到其他应用(如:编辑器)的工具栏区域,查看 - needs_accessible_name: false - - step_type: assert - description: 3. 窗口中有多个标签页,将标签页拖拽到其他应用(如:编辑器)的正文区域,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 应该无法拖拽 - needs_accessible_name: false - - step_type: assert - description: 2. 打开一个新窗口以显示此标签页 - needs_accessible_name: false - - step_type: assert - description: 3. 打开一个新窗口以显示此标签页 - needs_accessible_name: false -- id: case_1581273 - name: 关闭所有标签页界面显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 关闭所有标签页界面显示 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,添加多个标签页 - needs_accessible_name: false - - step_type: action - description: 2. 点击标题栏的x,关闭所有标签页 - needs_accessible_name: false - - step_type: assert - description: 3. 关闭所有标签页后查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 正常添加 - needs_accessible_name: false - - step_type: assert - description: 2. 正常关闭,若有编辑内容会弹出是否保存的提示弹框 - needs_accessible_name: false - - step_type: assert - description: '3.' - needs_accessible_name: false -- id: case_1581269 - name: 关闭标签页 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 关闭标签页 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开多份文档文档,点击标签页右侧的+按钮 - needs_accessible_name: false - - step_type: action - description: 2. 退出选择界面,点击标签页中X进行关闭 - needs_accessible_name: false - - step_type: action - description: 3. 打开多份文档文档,其中一份文档A编辑后,点击标签页中X - needs_accessible_name: false - - step_type: action - description: 4. 点击弹框中的保存 - needs_accessible_name: false - - step_type: action - description: 5. 点击弹框中的不保存 - needs_accessible_name: false - - step_type: assert - description: 1. 进入文件选择界面 - needs_accessible_name: false - - step_type: assert - description: 2. 正常关闭 - needs_accessible_name: false - - step_type: assert - description: 3. 弹出是否保存的提示弹框 - needs_accessible_name: false - - step_type: assert - description: 4. 文档A关闭,再次打开文档A,编辑的内容正常保存 - needs_accessible_name: false - - step_type: assert - description: 5. 文档A关闭,再次打开文档A,编辑的内容未保存 - needs_accessible_name: false -- id: case_1581267 - name: '[007]保存' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[007]保存' - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,添加书签或注释 - needs_accessible_name: false - - step_type: assert - description: 2. 点击主菜单查看 - needs_accessible_name: false - - step_type: assert - description: 3. 打开文档,添加书签或注释,按键盘中Ctrl+S键,关闭再打开文档查看是否可以保存 - needs_accessible_name: false - - step_type: assert - description: 4. 关闭再打开文档查看是否可以保存 - needs_accessible_name: false - - step_type: assert - description: 1. 添加成功 - needs_accessible_name: false - - step_type: assert - description: 2. 保存菜单高亮显示 - needs_accessible_name: false - - step_type: assert - description: 3. 保存成功 - needs_accessible_name: false - - step_type: assert - description: 4. 书签和注释可以被保存 - needs_accessible_name: false -- id: case_1581265 - name: 单个窗口中标签页拖拽 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 单个窗口中标签页拖拽 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 单个窗口中只有一个标签页,拖拽标签页移出窗口,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 单个窗口中只有一个标签页,拖拽标签页移至所在窗口的正文区域,查看 - needs_accessible_name: false - - step_type: action - description: 3. 单个窗口中只有一个标签页,拖拽标签页移至所在窗口内标签栏或工具栏 - needs_accessible_name: false - - step_type: assert - description: 1. 无法拖拽,无提示弹出 - needs_accessible_name: false - - step_type: assert - description: 2. 无法拖拽,无提示弹出 - needs_accessible_name: false - - step_type: assert - description: 3. 无法拖拽,无提示弹出 - needs_accessible_name: false -- id: case_1581257 - name: 打开PDF文档,未选中文本右击弹出菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 打开PDF文档,未选中文本右击弹出菜单 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 未选中文本,点击鼠标右键,查看右键菜单显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击搜索菜单,查看 - needs_accessible_name: false - - step_type: assert - description: 3. 点击添加书签,查看 - needs_accessible_name: false - - step_type: assert - description: 4. 点击添加注释,查看 - needs_accessible_name: false - - step_type: assert - description: 5. 点击全屏,查看 - needs_accessible_name: false - - step_type: assert - description: 6. 点击幻灯片放映,查看 - needs_accessible_name: false - - step_type: assert - description: 7. 点击第一页,查看 - needs_accessible_name: false - - step_type: assert - description: 8. 点击前一页,查看 - needs_accessible_name: false - - step_type: assert - description: 9. 点击后一页,查看 - needs_accessible_name: false - - step_type: assert - description: 10. 点击最后一页,查看 - needs_accessible_name: false - - step_type: assert - description: 11. 点击左旋转,查看 - needs_accessible_name: false - - step_type: assert - description: 12. 点击右旋转,查看 - needs_accessible_name: false - - step_type: assert - description: 13. 点击打印,查看 - needs_accessible_name: false - - step_type: assert - description: 14. 点击文档信息,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 显示:搜索、添加书签、添加注释、全屏、幻灯片放映、第一页、前一页、后一页、最后一页、左旋转、右旋转、打印、文档信息 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出搜索弹框,可以正常进行搜索 - needs_accessible_name: false - - step_type: assert - description: 3. 当前页面正常添加后书签,右上角显示书签图标,左边栏显示书签缩略图 - needs_accessible_name: false - - step_type: assert - description: 4. 弹出注释小窗口,可以正常添加注释,左边栏和右侧文档中注释显示正确 - needs_accessible_name: false - - step_type: assert - description: 5. 进入全屏显示 - needs_accessible_name: false - - step_type: assert - description: 6. 正常播放幻灯片 - needs_accessible_name: false - - step_type: assert - description: 7. 跳转至第一页,如当前文档已在第一页,则“第一页”菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 8. 跳转至前一页,如当前文档已在第一页,则“前一页”菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 9. 跳转至后一页,如当前文档已在最后一页,则“后一页”菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 10. 跳转至最后一页,如当前文档已在最后一页,则“最后一页”菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 11. 文档正常左旋转,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 12. 文档正常右旋转,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 13. 跳转到打印预览界面 - needs_accessible_name: false - - step_type: assert - description: 14. 显示文档信息界面,界面显示无异常 - needs_accessible_name: false -- id: case_1581255 - name: 切换标签页状态显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 切换标签页状态显示 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开多个标签页,点击视图调整中适合高度、适合宽度、双页、左旋转、右旋转菜单;调整百分 - needs_accessible_name: false - - step_type: assert - description: 2. 点击切换另一个标签页,查看视图调整中菜单显示 - needs_accessible_name: false - - step_type: assert - description: 1. 页面正常进入相应状态 - needs_accessible_name: false - - step_type: assert - description: 2. 显示当前页的状态 - needs_accessible_name: false -- id: case_1581253 - name: 左边栏底部按钮功能 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/缩略图(#114161) - description: 左边栏底部按钮功能 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 展开左边栏,查看左边栏界面显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击缩略图图标查看左边栏界面显示 - needs_accessible_name: false - - step_type: assert - description: 3. 点击目录图标查看左边栏界面显示 - needs_accessible_name: false - - step_type: assert - description: 4. 点击书签图标查看左边栏界面显示 - needs_accessible_name: false - - step_type: assert - description: 5. 点击注释图标查看左边栏界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 底部显示4个按钮:缩略图图标、目录图标、书签图标、注释图标;界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 2. 显示页数输入框、总页数,上下翻页按钮;输入页数正确跳转,上下翻页正常;左边栏宽度范围在266px~380px之间,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 3. 显示目录界面,无目录文档则显示空白;界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 4. 显示添加书签按钮,点击可将当前浏览页面添加书签;界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 5. .显示添加注释按钮,点击添加注释按钮再点击文档任意位置,可弹出添加注释小窗口界面;界面显示正常 - needs_accessible_name: false -- id: case_1581251 - name: 打开多途径获取的PDF、DOCX文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 打开多途径获取的PDF、DOCX文档 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 从FTP服务器中拖拽PDF、DOCX格式文档至UOS系统中,使用文档查看器打开此文档 - needs_accessible_name: false - - step_type: assert - description: 2. 从U盘中拖拽PDF、DOCX格式文档至UOS系统中,使用文档查看器打开此文档 - needs_accessible_name: false - - step_type: assert - description: 3. 从网页端下载PDF、DOCX格式文档,使用文档查看器打开此文档 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常打开 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常打开 - needs_accessible_name: false - - step_type: assert - description: 3. 可以正常打开 - needs_accessible_name: false -- id: case_1581247 - name: 选中高亮注释文本进行复制 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 选中高亮注释文本进行复制 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中已添加高亮注释的文本,右击弹出右键菜单,点击复制菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 分别点击高亮、8种高亮图标、取消高亮、添加注释、添加书签,查看 - needs_accessible_name: false - - step_type: action - description: 3. 选中已添加高亮的文本(未加注释),右击弹出右键菜单,点击复制菜单 - needs_accessible_name: false - - step_type: assert - description: 4. 分别点击高亮、8种高亮图标、取消高亮、添加注释、添加书签,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 可以复制选中的文本(注释内容无法复制) - needs_accessible_name: false - - step_type: assert - description: 2. 各菜单正常可用 - needs_accessible_name: false - - step_type: assert - description: 3. 可以复制选中的文本 - needs_accessible_name: false - - step_type: assert - description: 4. 各菜单正常可用 - needs_accessible_name: false -- id: case_1581243 - name: 双页、调整百分比、打开单页大文档时使用放大镜 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/其它交互(#114177) - description: 双页、调整百分比、打开单页大文档时使用放大镜 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 双页显示时,调整到最小百分比,使用放大镜查看显示是否正常 - needs_accessible_name: false - - step_type: assert - description: 2. 双页显示时,调整到最大百分比,使用放大镜查看显示是否正常 - needs_accessible_name: false - - step_type: assert - description: 3. 打开单页超大文档(75M以上),并调整百分比至最大,使用放大镜查看显示是否正常 - needs_accessible_name: false - - step_type: assert - description: 1. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 2. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 3. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 - needs_accessible_name: false -- id: case_1581241 - name: 快捷键 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/其它交互(#114177) - description: 快捷键 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 按Ctrl+Shift+? --显示快捷键预览,查看所有快捷键使用是否正常: - needs_accessible_name: false - - step_type: action - description: F1 --进入帮助界面 - needs_accessible_name: false - - step_type: action - description: Ctrl+O --进入文件管理选择界面 - needs_accessible_name: false - - step_type: action - description: Ctrl+shift+S --另存为 - needs_accessible_name: false - - step_type: action - description: Ctrl+S --保存 - needs_accessible_name: false - - step_type: action - description: Ctrl+P --打印 - needs_accessible_name: false - - step_type: action - description: Ctrl+M --打开目录缩略图 - needs_accessible_name: false - - step_type: action - description: Ctrl+1 --默认大小 - needs_accessible_name: false - - step_type: action - description: Ctrl+2 --适应高度 - needs_accessible_name: false - - step_type: action - description: Ctrl+3 --适应宽度 - needs_accessible_name: false - - step_type: action - description: Ctrl+R --左旋转 - needs_accessible_name: false - - step_type: action - description: Ctrl+Shift+R --右旋转 - needs_accessible_name: false - - step_type: action - description: Ctrl++ --页面放大 - needs_accessible_name: false - - step_type: action - description: Ctrl+- --页面缩小 - needs_accessible_name: false - - step_type: action - description: PageUp --上一页 - needs_accessible_name: false - - step_type: action - description: PageDown --下一页 - needs_accessible_name: false - - step_type: action - description: Up -- 上一行 - needs_accessible_name: false - - step_type: action - description: Down -- 下一行 - needs_accessible_name: false - - step_type: action - description: Esc --退出 - needs_accessible_name: false - - step_type: action - description: Alt+1 --选择工具 - needs_accessible_name: false - - step_type: action - description: Alt+2 --手形工具 - needs_accessible_name: false - - step_type: action - description: Ctrl+D --添加书签 - needs_accessible_name: false - - step_type: action - description: Alt+A --添加注释 - needs_accessible_name: false - - step_type: action - description: Alt+H --添加高亮 - needs_accessible_name: false - - step_type: action - description: Delete --删除 (备注:删除书签或注释目录) - needs_accessible_name: false - - step_type: action - description: Alt+Z --放大镜 - needs_accessible_name: false - - step_type: action - description: Ctrl+F --搜索 - needs_accessible_name: false - - step_type: action - description: F5 --幻灯片放映 - needs_accessible_name: false - - step_type: action - description: F11 --全屏 - needs_accessible_name: false - - step_type: action - description: (备注:以下针对注释小窗口中内容进行操作) - needs_accessible_name: false - - step_type: action - description: Ctrl+C --复制 - needs_accessible_name: false - - step_type: action - description: Ctrl+X --剪切 - needs_accessible_name: false - - step_type: action - description: Ctrl+V --粘贴 - needs_accessible_name: false - - step_type: action - description: Delete --删除 - needs_accessible_name: false - - step_type: action - description: Ctrl+S --保存 - needs_accessible_name: false - - step_type: action - description: Ctrl+Z --撤销 - needs_accessible_name: false - - step_type: action - description: Ctrl+A --全选 - needs_accessible_name: false - - step_type: assert - description: 2. 打开DJVU格式文档,按Ctrl+Shift+? --显示快捷键预览,查看所有快捷键使用是否正常: - needs_accessible_name: false - - step_type: action - description: 除 Alt+A --添加注释,Alt+H --添加高亮, Ctrl+F --搜索 三个快捷键不支持,其余快捷键同步骤1) - needs_accessible_name: false - - step_type: assert - description: 1. 快捷键使用均正常 - needs_accessible_name: false - - step_type: assert - description: 2. 快捷键使用均正常 - needs_accessible_name: false -- id: case_1581233 - name: 关闭按钮 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 关闭按钮 - status: active - reason: '' - steps: - - step_type: action - description: 1. 添加或删除书签、高亮、注释,点击右上角关闭按钮 - needs_accessible_name: false - - step_type: action - description: 2. 点击弹框中的“不保存” - needs_accessible_name: false - - step_type: action - description: 3. 点击弹框中的“保存” - needs_accessible_name: false - - step_type: assert - description: 1. 弹出是否保存的弹框,点击取消,停留在当前页面 - needs_accessible_name: false - - step_type: assert - description: 2. 应用关闭,编辑的内容不会被保存 - needs_accessible_name: false - - step_type: assert - description: 3. 应用关闭,编辑的内容都会被保存 - needs_accessible_name: false -- id: case_1581231 - name: '[004]最小化. 最大化. 关闭' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[004]最小化. 最大化. 关闭' - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,分别点击最小化. 最大化. 关闭菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 当前页面正常最小化. 最大化. 关闭退出 - needs_accessible_name: false -- id: case_1581229 - name: '[010]退出' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[010]退出' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开一份文档,不作任何修改,点击菜单中退出,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 修改文档中内容,点击菜单中的退出,弹出弹框提示是否同意保存,分别点击取消、不保存、保存 - needs_accessible_name: false - - step_type: assert - description: 3. 打开一份文档,不作任何修改,按快捷键Alt+F4或Alt+空格并选择关闭,查看 - needs_accessible_name: false - - step_type: assert - description: 4. 修改文档中内容,按快捷键Alt+F4或Alt+空格并选择关闭,弹出弹框提示是否同意保存,分别点击取消、不保存、保存 - needs_accessible_name: false - - step_type: assert - description: 1. 直接退出,无提示 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常取消退出、保存并关闭、不保存并关闭 - needs_accessible_name: false - - step_type: assert - description: 3. 直接退出,无提示 - needs_accessible_name: false - - step_type: assert - description: 4. 可以正常取消退出、保存并关闭、不保存并关闭 - needs_accessible_name: false -- id: case_1581227 - name: '[001]关于' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[001]关于' - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击工具栏中的菜单键,再点击关于 - needs_accessible_name: false - - step_type: assert - description: 1. 进入关于页面,界面显示正确,最后一行为:“文档查看器是一款支持PDF,DJVU,DOCX等多种格式的文档阅读工具。” - needs_accessible_name: false -- id: case_1581225 - name: '[002]帮助' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[002]帮助' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开软件,使用快捷键F1,查看系统显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击工具栏中的菜单键,再点击帮助,查看系统显示 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 1&2. 进入帮助页面,界面显示正确 - needs_accessible_name: false -- id: case_1581223 - name: '[005]主题' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[005]主题' - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击工具栏中的菜单键,鼠标放置在主题菜单上 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出三个主题菜单:浅色、深色、跟随主题,点击后应用相应主题 - needs_accessible_name: false -- id: case_1581221 - name: 幻灯片放映 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 幻灯片放映 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击右键菜单中“幻灯片放映” - needs_accessible_name: false - - step_type: action - description: 2. 分别点击ESC键、鼠标右键、控制按钮中的x键 - needs_accessible_name: false - - step_type: assert - description: 3. 分别在浅色和深色主题下,查看和长按控制按钮,查看UI是否与设计图一致 - needs_accessible_name: false - - step_type: assert - description: 4. 打开文档,按快捷键Crtl+H,查看是否进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 1. 进入幻灯片放映 - needs_accessible_name: false - - step_type: assert - description: 2. 退出幻灯片放映 - needs_accessible_name: false - - step_type: assert - description: 3. 与设计图显示一致 - needs_accessible_name: false - - step_type: assert - description: 4. 进入幻灯片放映,放映到最后一页后,继续循环至第一页播放 - needs_accessible_name: false -- id: case_1581219 - name: 打印 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 打印 - status: active - reason: '' - steps: - - step_type: action - description: 1. 已连接打印机,点击右键菜单中的打印 - needs_accessible_name: false - - step_type: action - description: 2. 选择打印机打印 - needs_accessible_name: false - - step_type: assert - description: 1. 跳转到打印预览界面 - needs_accessible_name: false - - step_type: assert - description: 2. 可正常打印纸张;打印预览和实际打印界面显示正常 - needs_accessible_name: false -- id: case_1581217 - name: 打印 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 打印 - status: active - reason: '' - steps: - - step_type: action - description: 1. 未连接打印机,点击主菜单中的打印菜单 - needs_accessible_name: false - - step_type: action - description: 2. 选择打印到文件(PDF) - needs_accessible_name: false - - step_type: assert - description: 1. 跳转到打印预览界面, - needs_accessible_name: false - - step_type: assert - description: 2. 打印正常,打印文档可以保存 - needs_accessible_name: false -- id: case_1581215 - name: '[006]在文件管理器中显示' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[006]在文件管理器中显示' - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击工具栏中的菜单键,再点击在文件管理器中显示菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 进入当前文档所在的文件夹,并显示文档查看器中当前浏览的文档 - needs_accessible_name: false -- id: case_1581213 - name: 编辑后进行另存 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 编辑后进行另存 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,添加高亮、书签或注释,点击工具栏中的菜单键,再点击另存为 - needs_accessible_name: false - - step_type: assert - description: 2. 点击打开新文档,查看高亮、书签、注释等内容是否均被保存 - needs_accessible_name: false - - step_type: assert - description: 3. 关闭旧文档,弹出是否保存的提示框,分别点击保存和不保存按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出系统文件弹框,弹出文档选择器,输入名字可将文件保存为新的文件 - needs_accessible_name: false - - step_type: assert - description: 2. 文档中编辑内容都被保存 - needs_accessible_name: false - - step_type: assert - description: 3. 点击不保存,编辑内容不会被保存;点击保存,编辑内容会被保存 - needs_accessible_name: false -- id: case_1581209 - name: '[009]新标签页' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[009]新标签页' - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击工具栏中的菜单键,再点击新标签页 - needs_accessible_name: false - - step_type: assert - description: 1. 可以打开一个新标签页 - needs_accessible_name: false -- id: case_1581207 - name: '[011]关闭搜索' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[011]关闭搜索' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击搜索框最右侧X,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常关闭搜索,搜索框和搜索结果都会消失 - needs_accessible_name: false -- id: case_1581205 - name: '[012]关闭搜索' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[012]关闭搜索' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击关键字右侧的X,查看显示 - needs_accessible_name: false - - step_type: assert - description: 2. 全选关键字,按delete键,或者按backspace删除关键字,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 搜索框中的关键字被删除,关键字旁边的X消失,搜索结果被关闭,搜索弹框不会关闭,可以继续输入关键字 - needs_accessible_name: false - - step_type: assert - description: 2. 只有关键字被删除,界面无变化,搜索结果不会被删除 - needs_accessible_name: false -- id: case_1581203 - name: '[032]不输入关键字点击enter键' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[032]不输入关键字点击enter键' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 搜索弹框中未输入任何内容,点击键盘Enter键,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 界面无任何改变 - needs_accessible_name: false -- id: case_1581201 - name: '[033]无搜索结果' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[033]无搜索结果' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 在搜索框输入关键字搜索,且文档中无此关键字,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 左边栏显示“无搜索结果”,右侧文档无变化 - needs_accessible_name: false -- id: case_1581199 - name: 点击、滑动搜索结果缩略图 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 点击、滑动搜索结果缩略图 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击左边栏任意一个搜索结果缩略图,查看页面显示 - needs_accessible_name: false - - step_type: assert - description: 2. 左边栏页面超过一页时,滑动滑鼠,查看页面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 点击的搜索结果缩略图显示选中状态,右侧文档跳转到相应页面,页面中所有关键字保持高亮 - needs_accessible_name: false - - step_type: assert - description: 2. 页面正常滑动显示 - needs_accessible_name: false -- id: case_1581195 - name: '[013]手动输入关键字进行搜索' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[013]手动输入关键字进行搜索' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击搜索框手动输入关键字,点击键盘enter键搜索,查看搜索结果显示 - needs_accessible_name: false - - step_type: action - description: 2. 点击上一个按钮 - needs_accessible_name: false - - step_type: action - description: 3. 点击下一个按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 正常显示搜索结果 - needs_accessible_name: false - - step_type: assert - description: 2. 正常切换关键字,选中的关键字自动添加绿色高亮效果 - needs_accessible_name: false - - step_type: assert - description: 3. 正常切换关键字,选中的关键字自动添加绿色高亮效果 - needs_accessible_name: false -- id: case_1581193 - name: '[014]开启搜索' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[014]开启搜索' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 在主菜单中选择搜索,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 2. 右击未选中文本或空白区域,弹出右键菜单项,选择搜索,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出搜索弹框,搜索框中显示搜索字样、搜索框右侧显示上一个、下一个按钮、关闭图标 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出搜索弹框,搜索框中显示搜索字样、搜索框右侧显示上一个、下一个按钮、关闭图标 - needs_accessible_name: false -- id: case_1581191 - name: delete快捷键删除注释目录 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: delete快捷键删除注释目录 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中一个左侧栏的注释目录,鼠标不点击移动至左边栏以外区域,按快捷键delete,查看是否正常删除 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常删除 - needs_accessible_name: false -- id: case_1581187 - name: 重叠高亮文本添加注释 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 重叠高亮文本添加注释 - status: active - reason: '' - steps: - - step_type: action - description: 1. 文本已添加高亮注释,重叠选中另一段文本,右击未高亮区域添加注释, - needs_accessible_name: false - - step_type: action - description: 2. 文本已添加高亮注释,重叠选中另一段文本,右击高亮区域 - needs_accessible_name: false - - step_type: assert - description: 1. 出现两段重叠颜色,添加另一条注释 - needs_accessible_name: false - - step_type: assert - description: 2. 仅可修改原注释内容,无法添加注释 - needs_accessible_name: false -- id: case_1581185 - name: 发送文档保留注释 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 发送文档保留注释 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 添加高亮注释或图标注释,保存关闭文档,再进行重命名,打开查看 - needs_accessible_name: false - - step_type: assert - description: 2. UOS系统中,文档添加高亮注释或图标注释后,发送至另一台UOS电脑,使用文档查看器应用打开查看 - needs_accessible_name: false - - step_type: assert - description: 3. UOS系统中文档查看器,添加高亮、高亮注释和图标注释并保存,再使用wps打开此文档 - needs_accessible_name: false - - step_type: assert - description: 4. UOS系统中文档查看器,添加高亮、高亮注释和图标注释并保存,发送至Windows/苹果电脑中,打开此文档 - needs_accessible_name: false - - step_type: assert - description: 1. 添加的高亮或注释不会消失 - needs_accessible_name: false - - step_type: assert - description: 2. 添加的高亮或注释不会消失 - needs_accessible_name: false - - step_type: assert - description: 3. 添加的高亮或注释不会消失 - needs_accessible_name: false - - step_type: assert - description: 4. 添加的高亮或注释不会消失 - needs_accessible_name: false -- id: case_1581183 - name: 复制左侧栏的注释目录 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 复制左侧栏的注释目录 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 右击左侧栏的注释目录,查看弹出的右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 点击复制,查看是否可以复制该条注释内容 - needs_accessible_name: false - - step_type: assert - description: 1. 显示菜单:复制、删除注释、删除所有注释 - needs_accessible_name: false - - step_type: assert - description: 2. 可以复制该条注释内容 - needs_accessible_name: false -- id: case_1581181 - name: 点击注释目录 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 点击注释目录 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击左边栏任意一个注释,查看是否跳转到该页相应注释内容处 - needs_accessible_name: false - - step_type: assert - description: 1. 正确跳转到该页相应注释内容处,注释目录与文档注释页面同步展示 - needs_accessible_name: false -- id: case_1581179 - name: 左边栏的注释目录展示顺序 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 左边栏的注释目录展示顺序 - status: active - reason: '' - steps: - - step_type: action - description: 1. 不同页面添加注释 - needs_accessible_name: false - - step_type: action - description: 2. 同一页面添加注释 - needs_accessible_name: false - - step_type: assert - description: 1. 按照页面顺序展示,页面靠前则该页面的注释目录靠前 - needs_accessible_name: false - - step_type: assert - description: 2. 同一页面按时间先后顺序显示 - needs_accessible_name: false -- id: case_1581177 - name: 左边栏的注释目录显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 左边栏的注释目录显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 添加图标注释和高亮注释,查看左边栏注释目录显示 - needs_accessible_name: false - - step_type: assert - description: '1.0' - needs_accessible_name: false -- id: case_1581175 - name: 删除高亮注释方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 删除高亮注释方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 右击高亮注释文本,选择右键菜单中的取消高亮进行删除 - needs_accessible_name: false - - step_type: action - description: 2. 点击高亮注释文本,弹出小窗口,删除窗口所有内容,点击窗口的x或窗口之外区域 - needs_accessible_name: false - - step_type: action - description: 3. 右击缩略图_注释,选择删除菜单 - needs_accessible_name: false - - step_type: action - description: 4. 单击缩略图_注释,按delete快捷键进行删除 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常删除注释,左边栏缩略图_注释同步被删除 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常删除注释,左边栏缩略图_注释同步被删除 - needs_accessible_name: false - - step_type: assert - description: 3. 可以正常删除注释,左边栏缩略图_注释同步被删除 - needs_accessible_name: false - - step_type: assert - description: 4. 可以正常删除注释,左边栏缩略图_注释同步被删除 - needs_accessible_name: false -- id: case_1581173 - name: 删除图标注释方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 删除图标注释方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 右击注释小图标,选择右键菜单中的删除注释进行删除 - needs_accessible_name: false - - step_type: action - description: 2. 点击注释小图标,弹出小窗口,删除窗口所有内容,点击窗口的x或窗口之外区域 - needs_accessible_name: false - - step_type: action - description: 3. 右击缩略图_注释,选择删除菜单 - needs_accessible_name: false - - step_type: action - description: 4. 单击缩略图_注释,按delete快捷键进行删除 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常删除注释,左边栏缩略图_注释同步被删除 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常删除注释,左边栏缩略图_注释同步被删除 - needs_accessible_name: false - - step_type: assert - description: 3. 可以正常删除注释,左边栏缩略图_注释同步被删除 - needs_accessible_name: false - - step_type: assert - description: 4. 可以正常删除注释,左边栏缩略图_注释同步被删除 - needs_accessible_name: false -- id: case_1581171 - name: 高亮注释与左侧的注释目录 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 高亮注释与左侧的注释目录 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 添加高亮注释后,查看左边栏是否对应添加注释目录 - needs_accessible_name: false - - step_type: assert - description: 1. 左边栏是否对应添加注释目录 - needs_accessible_name: false -- id: case_1581169 - name: 高亮注释浮窗 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 高亮注释浮窗 - status: active - reason: '' - steps: - - step_type: action - description: 1. 鼠标悬停在高亮注释上,浮窗显示部分注释文案 - needs_accessible_name: false - - step_type: assert - description: 2. 滚动滑鼠或按键盘上下键查看是否可以滑动浮窗中内容 - needs_accessible_name: false - - step_type: assert - description: 1. 浮框显示部分注释文案 - needs_accessible_name: false - - step_type: assert - description: 2. 浮窗中内容无法滑动 - needs_accessible_name: false -- id: case_1581167 - name: 复制高亮注释 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 复制高亮注释 - status: active - reason: '' - steps: - - step_type: action - description: 1. 右键点击高亮注释文本 - needs_accessible_name: false - - step_type: action - description: 2. 选中高亮文本,点击右键菜单中复制 - needs_accessible_name: false - - step_type: action - description: 3. 直接右击高亮文本,点击菜单中复制 - needs_accessible_name: false - - step_type: assert - description: 1. 显示右键菜单:复制,高亮,取消高亮,添加注释,添加书签 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正确复制选中的文本 - needs_accessible_name: false - - step_type: assert - description: 3. 可以正确复制注释内容 - needs_accessible_name: false -- id: case_1581165 - name: 编辑高亮注释 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 编辑高亮注释 - status: active - reason: '' - steps: - - step_type: action - description: 1. 单击高亮注释 - needs_accessible_name: false - - step_type: action - description: 2. 编辑修改输入框中内容 - needs_accessible_name: false - - step_type: assert - description: 3. 鼠标左击或右击注释框外其他区域,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 显示注释输入框,输入光标显示在内容后方 - needs_accessible_name: false - - step_type: assert - description: 2. 可以修改 - needs_accessible_name: false - - step_type: assert - description: 3. 注释框关闭,注释编辑成功 - needs_accessible_name: false -- id: case_1581163 - name: 高亮注释方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 高亮注释方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 编辑注释界面,鼠标滑动注释小窗口中内容 - needs_accessible_name: false - - step_type: assert - description: 1. 可以滑动 - needs_accessible_name: false -- id: case_1581161 - name: 左键或右键单击取消高亮注释的右键菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 左键或右键单击取消高亮注释的右键菜单 - status: active - reason: '' - steps: - - step_type: action - description: 1. 右击高亮注释,弹出右键菜单;鼠标左键点击其他区域 - needs_accessible_name: false - - step_type: action - description: 2. 右击高亮注释,弹出右键菜单;鼠标右键点击其他区域 - needs_accessible_name: false - - step_type: assert - description: 1. 右键菜单框消失 - needs_accessible_name: false - - step_type: assert - description: 2. 右键菜单框消失 - needs_accessible_name: false -- id: case_1581159 - name: 输入高亮注释达到上限 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 输入高亮注释达到上限 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中一段文本并右击弹出右键菜单,点击“添加注释” - needs_accessible_name: false - - step_type: assert - description: 2. 注释输入窗口,输入内容,查看是否可以自动换行 - needs_accessible_name: false - - step_type: assert - description: 3. 注释输入窗口,查看是否支持滚动或按上下键、pageup、pagedown查看全部信息 - needs_accessible_name: false - - step_type: assert - description: 4. 当输入框内容输入超过1500字符(中文或英文)限制,查看是否弹出提示 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出注释小窗口,固定显示在点击位置 - needs_accessible_name: false - - step_type: assert - description: 2. 可以自动换行 - needs_accessible_name: false - - step_type: assert - description: 3. 支持滚动或按键查看全部信息 - needs_accessible_name: false - - step_type: assert - description: 4. 正确弹出提示:输入已达上限 - needs_accessible_name: false -- id: case_1581157 - name: 图标注释与左侧栏的注释目录 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 图标注释与左侧栏的注释目录 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 每个注释小图标添加后,查看左边栏是否对应添加注释目录 - needs_accessible_name: false - - step_type: assert - description: 1. 左边栏对应添加注释目录 - needs_accessible_name: false -- id: case_1581155 - name: 图标注释浮窗 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 图标注释浮窗 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 鼠标悬停在注释图标上,查看显示 - needs_accessible_name: false - - step_type: assert - description: 2. 滚动滑鼠或按键盘上下键查看是否可以滑动浮窗中内容 - needs_accessible_name: false - - step_type: assert - description: 1. 浮框显示部分注释文案 - needs_accessible_name: false - - step_type: assert - description: 2. 浮窗中内容无法滑动 - needs_accessible_name: false -- id: case_1581153 - name: 复制图标注释 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 复制图标注释 - status: active - reason: '' - steps: - - step_type: action - description: 1. 右键点击已添加的注释小图标 - needs_accessible_name: false - - step_type: assert - description: 2. 点击复制菜单并粘贴至txt等文档中,查看 - needs_accessible_name: false - - step_type: assert - description: 3. 点击添加注释菜单,查看 - needs_accessible_name: false - - step_type: assert - description: 4. 点击删除注释菜单,查看 - needs_accessible_name: false - - step_type: assert - description: 5. 点击添加书签菜单,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 显示右键菜单:复制,删除注释,添加注释,添加书签 - needs_accessible_name: false - - step_type: assert - description: 2. 注释内容被正确复制 - needs_accessible_name: false - - step_type: assert - description: 3. 展开注释窗口,可以进行注释编辑 - needs_accessible_name: false - - step_type: assert - description: 4. 注释小图标被正确删除 - needs_accessible_name: false - - step_type: assert - description: 5. 当前页面正确添加为书签页 - needs_accessible_name: false -- id: case_1581151 - name: 编辑图标注释内容 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 编辑图标注释内容 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 注释添加完成后,鼠标左键单击注释图标,查看显示 - needs_accessible_name: false - - step_type: action - description: 2. 编辑注释内容 - needs_accessible_name: false - - step_type: assert - description: 3. 鼠标左击其他区域(非注释图标和注释框),查看 - needs_accessible_name: false - - step_type: assert - description: 4. 左击注释图标,查看 - needs_accessible_name: false - - step_type: action - description: 5. 编辑注释内容 - needs_accessible_name: false - - step_type: assert - description: 6. 鼠标右击其他区域(非注释图标和注释框),查看 - needs_accessible_name: false - - step_type: assert - description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常修改 - needs_accessible_name: false - - step_type: assert - description: 3. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 - needs_accessible_name: false - - step_type: assert - description: 4. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 - needs_accessible_name: false - - step_type: assert - description: 5. 可以正常修改 - needs_accessible_name: false - - step_type: assert - description: 6. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 - needs_accessible_name: false -- id: case_1581149 - name: 左键或右键单击取消右键菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 左键或右键单击取消右键菜单 - status: active - reason: '' - steps: - - step_type: action - description: 1. 右击注释图标,弹出右键菜单;鼠标左键点击其他区域 - needs_accessible_name: false - - step_type: action - description: 2. 右击注释图标,弹出右键菜单;鼠标右键点击其他区域 - needs_accessible_name: false - - step_type: assert - description: 1. 右键菜单框消失 - needs_accessible_name: false - - step_type: assert - description: 2. 右键菜单框消失 - needs_accessible_name: false -- id: case_1581147 - name: 不输入内容点击其他位置,取消添加注释 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 不输入内容点击其他位置,取消添加注释 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击“添加注释”,再点击文档界面,展开空白小窗口,不输入内容,直接点击右上角关闭图标或文档中其他位置 - needs_accessible_name: false - - step_type: assert - description: 1. 注释自动取消; - needs_accessible_name: false -- id: case_1581145 - name: 输入图标注释达到上限 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 输入图标注释达到上限 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击“添加注释”,鼠标移至页面单击任意位置,查看弹出显示 - needs_accessible_name: false - - step_type: assert - description: 2. 注释输入窗口,输入内容,查看是否可以自动换行 - needs_accessible_name: false - - step_type: assert - description: 3. 注释输入窗口,查看是否支持滚动或按上下键、pageup、pagedown查看全部信息 - needs_accessible_name: false - - step_type: assert - description: 4. 当输入框内容输入超过1500字符(中文或英文)限制,查看是否弹出提示 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出注释小图标和小窗口,均固定显示在点击位置 - needs_accessible_name: false - - step_type: assert - description: 2. 可以自动换行 - needs_accessible_name: false - - step_type: assert - description: 3. 支持滚动或按键查看全部信息 - needs_accessible_name: false - - step_type: assert - description: 4. 正确弹出提示:输入已达上限 - needs_accessible_name: false -- id: case_1581143 - name: 添加高亮注释方式(有高亮显示,无注释小图标显示) - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 添加高亮注释方式(有高亮显示,无注释小图标显示) - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中文本,右键点击在文字上,点击右键菜单的“添加注释”,查看是否弹出高亮注释窗口 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出高亮注释窗口,可以添加高亮注释成功 - needs_accessible_name: false -- id: case_1581141 - name: 添加图标注释方式(显示注释小图标,无高亮显示) - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 添加图标注释方式(显示注释小图标,无高亮显示) - status: active - reason: '' - steps: - - step_type: assert - description: 1. 未选中文本,点击左边栏添加注释按钮,点击页面区域任意位置,查看是否弹出图标注释窗口 - needs_accessible_name: false - - step_type: action - description: 2. 输入注释内容,点击窗口外其他区域 - needs_accessible_name: false - - step_type: assert - description: 3. 未选中文本,右键点击在非图标注释及非高亮注释的空白区域,点击右键菜单的“添加注释”,查看是否弹出图标注释窗口 - needs_accessible_name: false - - step_type: action - description: 4. 输入注释内容,点击窗口外其他区域 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出图标注释窗口 - needs_accessible_name: false - - step_type: assert - description: 2. 窗口关闭,图标注释正常显示,图标注释添加成功 - needs_accessible_name: false - - step_type: assert - description: 3. 弹出图标注释窗口 - needs_accessible_name: false - - step_type: assert - description: 4. 窗口关闭,图标注释正常显示,图标注释添加成功 - needs_accessible_name: false -- id: case_1581139 - name: 跨页高亮 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 跨页高亮 - status: active - reason: '' - steps: - - step_type: action - description: 1. 跨页选中文本添加高亮 - needs_accessible_name: false - - step_type: action - description: 2. 右击高亮文本选择“取消高亮” - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常添加跨页高亮 - needs_accessible_name: false - - step_type: assert - description: 2. 仅可取消当前页高亮 - needs_accessible_name: false -- id: case_1581135 - name: 高亮重叠 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 高亮重叠 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 文本已高亮显示,重叠选中另一段文本,右击未高亮区域添加颜色,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 出现两段重叠颜色,重叠部分为混合色 - needs_accessible_name: false -- id: case_1581133 - name: '[015]取消高亮' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[015]取消高亮' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中/不选中已高亮的文本,点击右键菜单中“取消高亮”菜单,查看是否可以取消高亮 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常取消高亮 - needs_accessible_name: false -- id: case_1581131 - name: 记住高亮规则 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 记住高亮规则 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中文本,右击选择一种高亮颜色(如:蓝色) - needs_accessible_name: false - - step_type: assert - description: 2. 不关闭应用,右击另一段高亮文本,右击弹出右键菜单查看 - needs_accessible_name: false - - step_type: action - description: 3. 选中文本,右击选择一种高亮颜色(如:蓝色) - needs_accessible_name: false - - step_type: assert - description: 4. 不关闭应用,选择另一段未高亮文本,右击弹出右键菜单查看 - needs_accessible_name: false - - step_type: assert - description: 1. 文本添加蓝色高亮 - needs_accessible_name: false - - step_type: assert - description: 2. 右键菜单中蓝色图标仍为选中状态,点击“高亮”菜单,文本切换为蓝色高亮 - needs_accessible_name: false - - step_type: assert - description: 3. 文本添加蓝色高亮 - needs_accessible_name: false - - step_type: assert - description: 4. 右键菜单中蓝色图标仍为选中状态,点击“高亮”菜单,文本添加蓝色高亮 - needs_accessible_name: false -- id: case_1581129 - name: 切换高亮颜色 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 切换高亮颜色 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中已高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标进行切换,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 不选中已高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标进行切换,查看是否可以切换 - needs_accessible_name: false - - step_type: assert - description: 3. 选中一段未高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标添加高亮,查看 - needs_accessible_name: false - - step_type: assert - description: 4. 再次右击这段文本,选择其他颜色进行切换,查看是否切换成功 - needs_accessible_name: false - - step_type: assert - description: 1. 每点击一种颜色,会叠加成混合色 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常切换高亮颜色 - needs_accessible_name: false - - step_type: assert - description: 3. 可以正常添加高亮 - needs_accessible_name: false - - step_type: assert - description: 4. 可以正常切换高亮颜色 - needs_accessible_name: false -- id: case_1581127 - name: '[016]“高亮”菜单和“取消高亮”菜单显示' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[016]“高亮”菜单和“取消高亮”菜单显示' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 添加高亮后,查看“高亮”菜单和“取消高亮”菜单显示,查看颜色圈图标是否可以继续点击切换颜色 - needs_accessible_name: false - - step_type: assert - description: 1. “高亮”菜单置灰,“取消高亮”菜单可点击,颜色圈图标可继续点击切换颜色 - needs_accessible_name: false -- id: case_1581125 - name: '[017]添加高亮的方式' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[017]添加高亮的方式' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中一段未高亮文字,查看取消高亮菜单是否置灰 - needs_accessible_name: false - - step_type: action - description: 2. 点击右键菜单中的高亮菜单添加 - needs_accessible_name: false - - step_type: assert - description: 1. 取消高亮菜单置灰 - needs_accessible_name: false - - step_type: assert - description: 2. 可以添加高亮,添加的高亮颜色为当前颜色圈图标选中的颜色 - needs_accessible_name: false -- id: case_1581123 - name: 默认选中橘黄色高亮 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 默认选中橘黄色高亮 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 首次打开文档,选中多行文本右击,查看默认选中的颜色圈图标 - needs_accessible_name: false - - step_type: assert - description: 2. 切换颜色后,选中多行文本右击,关闭文档再打开,查看默认的颜色图标 - needs_accessible_name: false - - step_type: assert - description: 1. 默认选中橘黄色图标 - needs_accessible_name: false - - step_type: assert - description: 2. 默认选中橘黄色图标 - needs_accessible_name: false -- id: case_1581121 - name: 选中未高亮文本进行复制 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 选中未高亮文本进行复制 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中一段未高亮文本,点击右键菜单中复制菜单 - needs_accessible_name: false - - step_type: action - description: 2. 选中一段未高亮文本,按键盘中的Ctrl+C键,打开新的文本按键盘中的Ctrl+V键 - needs_accessible_name: false - - step_type: action - description: 3. 选中一段未高亮文本,点击右键菜单中高亮菜单和8种颜色图标 - needs_accessible_name: false - - step_type: action - description: 4. 选中一段未高亮文本,点击右键菜单中添加注释菜单 - needs_accessible_name: false - - step_type: action - description: 5. 选中一段未高亮文本,点击右键菜单中添加书签菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 可以复制选中的文本 - needs_accessible_name: false - - step_type: assert - description: 2. 可以复制选中的文本 - needs_accessible_name: false - - step_type: assert - description: 3. 可以增加高亮和切换颜色 - needs_accessible_name: false - - step_type: assert - description: 4. 在文本右下角打开注释窗口,可以编辑注释,关闭后注释添加完成,文本自动高亮 - needs_accessible_name: false - - step_type: assert - description: 5. 当前页面添加为书签 - needs_accessible_name: false -- id: case_1581119 - name: '[034]右击选中文字弹出菜单' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: '[034]右击选中文字弹出菜单' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中页面中一段未高亮文本,查看右键菜单包含的菜单项 - needs_accessible_name: false - - step_type: assert - description: 1. 右键菜单包含的选项为:复制、高亮、8种高亮颜色、取消高亮、添加注释、添加书签;其中“取消高亮”置灰显示,其他菜单高亮可选择 - needs_accessible_name: false -- id: case_1581117 - name: delete快捷键删除书签缩略图 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: delete快捷键删除书签缩略图 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中一个书签缩略图,鼠标不点击移动至左边栏以外区域,按快捷键delete,查看是否正常删除 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常删除 - needs_accessible_name: false -- id: case_1581115 - name: 删除书签 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 删除书签 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击右侧已出现的的书签标志 - needs_accessible_name: false - - step_type: assert - description: 2. 鼠标放在缩略图_书签上面,点击鼠标右键,出现右键菜单:删除书签,点击此菜单 - needs_accessible_name: false - - step_type: action - description: 3. 鼠标选中该缩略图_书签,直接按键盘上Delete键 - needs_accessible_name: false - - step_type: assert - description: 1. 点击右侧已出现的的书签图标,则删除该页书签,书签图标变成空心实线图标且无填充色; - needs_accessible_name: false - - step_type: assert - description: 说明:鼠标移到书签位置附近才会显示虚线的书签图标,鼠标移出书签区域,虚线书签图标消失;再次点击此图标则可以添加书签 - needs_accessible_name: false - - step_type: assert - description: 2. 可以删除该页书签,书签缩略图消失,该页右上角书签图标变成空心实线图标且无填充色 - needs_accessible_name: false - - step_type: assert - description: 3. 可以删除该页书签,书签缩略图消失,该页右上角书签图标变成空心实线图标且无填充色 - needs_accessible_name: false -- id: case_1581113 - name: 点击缩略图_书签 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 点击缩略图_书签 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击左边栏任意一条缩略图_书签,查看是否跳转到相应页面 - needs_accessible_name: false - - step_type: assert - description: 2. 查看右侧文档添加的书签是否与缩略图_书签同步展示 - needs_accessible_name: false - - step_type: assert - description: 1. 跳转至相应页面 - needs_accessible_name: false - - step_type: assert - description: 2. 同步展示 - needs_accessible_name: false -- id: case_1581111 - name: '[035]点击菜单方式添加书签' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: '[035]点击菜单方式添加书签' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中文本,点击右键菜单中的“添加书签”菜单,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 未选中文本,点击右键菜单中的“添加书签”菜单,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 文本所在页面添加为书签,文档右上角显示蓝色填充色的书签图标,右键菜单中“添加书签”菜单变为“删除书签” - needs_accessible_name: false - - step_type: assert - description: 2. 文本所在页面添加为书签,文档右上角显示蓝色填充色的书签图标,右键菜单中“添加书签”菜单变为“删除书签” - needs_accessible_name: false -- id: case_1581109 - name: 点击书签图标添加书签 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 点击书签图标添加书签 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入缩略图_书签页面,查看未添加任何书签时检查界面显示 - needs_accessible_name: false - - step_type: action - description: 2. 点击书签图标上方的添加书签按钮 - needs_accessible_name: false - - step_type: assert - description: 3. 查看加入书签后的页面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 界面显示正确 - needs_accessible_name: false - - step_type: assert - description: 2. 当前浏览的页面可以加入书签 - needs_accessible_name: false - - step_type: assert - description: 3. 左边栏列出加入书签的页面:以页面缩略图和页面数(如页面20)形式显示;按照页面顺序展示 - needs_accessible_name: false -- id: case_1581105 - name: 窗口比例变化和左边栏宽度变化 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/窗口管理(#114139) - description: 窗口比例变化和左边栏宽度变化 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 调整窗口大小,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 2. 手动拖拽目录边框,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 左边栏区域和右侧文档区域始终保持约1:3的比例变化,左边栏文档、书签、注释、搜索结果缩略图大小跟随变化,左边栏宽度范围:266px~380px - needs_accessible_name: false - - step_type: assert - description: 2. 左边栏文档、书签、注释、搜索结果缩略图大小跟随变化,左边栏宽度范围:266px~380px - needs_accessible_name: false -- id: case_1581101 - name: 目录与右侧文档对应 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/目录(#114163) - description: 目录与右侧文档对应 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入左边栏目录界面,点击选中目录索引,查看右侧文档显示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入左边栏目录界面,按键盘上下键/pageup/pagedown切换目录选中,查看右侧文档页面显示 - needs_accessible_name: false - - step_type: assert - description: 3. 改变右侧文档当前所在页数,查看左边栏目录显示 - needs_accessible_name: false - - step_type: assert - description: 1. 右侧文档跳转至当前所选目录索引页,且显示为第一行;左侧目录点击后正常高亮显示,不会出现高亮定位不准现象 - needs_accessible_name: false - - step_type: assert - description: 2. 右侧文档跳转至当前所选目录索引页,且显示为第一行;左侧目录点击后正常高亮显示,不会出现高亮定位不准现象 - needs_accessible_name: false - - step_type: assert - description: 3. 目录会对应高亮显示 - needs_accessible_name: false -- id: case_1581099 - name: 目录显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/目录(#114163) - description: 目录显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,查看目录默认展示方式 - needs_accessible_name: false - - step_type: assert - description: 2. 展开层级索引后关闭再打开文档,查看目录展示方式 - needs_accessible_name: false - - step_type: assert - description: 1. 默认展示为收起状态,展示一级目录 - needs_accessible_name: false - - step_type: assert - description: 2. 恢复默认状态 - needs_accessible_name: false -- id: case_1581097 - name: 目录显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/目录(#114163) - description: 目录显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 调整左边栏宽度,查看目录显示 - needs_accessible_name: false - - step_type: action - description: 2. 点击收起及展开目录层级索引 - needs_accessible_name: false - - step_type: assert - description: 1. 目录显示内容相应调整,超出省略,不省略页数 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常收起及展开目录层级索引,最多显示三级 - needs_accessible_name: false -- id: case_1581095 - name: 目录显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/目录(#114163) - description: 目录显示 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击左边栏底部目录图标 - needs_accessible_name: false - - step_type: assert - description: 2. 查看目录显示 - needs_accessible_name: false - - step_type: assert - description: 1. 左边栏显示文档目录 - needs_accessible_name: false - - step_type: assert - description: '2.' - needs_accessible_name: false -- id: case_1581093 - name: 打开不可读取页数的文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/目录(#114163) - description: 打开不可读取页数的文档 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开一份不可读取页数的文档,查看输入框一行的显示 - needs_accessible_name: false - - step_type: assert - description: 2. 输入框中输入页码(包括数字和字母),查看是否正常跳转 - needs_accessible_name: false - - step_type: assert - description: 3. 输入非有效内容,查看提示 - needs_accessible_name: false - - step_type: action - description: 4. 点击页数右侧的上翻、下翻按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 显示为:输入框和文档总页数;文档翻页时页数显示正确 - needs_accessible_name: false - - step_type: assert - description: 2. 跳转至对应页面 - needs_accessible_name: false - - step_type: assert - description: 3. 提示“请输入有效页码” - needs_accessible_name: false - - step_type: assert - description: 4. 点击上翻按钮,页数上翻;点击下翻按钮,页数下翻 - needs_accessible_name: false -- id: case_1581091 - name: 打开可读取页数的文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/目录(#114163) - description: 打开可读取页数的文档 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开一份可读取页数的文档,查看输入框一行的显示 - needs_accessible_name: false - - step_type: assert - description: 2. 输入框中输入页码(包括数字和字母),查看是否正常跳转 - needs_accessible_name: false - - step_type: assert - description: 3. 输入任意非有效内容,查看提示 - needs_accessible_name: false - - step_type: action - description: 4. 点击页数右侧的上翻、下翻按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 显示为:输入框、默认计算页数和文档总页数;文档翻页时页数显示正确 - needs_accessible_name: false - - step_type: assert - description: 2. 跳转至对应页面 - needs_accessible_name: false - - step_type: assert - description: 3. 提示“请输入有效页码” - needs_accessible_name: false - - step_type: assert - description: 4. 点击上翻按钮,页数上翻;点击下翻按钮,页数下翻 - needs_accessible_name: false -- id: case_1581089 - name: 多窗口多标签页时双击打开文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 多窗口多标签页时双击打开文档 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 未打开任何文档查看器窗口时,双击一份文档,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 已打开一个文档查看器窗口,双击另一份文档并查看 - needs_accessible_name: false - - step_type: assert - description: 3. 有多个窗口时,双击文档并查看 - needs_accessible_name: false - - step_type: assert - description: 1. 文档在一个新窗口中打开 - needs_accessible_name: false - - step_type: assert - description: 2. .窗口中新增标签页 - needs_accessible_name: false - - step_type: assert - description: 3. 文档展示在最早开启的窗口中 - needs_accessible_name: false -- id: case_1581087 - name: 多窗口多标签页时不支持打开相同文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 多窗口多标签页时不支持打开相同文档 - status: active - reason: '' - steps: - - step_type: action - description: 1. 只打开一个窗口并添加文档A,双击/拖拽/点击添加标签页菜单方式打开再次添加文档A至此窗口 - needs_accessible_name: false - - step_type: assert - description: 2. 打开多个窗口,文档A已在其中一个窗口打开,双击/拖拽/点击添加标签页菜单方式打开再次拖拽文档A至任意窗口,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 无法添加相同文档,激活当前页,无提示弹出 - needs_accessible_name: false - - step_type: assert - description: 2. 无法添加相同文档,激活当前页,无提示弹出 - needs_accessible_name: false -- id: case_1581085 - name: 多窗口多标签页时窗口间文档互相拖拽 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 多窗口多标签页时窗口间文档互相拖拽 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开多个窗口,每个窗口中分别有多个标签页 - needs_accessible_name: false - - step_type: action - description: 2. 将一个窗口标签页拖拽到另外一个窗口中任意位置 - needs_accessible_name: false - - step_type: assert - description: 3. .当窗口A中只有一个标签页,将此标签页拖拽至其他窗口,查看 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 标签页可以正常在不同窗口之间拖拽移动,拖拽过程中鼠标显示绿色可拖拽标志 - needs_accessible_name: false - - step_type: assert - description: 3. 窗口A自动关闭退出 - needs_accessible_name: false -- id: case_1581083 - name: 多窗口多标签页时拖拽打开新窗口 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 多窗口多标签页时拖拽打开新窗口 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 拖拽标签页移至另一个窗口中标签栏和文档区域,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 拖拽标签页至另一个窗口中工具栏区域或移出当前窗口,查看是否创建一个新的窗口 - needs_accessible_name: false - - step_type: assert - description: 1. 标签页合并至另一个窗口中,拖拽过程中鼠标显示绿色可拖拽标志;拖动过程中界面显示正确 - needs_accessible_name: false - - step_type: assert - description: 2. 正常创建一个新的窗口,拖拽过程中鼠标显示绿色可拖拽标志 - needs_accessible_name: false -- id: case_1581081 - name: 添加新窗口 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 添加新窗口 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开一个文档查看器窗口进入初始界面,点击菜单中的“新窗口”菜单查看是否添加新窗口 - needs_accessible_name: false - - step_type: assert - description: 2. 打开一份文档,点击菜单中的“新窗口”菜单查看是否添加新窗口 - needs_accessible_name: false - - step_type: assert - description: 3. 新窗口中未添加文档时查看各菜单显示并点击 - needs_accessible_name: false - - step_type: assert - description: 4. 新窗口中添加文档后查看各菜单显示并点击 - needs_accessible_name: false - - step_type: assert - description: 1. 正常添加新窗口 - needs_accessible_name: false - - step_type: assert - description: 2. 正常添加新窗口,前一个打开的文档仍保留开启状态 - needs_accessible_name: false - - step_type: assert - description: 3. 工具栏左侧按钮均置灰显示点击无作用;右侧菜单中新窗口、新标签页、主题、帮助、关于、退出菜单高亮显示点击后功能正常,其他菜单置灰显示点击无作用 - needs_accessible_name: false - - step_type: assert - description: 4. 工具栏、左边栏菜单均可点击,功能正常,文档中高亮和图标方式添加注释功能正常 - needs_accessible_name: false -- id: case_1581079 - name: 单个窗口中多标签页管理 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 单个窗口中多标签页管理 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在不同标签页中进行搜索 - needs_accessible_name: false - - step_type: action - description: 2. 切换产生搜索结果的标签页 - needs_accessible_name: false - - step_type: action - description: 3. 点击当前页搜索框中的关闭按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 每个标签页分别显示搜索结果, - needs_accessible_name: false - - step_type: assert - description: 2. 每个标签页的搜索结果和搜索弹框正常显示不会被关闭 - needs_accessible_name: false - - step_type: assert - description: 3. 仅当前页搜索结果被正常关闭,其他标签页搜索弹框和搜索结果仍正常显示 - needs_accessible_name: false -- id: case_1581077 - name: 单个窗口中多标签页管理 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 单个窗口中多标签页管理 - status: active - reason: '' - steps: - - step_type: action - description: 1. 窗口中打开多个标签页直到超过标签栏范围,窗口界面显示 - needs_accessible_name: false - - step_type: action - description: 2. 点击左翻按钮 - needs_accessible_name: false - - step_type: action - description: 3. 点击右翻按钮 - needs_accessible_name: false - - step_type: assert - description: 4. 选择首个标签页或左侧无隐藏文件时,查看左翻按钮是否置灰 - needs_accessible_name: false - - step_type: assert - description: 5. 选择最后一个标签页右侧无隐藏文件时,查看右翻按钮是否置灰 - needs_accessible_name: false - - step_type: assert - description: 1. 左翻箭头高亮显示,可以点击 - needs_accessible_name: false - - step_type: assert - description: 2. 左侧隐藏的文档左移 - needs_accessible_name: false - - step_type: assert - description: 3. 右侧隐藏的文档右移 - needs_accessible_name: false - - step_type: assert - description: 4. 左翻按钮置灰显示 - needs_accessible_name: false - - step_type: assert - description: 5. 右翻按钮置灰显示 - needs_accessible_name: false -- id: case_1581075 - name: 单个窗口中多标签页管理 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 单个窗口中多标签页管理 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 长按任意一个标签页拖拽,查看是否正常调整标签页排序 - needs_accessible_name: false - - step_type: assert - description: 2. 在标签栏滚动鼠标,查看是否可以滚动切换标签页 - needs_accessible_name: false - - step_type: action - description: 3. 点击切换标签页 - needs_accessible_name: false - - step_type: assert - description: 1. 可以调整标签页排序 - needs_accessible_name: false - - step_type: assert - description: 2. 可以滚动切换标签页 - needs_accessible_name: false - - step_type: assert - description: 3. 正常切换无异常 - needs_accessible_name: false -- id: case_1581073 - name: 单个窗口已有文档界面添加多标签页方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 单个窗口已有文档界面添加多标签页方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击多标签栏右侧“+”图标添加新标签页 - needs_accessible_name: false - - step_type: action - description: 2. 从文件管理器或桌面中拖拽其他文档至窗口中 - needs_accessible_name: false - - step_type: action - description: 3. 点击菜单中的“新标签页”菜单添加新标签页 - needs_accessible_name: false - - step_type: action - description: 4. 双击另一份文档 - needs_accessible_name: false - - step_type: assert - description: 5. 右击另一份文档,选择文档查看器 - needs_accessible_name: false - - step_type: assert - description: 1. 可以在已打开的窗口中添加标签页,文档显示正常 - needs_accessible_name: false - - step_type: assert - description: 2. 可以在已打开的窗口中添加标签页,文档显示正常 - needs_accessible_name: false - - step_type: assert - description: 3. 可以在已打开的窗口中添加标签页,文档显示正常 - needs_accessible_name: false - - step_type: assert - description: 4. 可以在已打开的窗口中添加标签页,文档显示正常 - needs_accessible_name: false - - step_type: assert - description: 5. 可以在已打开的窗口中添加标签页,文档显示正常 - needs_accessible_name: false -- id: case_1581071 - name: 单个窗口初始界面添加多标签页方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 单个窗口初始界面添加多标签页方式 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 窗口中无标签页,打开文档查看器进入初始页面,从文件管理器或桌面拖拽多个文档添加 - needs_accessible_name: false - - step_type: assert - description: 2. 窗口中无标签页,点击菜单中的“新标签页”菜单,查看是否添加新标签页 - needs_accessible_name: false - - step_type: action - description: 3. 窗口中无标签页,双击另一份文档 - needs_accessible_name: false - - step_type: assert - description: 4. 窗口中无标签页,右击另一份文档,选择文档查看器 - needs_accessible_name: false - - step_type: assert - description: 1. 可以在已打开的窗口窗口中显示多个标签页,文档显示正常 - needs_accessible_name: false - - step_type: assert - description: 2. 可以在已打开的窗口添加标签页,文档显示正常 - needs_accessible_name: false - - step_type: assert - description: 3. 可以在已打开的窗口添加标签页,文档显示正常 - needs_accessible_name: false - - step_type: assert - description: 4. 可以在已打开的窗口添加标签页,文档显示正常 - needs_accessible_name: false -- id: case_1581069 - name: 打开损坏的文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 打开损坏的文档 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开损坏的文档,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出提示:请检查文件是否损坏;提示语前面的应该是红色禁止图标 - needs_accessible_name: false -- id: case_1581067 - name: '[036]关闭再打开' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: '[036]关闭再打开' - status: active - reason: '' - steps: - - step_type: action - description: 1. 当前已打开文档并浏览,关闭应用后再打开 - needs_accessible_name: false - - step_type: assert - description: 1. 进入初始界面,默认要选择文件或拖拽文件进行浏览; - needs_accessible_name: false -- id: case_1581065 - name: '[037]打开不同格式' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: '[037]打开不同格式' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 分别打开以下支持的文档格式,查看能否正常打开查看: - needs_accessible_name: false - - step_type: action - description: PDF(扫描件和非扫描件格式), DJVU, DOCX格式文档 - needs_accessible_name: false - - step_type: assert - description: 1. 支持的格式文档均可以正常打开浏览 - needs_accessible_name: false -- id: case_1581063 - name: 多种打开方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 多种打开方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 拖拽一个文档至初始页面 - needs_accessible_name: false - - step_type: action - description: 2. 在文件夹中双击一个文档 - needs_accessible_name: false - - step_type: assert - description: 3. 在文件夹中右击一个文档,选择打开方式为:文档查看器 - needs_accessible_name: false - - step_type: action - description: 4. 点击选择文件进行选择:进入文件选择页面,选择一个文档,点击打开 - needs_accessible_name: false - - step_type: assert - description: 5. 文件选择页面点击取消,或者点击ESC键,查看是否退出选择弹框 - needs_accessible_name: false - - step_type: action - description: 6. 初始界面按Ctrl+O键 - needs_accessible_name: false - - step_type: action - description: 7. 已打开文档后,点击标签栏右侧的+按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 可以打开文档,正常进行浏览 - needs_accessible_name: false - - step_type: assert - description: 2. 默认使用文档查看器打开文档浏览 - needs_accessible_name: false - - step_type: assert - description: 3. 可以打开文档,正常进行浏览 - needs_accessible_name: false - - step_type: assert - description: 4. 可以打开文档,正常进行浏览 - needs_accessible_name: false - - step_type: assert - description: 5. 会退出选择弹框 - needs_accessible_name: false - - step_type: assert - description: 6. 进入文件选择页面,可以选择文件 - needs_accessible_name: false - - step_type: assert - description: 7. 进入文件选择页面,可以选择文件添加 - needs_accessible_name: false -- id: case_1581061 - name: 取消使用放大镜 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 取消使用放大镜 - status: active - reason: '' - steps: - - step_type: action - description: 1. 使用放大镜功能时,按键盘上的ESC键 - needs_accessible_name: false - - step_type: action - description: 2. 使用放大镜功能时,点击鼠标右键 - needs_accessible_name: false - - step_type: assert - description: 1. 可以取消放大镜功能 - needs_accessible_name: false - - step_type: assert - description: 2. 可以取消放大镜功能 - needs_accessible_name: false -- id: case_1581059 - name: 使用放大镜 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 使用放大镜 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击菜单中放大镜菜单查看是否可以使用放大镜 - needs_accessible_name: false - - step_type: assert - description: 2. 鼠标移动到页面中相应区域(包括文字和图片),查看有无放大作用 - needs_accessible_name: false - - step_type: assert - description: 3. 查看放大镜是否可以移动到左边栏或标题、标签栏位置 - needs_accessible_name: false - - step_type: assert - description: 1. 可以使用放大镜 - needs_accessible_name: false - - step_type: assert - description: 2. 该区域内容(包括文字和图片)放大 - needs_accessible_name: false - - step_type: assert - description: 3. 无法移动至左边栏或标题、标签栏位置 - needs_accessible_name: false -- id: case_1581057 - name: 手型工具 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 手型工具 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击选择图标,在下拉框中选择手型图标 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移动到左边栏和右侧文档并点击 - needs_accessible_name: false - - step_type: assert - description: 3. 长按鼠标,查看能否拖动页面 - needs_accessible_name: false - - step_type: assert - description: 1. 工具栏显示手型工具图标 - needs_accessible_name: false - - step_type: assert - description: 2. 鼠标移动到左边栏仍显示选择样式,点击可选择任意缩略图和按钮;鼠标移动到右侧文档显示为手型样式,无法选择文本;鼠标移动到链接内容仍显示为手型样式,点击无法进入相应链接 - needs_accessible_name: false - - step_type: assert - description: 3. 可以拖动页面 - needs_accessible_name: false -- id: case_1581055 - name: 默认使用选择工具和文档的浏览效果 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 默认使用选择工具和文档的浏览效果 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 文档打开后,查看默认使用的工具 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移动到左边栏和右侧文档并点击 - needs_accessible_name: false - - step_type: assert - description: 3. 长按鼠标,查看能否拖动页面 - needs_accessible_name: false - - step_type: assert - description: 1. 默认使用选择工具,工具栏显示选择工具图标 - needs_accessible_name: false - - step_type: assert - description: 2. 鼠标移动到非可选文档处仍显示选择样式,点击可选择任意缩略图和按钮;鼠标移动到右侧文档变成竖形选择文本图标,可以选择文本;鼠标移动到链接内容显示为手型样式,点击进入相应链接 - needs_accessible_name: false - - step_type: assert - description: 3. 无法拖动页面 - needs_accessible_name: false -- id: case_1581051 - name: '[018]百分比图标的下拉框' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[018]百分比图标的下拉框' - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击下拉框,选择百分比选项 - needs_accessible_name: false - - step_type: action - description: 2. 点击+、-按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 文档行相应百分比大小调整 - needs_accessible_name: false - - step_type: assert - description: 2. 缩放比例调整为列表中相邻比例选项进行调整 - needs_accessible_name: false -- id: case_1581049 - name: '[019]百分比图标的编辑框' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[019]百分比图标的编辑框' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击编辑框,输入10%-500%范围内任意百分比值(可以输小数点,小数点保留2位),按enter键,查看文档显示 - needs_accessible_name: false - - step_type: action - description: 2. 点击+、-按钮, - needs_accessible_name: false - - step_type: assert - description: 1. 文档进行相应百分比大小调整,按enter键后输入框中内容无截断显示 - needs_accessible_name: false - - step_type: assert - description: 2. 缩放比例调整为列表中最靠近该比例的比例选项进行调整 - needs_accessible_name: false -- id: case_1581047 - name: '[020]工具栏中的百分比图标显示' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[020]工具栏中的百分比图标显示' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 查看工具栏中的百分比图标显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击编辑框中的下拉按钮,查看显示的百分比选项 - needs_accessible_name: false - - step_type: assert - description: 1. 显示带有下拉按钮的编辑框,编辑框左右两侧显示+-按钮;显示效果与设计图一致 - needs_accessible_name: false - - step_type: assert - description: 2. 点击下拉框显示12个百分比选项:10%、25%、50%、75%、100%、125%、150%、175%、200%、300%、400%、500%;显示效果与设计图一致 - needs_accessible_name: false -- id: case_1581045 - name: ctrl1、ctrl2、ctrl3快捷键切换规则 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: ctrl1、ctrl2、ctrl3快捷键切换规则 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 调整文档百分比大小,按ctrl1查看 - needs_accessible_name: false - - step_type: assert - description: 2. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl1查看 - needs_accessible_name: false - - step_type: assert - description: 3. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl2或适应高度菜单查看 - needs_accessible_name: false - - step_type: assert - description: 4. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl3或适应宽度菜单查看 - needs_accessible_name: false - - step_type: action - description: 5. 分别按ctrl1、ctrl2、ctrl3 - needs_accessible_name: false - - step_type: assert - description: 1. 文档显示为100%大小 - needs_accessible_name: false - - step_type: assert - description: 2. 文档显示为100%大小,双页显示/左旋转/右旋转状态不会变化 - needs_accessible_name: false - - step_type: assert - description: 3. 文档高度全部显示在当前页面,双页显示/左旋转/右旋转状态不会变化 - needs_accessible_name: false - - step_type: assert - description: 4. 文档宽度全部显示在当前页面,双页显示/左旋转/右旋转状态不会变化 - needs_accessible_name: false - - step_type: assert - description: 5. 文档在实际大小、适应高度、适应宽度菜状态之间正常切换 - needs_accessible_name: false -- id: case_1581043 - name: '[021]点击百分比图标中+、-按钮' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[021]点击百分比图标中+、-按钮' - status: active - reason: '' - steps: - - step_type: action - description: 1. 百分比与比例选择列表中不匹配(大多数情况),点击+、-按钮 - needs_accessible_name: false - - step_type: action - description: 2. 百分比与比例选择列表中匹配(少部分情况),点击+、-按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 缩放比例调整为列表中最靠近该比例的比例选项进行调整 - needs_accessible_name: false - - step_type: assert - description: 2. 缩放比例调整为列表中相邻比例选项进行调整 - needs_accessible_name: false -- id: case_1581041 - name: 取消适合宽度的方法 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 取消适合宽度的方法 - status: active - reason: '' - steps: - - step_type: action - description: 1. 文档已调整为适合宽度状态,选择适合高度或按快捷键Ctrl2 - needs_accessible_name: false - - step_type: action - description: 2. 文档已调整为适合宽度状态,在工具栏缩放比例图标中选择一个比例 - needs_accessible_name: false - - step_type: action - description: 3. 文档已调整为适合宽度状态,在工具栏缩放比例图标中手动编辑一个比例 - needs_accessible_name: false - - step_type: action - description: 4. 文档已调整为适合宽度状态,按快捷键Ctrl1 - needs_accessible_name: false - - step_type: assert - description: 1. 进入适合高度状态,适合宽度被取消勾选,文档百分比显示正确 - needs_accessible_name: false - - step_type: assert - description: 2. 文档显示选择的比例,适合宽度取消勾选 - needs_accessible_name: false - - step_type: assert - description: 3. 文档显示编辑的比例,适合宽度取消勾选 - needs_accessible_name: false - - step_type: assert - description: 4. 文档恢复默认大小,适合宽度取消勾选 - needs_accessible_name: false -- id: case_1581039 - name: 取消适合高度的方法 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 取消适合高度的方法 - status: active - reason: '' - steps: - - step_type: action - description: 1. 文档已调整为适合高度状态,选择适合宽度或按快捷键Ctrl3 - needs_accessible_name: false - - step_type: action - description: 2. 文档已调整为适合高度状态,在工具栏缩放比例图标中选择一个比例 - needs_accessible_name: false - - step_type: action - description: 3. 文档已调整为适合高度状态,在工具栏缩放比例图标中手动编辑一个比例 - needs_accessible_name: false - - step_type: action - description: 4. 文档已调整为适合高度状态,按快捷键Ctrl1 - needs_accessible_name: false - - step_type: assert - description: 1. 进入适合宽度状态,适合高度被勾选 - needs_accessible_name: false - - step_type: assert - description: 2. 文档显示选择的比例,适合高度取消勾选 - needs_accessible_name: false - - step_type: assert - description: 3. 文档显示编辑的比例,适合高度取消勾选 - needs_accessible_name: false - - step_type: assert - description: 4. 文档恢复默认大小,适合高度取消勾选 - needs_accessible_name: false -- id: case_1581037 - name: '[022]窗口中显示当前页(不显示上下页)时,点击右键菜单选项' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: '[022]窗口中显示当前页(不显示上下页)时,点击右键菜单选项' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 分别点击右键菜单中添加书签,添加注释,第一页,上一页,下一页,最后一页菜单,查看是否正确跳转 - needs_accessible_name: false - - step_type: assert - description: 1. 页面正确跳转 - needs_accessible_name: false -- id: case_1581035 - name: 关闭再打开文档记住所在页数和左边栏状态 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 关闭再打开文档记住所在页数和左边栏状态 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开一份PDF文档,未展开左边栏,关闭应用再打开 - needs_accessible_name: false - - step_type: action - description: 2. 打开一份PDF文档,展开左边栏,关闭应用再打开 - needs_accessible_name: false - - step_type: action - description: 3. 打开一份PDF文档,浏览文档,如当前页数为:5,关闭应用再打开 - needs_accessible_name: false - - step_type: assert - description: 1. 左边栏保持隐藏状态 - needs_accessible_name: false - - step_type: assert - description: 2. 左边栏保持展开状态 - needs_accessible_name: false - - step_type: assert - description: 3. 页面仍停留在页数5 - needs_accessible_name: false -- id: case_1581033 - name: 关闭再打开文档记住百分比和视图调整状态 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 关闭再打开文档记住百分比和视图调整状态 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 窗口中只有一个标签页,分别点击调整百分比/双页视图/适应宽度/适应高度/左旋转/右旋转,关闭应用再进入查看 - needs_accessible_name: false - - step_type: assert - description: 2. 窗口中有多个标签页,分别点击调整百分比/双页视图/适应宽度/适应高度/左旋转/右旋转,关闭应用再进入查看 - needs_accessible_name: false - - step_type: assert - description: 3. 窗口中只有一个标签页,分别点击调整百分比/双页视图/适合宽度/适合高度/左旋转/右旋转,关闭标签页,不关闭应用,再次打开文档查看 - needs_accessible_name: false - - step_type: assert - description: 4. 窗口中有多标签页,分别点击调整百分比/双页视图/适合宽度/适合高度/左旋转/右旋转,关闭标签页,不关闭应用,再次打开文档查看 - needs_accessible_name: false - - step_type: assert - description: 1. 保持退出之前的状态 - needs_accessible_name: false - - step_type: assert - description: 2. 保持退出之前的状态 - needs_accessible_name: false - - step_type: assert - description: 3. 保持退出之前的状态 - needs_accessible_name: false - - step_type: assert - description: 4. 保持退出之前的状态 - needs_accessible_name: false -- id: case_1581031 - name: 视图调整菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 视图调整菜单 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 文档单页显示时,改变工具栏百分比大小,查看文档内容变化 - needs_accessible_name: false - - step_type: assert - description: 2. 文档单页显示时,使用Ctrl+滚轮或Ctrl++/Ctrl--改变文档大小,查看工具栏百分比数值变化 - needs_accessible_name: false - - step_type: assert - description: 3. 文档双页显示时,改变工具栏百分比大小,查看文档内容变化 - needs_accessible_name: false - - step_type: assert - description: 4. 文档双页显示时,使用Ctrl+滚轮或Ctrl++/Ctrl--改变文档大小,查看工具栏百分比数值变化 - needs_accessible_name: false - - step_type: assert - description: 1. 文档内容大小同步变化 - needs_accessible_name: false - - step_type: assert - description: 2. 工具栏百分比数值同步变化 - needs_accessible_name: false - - step_type: assert - description: 3. 文档内容大小同步变化 - needs_accessible_name: false - - step_type: assert - description: 4. 工具栏百分比数值同步变化 - needs_accessible_name: false -- id: case_1581029 - name: 视图调整菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 视图调整菜单 - status: active - reason: '' - steps: - - step_type: action - description: 1. 默认文档比例进入双页显示,再切换大小窗口和窗口比例 - needs_accessible_name: false - - step_type: action - description: 2. 调整适合宽度,再切换大小窗口和窗口比例 - needs_accessible_name: false - - step_type: action - description: 3. 调整适合高度,再切换大小窗口和窗口比例 - needs_accessible_name: false - - step_type: action - description: 4. 左旋转,再切换大小窗口和窗口比例 - needs_accessible_name: false - - step_type: action - description: 5. 右旋转,再切换大小窗口和窗口比例 - needs_accessible_name: false - - step_type: assert - description: 1. 保持双页显示,文档百分比显示正常,不会出现闪退等异常 - needs_accessible_name: false - - step_type: assert - description: 2. 保持适合宽度,文档百分比显示正常,不会出现闪退等异常 - needs_accessible_name: false - - step_type: assert - description: 3. 保持适合高度,文档百分比显示正常,不会出现闪退等异常 - needs_accessible_name: false - - step_type: assert - description: 4. 保持左旋转,文档百分比显示正常,不会出现闪退等异常 - needs_accessible_name: false - - step_type: assert - description: 5. 保持右旋转,文档百分比显示正常,不会出现闪退等异常 - needs_accessible_name: false -- id: case_1581027 - name: 视图调整菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 视图调整菜单 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选择任意百分比(如:35%),再切换窗口大小 - needs_accessible_name: false - - step_type: action - description: 2. 点击适合宽度,再切换窗口大小 - needs_accessible_name: false - - step_type: action - description: 3. 点击适合高度,再切换窗口大小 - needs_accessible_name: false - - step_type: action - description: 4. 选择任意百分比(如:35%),左旋转,且未选择适合高度/适合宽度,再切换窗口大小 - needs_accessible_name: false - - step_type: action - description: 5. 选择任意百分比(如:35%),右旋转,且未选择适合高度/适合宽度,再切换窗口大小 - needs_accessible_name: false - - step_type: action - description: 6. 选择任意百分比(如:35%),左旋转,且选择适合高度/适合宽度,再切换窗口大小 - needs_accessible_name: false - - step_type: action - description: 7. 选择任意百分比(如:35%),右旋转,且选择适合高度/适合宽度,再切换窗口大小 - needs_accessible_name: false - - step_type: assert - description: 1. 百分比大小不会改变,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 2. 保持适合宽度,文档百分比相应改变,不会出现闪退等异常 - needs_accessible_name: false - - step_type: assert - description: 3. 保持适合高度,文档百分比相应改变,不会出现闪退等异常 - needs_accessible_name: false - - step_type: assert - description: 4. 百分比大小不会改变,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 5. 百分比大小不会改变,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 6. 保持适合高/宽度,文档百分比相应改变,不会出现闪退等异常 - needs_accessible_name: false - - step_type: assert - description: 7. 保持适合高/宽度,文档百分比相应改变,不会出现闪退等异常 - needs_accessible_name: false -- id: case_1581025 - name: 视图调整菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 视图调整菜单 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 首次打开文档,查看文档默认显示效果 - needs_accessible_name: false - - step_type: action - description: 2. 点击双页显示 - needs_accessible_name: false - - step_type: action - description: 3. 点击适合宽度 - needs_accessible_name: false - - step_type: action - description: 4. 点击适合高度 - needs_accessible_name: false - - step_type: action - description: 5. 点击左旋转 - needs_accessible_name: false - - step_type: action - description: 6. 点击右旋转 - needs_accessible_name: false - - step_type: assert - description: 1. 默认为单页,适合页面 - needs_accessible_name: false - - step_type: assert - description: 2. 进入双页显示模式 - needs_accessible_name: false - - step_type: assert - description: 3. 页面宽度在视窗内全部显示 - needs_accessible_name: false - - step_type: assert - description: 4. 页面高度在视窗内全部显示 - needs_accessible_name: false - - step_type: assert - description: 5. 仅当前页面正常进行左旋转,左边栏和工具栏不会翻转,旋转效果顺畅 - needs_accessible_name: false - - step_type: assert - description: 6. 仅当前页面正常进行右旋转,左边栏和工具栏不会翻转,旋转效果顺畅 - needs_accessible_name: false -- id: case_1581023 - name: 文档缩略图显示内容 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/缩略图(#114161) - description: 文档缩略图显示内容 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,查看文档缩略图默认显示内容 - needs_accessible_name: false - - step_type: assert - description: 2. 文档中添加高亮、书签、注释,查看左边栏文档缩略图中是否显示 - needs_accessible_name: false - - step_type: assert - description: 3. 删除高亮、书签、注释,查看左边栏文档缩略图中是否显示 - needs_accessible_name: false - - step_type: assert - description: 1. 显示所有页面缩略图 - needs_accessible_name: false - - step_type: assert - description: 2. 文档缩略图中正常显示高亮、书签图标、注释图标 - needs_accessible_name: false - - step_type: assert - description: 3. 删除的高亮、书签图标、注释图标,文档缩略图也会删除 - needs_accessible_name: false -- id: case_1581021 - name: 点击左边栏底部的缩略图图标 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/缩略图(#114161) - description: 点击左边栏底部的缩略图图标 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击左边栏任意一个文档缩略图标,查看右侧文档是否跳转到相应页面 - needs_accessible_name: false - - step_type: assert - description: 2. 左边栏页面超过一页时,滑动鼠标中间滑轮,查看页面是否正常滑动显示 - needs_accessible_name: false - - step_type: assert - description: 1. 右侧文档是否跳转到相应页面 - needs_accessible_name: false - - step_type: assert - description: 2. 页面是否正常滑动显示 - needs_accessible_name: false -- id: case_1581019 - name: 缩略图标 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/缩略图(#114161) - description: 缩略图标 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击顶端工具栏中缩略图标,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 2. 分别点击目录图标、书签图标和注释图标,查看界面显示 - needs_accessible_name: false - - step_type: action - description: 3. 再次点击顶端工具栏中缩略图标 - needs_accessible_name: false - - step_type: assert - description: 1. 左边栏底部显示四个图标:缩略图图标、目录图标、书签图标和注释图标 - needs_accessible_name: false - - step_type: assert - description: 2. 左边栏显示相应缩略图页面,页面显示正常 - needs_accessible_name: false - - step_type: assert - description: 3. 会取消高亮,隐藏左边栏和缩略图内容 - needs_accessible_name: false -- id: case_1581017 - name: 已添加PDF/DOCX文档界面布局显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 已添加PDF/DOCX文档界面布局显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 已添加PDF/DOCX文档,查看顶部工具栏的显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击菜单键,查看包含的菜单项 - needs_accessible_name: false - - step_type: assert - description: 3. 查看文档区域显示 - needs_accessible_name: false - - step_type: assert - description: 4. 展开左边栏,查看底部图标 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 包含的菜单有:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、工具、搜索、打印、主题、帮助、关于、退出 - needs_accessible_name: false - - step_type: assert - description: 3. 左边栏缩略图默认收起,右侧文档首次打开默认显示第一页 - needs_accessible_name: false - - step_type: assert - description: 4. 显示缩略图图标、目录图标、书签图标、注释图标,显示无异常 - needs_accessible_name: false -- id: case_1581015 - name: '[023]未打开文档界面显示' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: '[023]未打开文档界面显示' - status: active - reason: '' - steps: - - step_type: action - description: 1. 未添加文档界面,点击工具栏左侧图标 - needs_accessible_name: false - - step_type: action - description: 2. 未添加文档界面,点击菜单图标 - needs_accessible_name: false - - step_type: action - description: 3. 未添加文档界面,分别点击最小化、还原、关闭图标 - needs_accessible_name: false - - step_type: assert - description: 1. 缩略图图标、百分比输入框图标均置灰显示,点击无作用 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出菜单弹框,显示菜单:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、选择工具、搜索、打印、主题、帮助、关于、退出。其中仅新窗口、新标签页、主题、帮助、关于、退出菜单高亮显示可以点击进入,其余菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 3. 最小化、还原、关闭功能正常 - needs_accessible_name: false -- id: case_1581013 - name: '[024]未打开文档界面显示' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: '[024]未打开文档界面显示' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 查看应用的图标和名称是否正确 - needs_accessible_name: false - - step_type: assert - description: 2. 打开应用,未添加文档界面,查看左上角logo显示是否正确 - needs_accessible_name: false - - step_type: assert - description: 3. 打开应用,未添加文档界面,查看文档区域显示 - needs_accessible_name: false - - step_type: assert - description: 1. 应用的图标和名称显示正确 - needs_accessible_name: false - - step_type: assert - description: 2. 显示正确 - needs_accessible_name: false - - step_type: assert - description: 3. 显示:“拖拽文件到此 支持格式:PDF,DJVU,DOCX””提示语和“选择文件”按钮 - needs_accessible_name: false -- id: case_1581011 - name: 文档翻页 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 文档翻页 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,鼠标不点击,任意移动,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 2. 点击工具栏任意菜单(除去百分比菜单)后,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 3. 点击百分比或页数输入框后,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 4. 展开左边栏,鼠标点击左边栏区域后任意移动,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 5. 鼠标点击右侧文档区域后任意移动,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 6. 鼠标点击窗口外桌面区域,,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: assert - description: 1. 焦点默认在文档中,文档正常逐行翻页/逐页翻页 - needs_accessible_name: false - - step_type: assert - description: 2. 焦点仍然默认在文档中,文档正常逐行翻页/逐页翻页 - needs_accessible_name: false - - step_type: assert - description: 3. 焦点在输入框,文档不会进行翻页 - needs_accessible_name: false - - step_type: assert - description: 4. 焦点在左侧,缩略图进行翻页 - needs_accessible_name: false - - step_type: assert - description: 5. 焦点在右侧,文档进行翻页 - needs_accessible_name: false - - step_type: assert - description: 6. 焦点在桌面中,选中桌面应用 - needs_accessible_name: false -- id: case_1581009 - name: 焦点定位与书签/注释缩略图的删除 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 焦点定位与书签/注释缩略图的删除 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中一个书签/注释缩略图,鼠标任意移动后,按键盘delete键 - needs_accessible_name: false - - step_type: action - description: 2. 选中一个书签/注释缩略图,鼠标点击右侧文档区域后,按键盘delete键 - needs_accessible_name: false - - step_type: action - description: 3. 选中一个书签/注释缩略图,点击百分比或页数输入框,按键盘delete键 - needs_accessible_name: false - - step_type: assert - description: 1. 正常删除书签/注释缩略图 - needs_accessible_name: false - - step_type: assert - description: 2. 无法删除签/注释缩略图 - needs_accessible_name: false - - step_type: assert - description: 3. 无法删除签/注释缩略图 - needs_accessible_name: false -- id: case_1581007 - name: '[025]多次保存' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: '[025]多次保存' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 编辑文档,点击保存或按Ctrl+S,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 不关闭文档,再次编辑文档,点击保存或按Ctrl+S,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 正常保存 - needs_accessible_name: false - - step_type: assert - description: 2. 正常保存 - needs_accessible_name: false -- id: case_1581003 - name: 打开大量窗口 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/压力(#114171) - description: 打开大量窗口 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开大量窗口,查看是否卡顿 - needs_accessible_name: false - - step_type: assert - description: 2. 打开20个窗口,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 最大限制打开20个窗口,无卡顿 - needs_accessible_name: false - - step_type: assert - description: 2. 窗口错开显示。任务栏和桌面打开窗口的数量正确 - needs_accessible_name: false -- id: case_1580999 - name: 产生大量搜索结果无卡顿 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/压力(#114171) - description: 产生大量搜索结果无卡顿 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 产生大量搜索结果,查看应用状态 - needs_accessible_name: false - - step_type: assert - description: 1. 显示正常,无卡顿 - needs_accessible_name: false -- id: case_1580997 - name: 批量添加注释 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/压力(#114171) - description: 批量添加注释 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 添加多个图标注释/高亮注释(100个及以上),查看 - needs_accessible_name: false - - step_type: assert - description: 2. 添加完成后,右击注释目录,选择“删除所有”,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 显示正常无卡顿 - needs_accessible_name: false - - step_type: assert - description: 2. 正常删除,左边栏和右侧文档中的注释均清空 - needs_accessible_name: false -- id: case_1580995 - name: 多平台测试 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/性能(#114169) - description: 多平台测试 - status: active - reason: '' - steps: - - step_type: action - description: 1. 分别在兆芯、龙芯、ARM平台测试 - needs_accessible_name: false - - step_type: assert - description: 1. 功能正常 - needs_accessible_name: false -- id: case_1580993 - name: 宽高度不一致的文档显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 宽高度不一致的文档显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 点击适合高度/适合宽度/调整百分比,查看 - needs_accessible_name: false - - step_type: action - description: 2. 添加书签和注释 - needs_accessible_name: false - - step_type: assert - description: 1. 界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 2. 显示正常 - needs_accessible_name: false -- id: case_1580989 - name: 文档拖拽后各功能正常 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 文档拖拽后各功能正常 - status: active - reason: '' - steps: - - step_type: action - description: 1. 不同窗口间文档拖拽 - needs_accessible_name: false - - step_type: action - description: 2. 窗口中拖拽添加的文档,进行视图调整操作:双页显示、适应高度、适应宽度、左旋转、右旋转 - needs_accessible_name: false - - step_type: action - description: 3. 窗口中拖拽添加的文档,添加书签、高亮、注释 - needs_accessible_name: false - - step_type: action - description: 4. 窗口中拖拽添加的文档,进行翻页操作 - needs_accessible_name: false - - step_type: action - description: 5. 窗口中拖拽添加的文档,选择选择工具和手形工具拖拽文档 - needs_accessible_name: false - - step_type: action - description: 6. 窗口中拖拽添加的文档,点击菜单中选项:新窗口、新标签页、保存、另存为、打印、幻灯片放映、放大镜、文档信息、在文件管理器中显示、主题、帮助、关于、退出 - needs_accessible_name: false - - step_type: assert - description: 1. 正常拖拽 - needs_accessible_name: false - - step_type: assert - description: 2. 功能正常 - needs_accessible_name: false - - step_type: assert - description: 3. 功能正常 - needs_accessible_name: false - - step_type: assert - description: 4. 功能正常 - needs_accessible_name: false - - step_type: assert - description: 5. 功能正常 - needs_accessible_name: false - - step_type: assert - description: 6. 功能正常 - needs_accessible_name: false -- id: case_1580987 - name: 已添加文档界面菜单显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 已添加文档界面菜单显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开PDF文档,点击百分比输入框,查看弹出框中的菜单显示 - needs_accessible_name: false - - step_type: assert - description: 2. 在右侧文档区域,未选中文本直接点击鼠标右键,查看右键菜单显示 - needs_accessible_name: false - - step_type: assert - description: 1. 依次显示菜单:双页显示、默认大小、适合页面、适应高度、适应宽度;10%、25%、50%、75%、100%、125%、150%、175%、200%、300%、400%、500% - needs_accessible_name: false - - step_type: assert - description: 2. 依次显示菜单:搜索,添加书签,添加注释,全屏,幻灯片放映,第一页,前一页,后一页,最后一页;左旋转,右旋转,打印,文档信息;不可操作时,菜单置灰显示 - needs_accessible_name: false -- id: case_1580985 - name: 删除所有书签 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 删除所有书签 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,右击任意一个书签目录,查看菜单显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击“删除所有书签”菜单,查看弹出的提示 - needs_accessible_name: false - - step_type: action - description: 3. 点击提示框中的取消 - needs_accessible_name: false - - step_type: action - description: 4. 点击提示框中的确定 - needs_accessible_name: false - - step_type: action - description: 5. 弹框弹出时,点击应用中其他菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 显示“删除书签”和“删除所有书签”菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出提示:您确定要删除所有书签吗? - needs_accessible_name: false - - step_type: assert - description: 3. 弹框关闭,所有书签均不会被被删除 - needs_accessible_name: false - - step_type: assert - description: 4. 弹框关闭,所有书签被删除 - needs_accessible_name: false - - step_type: assert - description: 5. 其他菜单均无法被点击 - needs_accessible_name: false -- id: case_1580983 - name: 删除所有注释 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 删除所有注释 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,添加一个书签,右击底部注释目录图标,查看菜单显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击“删除所有注释”菜单,查看弹出的提示 - needs_accessible_name: false - - step_type: action - description: 3. 点击提示框中的取消 - needs_accessible_name: false - - step_type: action - description: 4. 点击提示框中的确定 - needs_accessible_name: false - - step_type: action - description: 5. 弹框弹出时,点击应用中其他菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 显示“删除注释”和“删除所有注释”菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出提示:您确定要删除所有注释吗? - needs_accessible_name: false - - step_type: assert - description: 3. 弹框关闭,所有注释均不会被删除 - needs_accessible_name: false - - step_type: assert - description: 4. 弹框关闭,所有注释被删除 - needs_accessible_name: false - - step_type: assert - description: 5. 其他菜单点击均无作用 - needs_accessible_name: false -- id: case_1580981 - name: PDF文档中批量添加书签 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/压力(#114171) - description: PDF文档中批量添加书签 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开PDF文档,添加100个书签 - needs_accessible_name: false - - step_type: action - description: 2. 右击任意一个书签目录,点击“删除所有”菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 添加成功 - needs_accessible_name: false - - step_type: assert - description: 2. 正常删除,左边栏和右侧文档书签均清空删除 - needs_accessible_name: false -- id: case_1580979 - name: 不同视图下进入全屏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 不同视图下进入全屏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 隐藏侧边栏时,进入全屏 - needs_accessible_name: false - - step_type: action - description: 2. 展开侧边栏时,进入全屏 - needs_accessible_name: false - - step_type: assert - description: 1. 侧边栏和标题栏自动隐藏 - needs_accessible_name: false - - step_type: assert - description: 2. 侧边栏和标题栏自动隐藏 - needs_accessible_name: false -- id: case_1580977 - name: '[038]全屏显示后1秒内呼唤/隐藏出工具栏' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[038]全屏显示后1秒内呼唤/隐藏出工具栏' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏,鼠标移到窗口顶端,查看是否在1秒内呼唤出工具栏; - needs_accessible_name: false - - step_type: assert - description: 2. 鼠标移出标题栏区域,查看是否在1秒内隐藏出工具栏; - needs_accessible_name: false - - step_type: assert - description: 1. 1秒内可以呼唤出工具栏; - needs_accessible_name: false - - step_type: assert - description: 2. 1秒内自动隐藏工具栏; - needs_accessible_name: false -- id: case_1580975 - name: 全屏前打开了左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 全屏前打开了左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 全屏前打开了左侧栏再进入全屏,鼠标移动到窗口侧边 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移出侧边栏区域 - needs_accessible_name: false - - step_type: assert - description: 1. 1秒钟呼唤出侧边栏 - needs_accessible_name: false - - step_type: assert - description: 2. 1秒钟自动隐藏侧边栏 - needs_accessible_name: false -- id: case_1580973 - name: 全屏前隐藏了左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 全屏前隐藏了左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 全屏前隐藏了左侧栏再进入全屏,鼠标移动到窗口侧边 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移出侧边栏区域 - needs_accessible_name: false - - step_type: assert - description: 1. 1秒内呼唤出侧边栏; - needs_accessible_name: false - - step_type: assert - description: 2. 1秒内自动隐藏侧边栏 - needs_accessible_name: false -- id: case_1580971 - name: 全屏后点击缩略图图标 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 全屏后点击缩略图图标 - status: active - reason: '' - steps: - - step_type: action - description: 1. 全屏后唤出工具栏,未唤出侧边栏时,点击缩略图图标 - needs_accessible_name: false - - step_type: action - description: 2. 全屏后唤出工具栏和侧边栏时,点击缩略图图标 - needs_accessible_name: false - - step_type: assert - description: 1. 缩略图图标高亮显示,鼠标移动到左侧栏不会隐藏左侧栏 - needs_accessible_name: false - - step_type: assert - description: 2. 缩略图图标高亮显示,鼠标移动到左侧栏不会隐藏左侧栏 - needs_accessible_name: false -- id: case_1580965 - name: 撤销更改(68M文档)响应时间 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/性能(#114169) - description: 撤销更改(68M文档)响应时间 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开68M文档,编辑注释内容,按Ctrl+Z撤销更改 - needs_accessible_name: false - - step_type: assert - description: 1. 撤销完成的响应时间<2秒 - needs_accessible_name: false -- id: case_1580959 - name: 编辑图标注释后左击其他区域 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 编辑图标注释后左击其他区域 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 鼠标左键单击注释图标,查看显示 - needs_accessible_name: false - - step_type: action - description: 2. 编辑注释内容 - needs_accessible_name: false - - step_type: assert - description: 3. 鼠标左击其他区域(非注释图标和注释框),查看 - needs_accessible_name: false - - step_type: assert - description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常修改 - needs_accessible_name: false - - step_type: assert - description: 3. 注释框消失,注释内容编辑成功,注释图标选中状态被取消 - needs_accessible_name: false -- id: case_1580957 - name: 编辑图标注释后右击其他区域 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 编辑图标注释后右击其他区域 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 左击注释图标,查看 - needs_accessible_name: false - - step_type: action - description: 2. 编辑注释内容 - needs_accessible_name: false - - step_type: assert - description: 3. 鼠标右击其他区域(非注释图标和注释框),查看 - needs_accessible_name: false - - step_type: assert - description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常修改 - needs_accessible_name: false - - step_type: assert - description: 3. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 - needs_accessible_name: false -- id: case_1580955 - name: 未选中图标注释进行移动 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 未选中图标注释进行移动 - status: active - reason: '' - steps: - - step_type: action - description: 1. 非选中图标状态,鼠标左键长按注释图标移动 - needs_accessible_name: false - - step_type: action - description: 2. 移动到目标区域,松开鼠标 - needs_accessible_name: false - - step_type: action - description: 3. 鼠标左键点击其他区域(非注释图标和注释框) - needs_accessible_name: false - - step_type: assert - description: 1. 注释图标变成选中状态,可以移动 - needs_accessible_name: false - - step_type: assert - description: 2. 松开鼠标完成移动,注释图标显示为选中状态 - needs_accessible_name: false - - step_type: assert - description: 3. 取消注释图标选中状态; - needs_accessible_name: false -- id: case_1580953 - name: 选中图标注释进行移动 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 选中图标注释进行移动 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中图标状态,鼠标左键长按注释图标移动 - needs_accessible_name: false - - step_type: action - description: 2. 移动到目标区域,松开鼠标 - needs_accessible_name: false - - step_type: action - description: 3. 鼠标左键点击其他区域(非注释图标和注释框) - needs_accessible_name: false - - step_type: assert - description: 1. 注释图标保持选中状态,可以移动 - needs_accessible_name: false - - step_type: assert - description: 2. 松开鼠标完成移动,注释图标显示为选中状态 - needs_accessible_name: false - - step_type: assert - description: 3. 注释图标选中状态吧被取消 - needs_accessible_name: false -- id: case_1580951 - name: 鼠标焦点在注释图标区域外无法移动注释图标 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 鼠标焦点在注释图标区域外无法移动注释图标 - status: active - reason: '' - steps: - - step_type: action - description: 1. 鼠标焦点在注释图标区域外,进行移动 - needs_accessible_name: false - - step_type: assert - description: 1. 无法移动注释图标 - needs_accessible_name: false -- id: case_1580949 - name: 注释图标无法移至其他页面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 注释图标无法移至其他页面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 按住鼠标左键移动注释图标至其他页面 - needs_accessible_name: false - - step_type: assert - description: 1. 无法移动至其他页面,仅支持在当前页移动 - needs_accessible_name: false -- id: case_1580947 - name: 左键单击取消右键菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 左键单击取消右键菜单 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 右击注释图标,查看 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标左键点击其他区域 - needs_accessible_name: false - - step_type: action - description: 3. 右击注释图标弹出右键菜单,鼠标右键点击其他区域 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 右键菜单框消失 - needs_accessible_name: false - - step_type: assert - description: 3. 右键菜单框消失 - needs_accessible_name: false -- id: case_1580945 - name: '[026]进入全屏' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[026]进入全屏' - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,不选中文本右击,弹出右键菜单,点击全屏菜单 - needs_accessible_name: false - - step_type: action - description: 2. 打开文档,按F11键 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 1&2.进入全屏界面,隐藏“标题栏”和“侧边栏” - needs_accessible_name: false -- id: case_1580943 - name: '[039]进入全屏呼唤出工具栏' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[039]进入全屏呼唤出工具栏' - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,鼠标移到窗口顶端 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移出标题栏区域 - needs_accessible_name: false - - step_type: assert - description: 1. 1秒钟内呼唤出工具栏,当存在两个标签页时,工具栏和标签栏同时被唤出 - needs_accessible_name: false - - step_type: assert - description: 2. 1秒钟内自动隐藏工具栏和标签栏; - needs_accessible_name: false -- id: case_1580941 - name: '[040]进入全屏呼唤出侧边栏' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[040]进入全屏呼唤出侧边栏' - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,展开侧边栏,点击全屏菜单 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移动到窗口侧边 - needs_accessible_name: false - - step_type: action - description: 3. 鼠标移出侧边栏区域 - needs_accessible_name: false - - step_type: assert - description: 1. 进入全屏界面,侧边栏隐藏 - needs_accessible_name: false - - step_type: assert - description: 2. 1秒内呼唤出侧边栏,“侧边栏”按钮为非选中状态,底部选中的按钮与全屏前一致 - needs_accessible_name: false - - step_type: assert - description: 3. 自动隐藏侧边栏 - needs_accessible_name: false -- id: case_1580939 - name: '[041]仅唤出工具栏' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[041]仅唤出工具栏' - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏显示,唤出工具栏 - needs_accessible_name: false - - step_type: assert - description: 2. 点击工具栏中的“侧边栏”按钮,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 3. 再次点击“侧边栏”按钮,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 工具栏正常唤出 - needs_accessible_name: false - - step_type: assert - description: 2. “侧边栏”按钮高亮显示,左侧栏固定显示,鼠标移出左侧栏不会隐藏左侧栏 - needs_accessible_name: false - - step_type: assert - description: 3. 左侧栏被隐藏 - needs_accessible_name: false -- id: case_1580937 - name: '[042]侧边栏和工具栏同时唤出' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[042]侧边栏和工具栏同时唤出' - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏显示,先唤出侧边栏,再将鼠标移至左侧栏顶端区域 - needs_accessible_name: false - - step_type: action - description: 2. 点击工具栏中的“侧边栏”按钮 - needs_accessible_name: false - - step_type: assert - description: 3. 再次点击“侧边栏”按钮,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 侧边栏和工具栏同时唤出 - needs_accessible_name: false - - step_type: assert - description: 2. “侧边栏”按钮高亮显示,左侧栏固定显示,鼠标移出左侧栏不会隐藏左侧栏 - needs_accessible_name: false - - step_type: assert - description: 3. 左侧栏被隐藏 - needs_accessible_name: false -- id: case_1580935 - name: 全屏中增加或减少标签页 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 全屏中增加或减少标签页 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏,打开多个标签页,鼠标移至页面顶端查看 - needs_accessible_name: false - - step_type: assert - description: 2. 关闭仅剩余一个标签页,鼠标移至页面顶端查看 - needs_accessible_name: false - - step_type: assert - description: 1. 显示工具栏和标签栏 - needs_accessible_name: false - - step_type: assert - description: 2. 仅显示工具栏,标题显示在工具栏中间 - needs_accessible_name: false -- id: case_1580933 - name: 全屏中的右上角菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 全屏中的右上角菜单 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,点击右上角菜单按钮 - needs_accessible_name: false - - step_type: action - description: 2. 进入全屏,点击右上角退出全屏按钮 - needs_accessible_name: false - - step_type: action - description: 3. 进入全屏,点击右上角关闭按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出菜单弹框 - needs_accessible_name: false - - step_type: assert - description: 2. 退出全屏 - needs_accessible_name: false - - step_type: assert - description: 3. 关闭文档 - needs_accessible_name: false -- id: case_1580931 - name: '[027]退出全屏方式' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[027]退出全屏方式' - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,点击工具栏右侧退出全屏菜单 - needs_accessible_name: false - - step_type: action - description: 2. 进入全屏,点击键盘esc按钮 - needs_accessible_name: false - - step_type: action - description: 3. 进入全屏,按快捷键F1 1 - needs_accessible_name: false - - step_type: action - description: 4. 进入全屏,右击文档弹出右键菜单,点击“退出全屏” - needs_accessible_name: false - - step_type: assert - description: 1. 退出全屏 - needs_accessible_name: false - - step_type: assert - description: 2. 退出全屏 - needs_accessible_name: false - - step_type: assert - description: 3. 退出全屏 - needs_accessible_name: false - - step_type: assert - description: 4. 退出全屏 - needs_accessible_name: false -- id: case_1580929 - name: 翻页后退出全屏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 翻页后退出全屏 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏翻页(如:第5页),左侧栏选中第5页文档缩略图,退出全屏查看 - needs_accessible_name: false - - step_type: assert - description: 1. 退出全屏显示后仍显示在第5页 - needs_accessible_name: false -- id: case_1580927 - name: 选中目录后退出全屏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 选中目录后退出全屏 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏选中一个目录,退出全屏查看 - needs_accessible_name: false - - step_type: assert - description: 1. 退出全屏左侧栏仍选中此目录 - needs_accessible_name: false -- id: case_1580925 - name: '[044]添加书签后退出全屏' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[044]添加书签后退出全屏' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏添加书签,退出全屏后查看 - needs_accessible_name: false - - step_type: assert - description: 1. 书签页数和书签个数无变化 - needs_accessible_name: false -- id: case_1580923 - name: '[045]添加注释后退出全屏' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[045]添加注释后退出全屏' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏添加注释,退出全屏后查看 - needs_accessible_name: false - - step_type: assert - description: 1. 注释页数、个数、内容无变化 - needs_accessible_name: false -- id: case_1580921 - name: 选择手型工具后退出全屏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 选择手型工具后退出全屏 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏选择手型工具,退出全屏后查看 - needs_accessible_name: false - - step_type: assert - description: 1. 仍显示手型工具 - needs_accessible_name: false -- id: case_1580919 - name: 弹出搜索结果后退出全屏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 弹出搜索结果后退出全屏 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏搜索并弹出搜索结果,退出全屏查看 - needs_accessible_name: false - - step_type: assert - description: 1. 搜索结果仍显示 - needs_accessible_name: false -- id: case_1580917 - name: 退出全屏后的标题显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 退出全屏后的标题显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 仅只打开一份文档,进入再退出全屏,查看标题栏的显示 - needs_accessible_name: false - - step_type: assert - description: 2. 打开多份文档,进入再退出全屏,查看标题栏的显示 - needs_accessible_name: false - - step_type: assert - description: 1. 标题栏的显示无变化 - needs_accessible_name: false - - step_type: assert - description: 2. 标题栏的显示无变化 - needs_accessible_name: false -- id: case_1580915 - name: 调整视图后退出全屏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 调整视图后退出全屏 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏调整视图(双页显示、适合页面、默认大小、适应宽度、适应高度、每个百分比),退出后查看 - needs_accessible_name: false - - step_type: assert - description: 1. 退出全屏视图状态无变化,百分比数值相应变化 - needs_accessible_name: false -- id: case_1580913 - name: 双页显示后鼠标再移出移入左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 双页显示后鼠标再移出移入左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,未唤出左侧栏,点击双页显示(适应宽度默认勾选) - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移出左侧栏再移入 - needs_accessible_name: false - - step_type: assert - description: 1. 界面正常双页显示 - needs_accessible_name: false - - step_type: assert - description: 2. 保持双页显示和适应宽度状态,百分比值改变 - needs_accessible_name: false -- id: case_1580911 - name: 适应高度后鼠标再移出移入左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 适应高度后鼠标再移出移入左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,未唤出左侧栏,点击适应高度 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移出左侧栏再移入 - needs_accessible_name: false - - step_type: assert - description: 1. 显示为适应高度状态 - needs_accessible_name: false - - step_type: assert - description: 2. 文档保持适应高度状态 - needs_accessible_name: false -- id: case_1580909 - name: 适应宽度后鼠标再移出移入左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 适应宽度后鼠标再移出移入左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,未唤出左侧栏,点击适应宽度 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移出左侧栏再移入 - needs_accessible_name: false - - step_type: assert - description: 1. 显示为适应宽度状态 - needs_accessible_name: false - - step_type: assert - description: 2. 文档保持适应宽度状态,百分比数值不改变 - needs_accessible_name: false -- id: case_1580907 - name: 搜索结果缩略图显示后后鼠标再移出移入左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 搜索结果缩略图显示后后鼠标再移出移入左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,未唤出左侧栏,搜索关键字并弹出搜索结果 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标移出左侧栏再移入 - needs_accessible_name: false - - step_type: assert - description: 1. 搜索结果缩略图显示,关键字黄色高亮显示,选中的关键字为绿色 - needs_accessible_name: false - - step_type: assert - description: 2. 搜索结果无变化 - needs_accessible_name: false -- id: case_1580905 - name: 适合页面后收起再展开左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 适合页面后收起再展开左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适合页面 - needs_accessible_name: false - - step_type: action - description: 2. 收起再展开左侧栏 - needs_accessible_name: false - - step_type: assert - description: 1. 界面显示适合页面状态 - needs_accessible_name: false - - step_type: assert - description: 2. 文档保持适合页面状态 - needs_accessible_name: false -- id: case_1580903 - name: 适应高度后收起再展开左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 适应高度后收起再展开左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适应高度 - needs_accessible_name: false - - step_type: action - description: 2. 收起再展开左侧栏 - needs_accessible_name: false - - step_type: assert - description: 1. 显示为适应高度状态 - needs_accessible_name: false - - step_type: assert - description: 2. 文档保持适应高度状态 - needs_accessible_name: false -- id: case_1580901 - name: 适应宽度后收起再展开左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 适应宽度后收起再展开左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适应宽度 - needs_accessible_name: false - - step_type: action - description: 2. 收起再展开左侧栏 - needs_accessible_name: false - - step_type: assert - description: 1. 显示为适应宽度状态 - needs_accessible_name: false - - step_type: assert - description: 2. 文档保持适应宽度状态,百分比数值相应改变 - needs_accessible_name: false -- id: case_1580899 - name: 搜索结果缩略图显示收起再展开左侧栏 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 搜索结果缩略图显示收起再展开左侧栏 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,搜索关键字,左侧弹出搜索结果 - needs_accessible_name: false - - step_type: action - description: 2. 收起再展开左侧栏 - needs_accessible_name: false - - step_type: assert - description: 1. 搜索结果缩略图显示,关键字黄色高亮显示,选中的关键字为绿色 - needs_accessible_name: false - - step_type: assert - description: 2. 搜索结果无变化 - needs_accessible_name: false -- id: case_1580897 - name: '[028]右键菜单中的全屏与退出全屏菜单' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: '[028]右键菜单中的全屏与退出全屏菜单' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 进入全屏,未选中文本右击,查看右键菜单显示 - needs_accessible_name: false - - step_type: assert - description: 1. 全屏菜单变成“退出全屏” - needs_accessible_name: false -- id: case_1580895 - name: 全屏中菜单功能 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 全屏中菜单功能 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入全屏,点击右键菜单中的第一页菜单 - needs_accessible_name: false - - step_type: action - description: 2. 进入全屏,点击右键菜单中的前一页菜单 - needs_accessible_name: false - - step_type: action - description: 3. 进入全屏,点击右键菜单中的后一页菜单 - needs_accessible_name: false - - step_type: action - description: 4. 进入全屏,点击右键菜单中的最后一页菜单 - needs_accessible_name: false - - step_type: action - description: 5. 进入全屏,点击右键菜单中的保存菜单 - needs_accessible_name: false - - step_type: action - description: 6. 进入全屏,点击右键菜单中的另存为菜单 - needs_accessible_name: false - - step_type: action - description: 7. 进入全屏,点击右键菜单中的打印菜单 - needs_accessible_name: false - - step_type: action - description: 8. 进入全屏,点击右键菜单中的幻灯片放映菜单 - needs_accessible_name: false - - step_type: action - description: 9. 进入全屏,点击右键菜单中的退出菜单 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: '2.' - needs_accessible_name: false - - step_type: assert - description: '3.' - needs_accessible_name: false - - step_type: assert - description: '4.' - needs_accessible_name: false - - step_type: assert - description: '5.' - needs_accessible_name: false - - step_type: assert - description: '6.' - needs_accessible_name: false - - step_type: assert - description: '7.' - needs_accessible_name: false - - step_type: assert - description: '8.' - needs_accessible_name: false - - step_type: assert - description: 9. 1~9.功能正常 - needs_accessible_name: false -- id: case_1580893 - name: 浅色和深色主题下查看右侧和底部进度条显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 浅色和深色主题下查看右侧和底部进度条显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,分别查看右侧和底部进度条显示 - needs_accessible_name: false - - step_type: assert - description: 2. 切换至深色,打开文档,分别查看右侧和底部进度条显示 - needs_accessible_name: false - - step_type: assert - description: 1. 显示清晰,无异常 - needs_accessible_name: false - - step_type: assert - description: 2. 显示清晰,无异常 - needs_accessible_name: false -- id: case_1580891 - name: 搜索完成后按钮置灰,不应该有hover效果 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 搜索完成后按钮置灰,不应该有hover效果 - status: active - reason: '' - steps: - - step_type: action - description: 1. 搜索完成后,鼠标放置在左侧栏底部四个按钮之上 - needs_accessible_name: false - - step_type: assert - description: 1. 按钮置灰,不应该有hover效果 - needs_accessible_name: false -- id: case_1580889 - name: 连续快速打开关闭单页大文档20次 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/压力(#114171) - description: 连续快速打开关闭单页大文档20次 - status: active - reason: '' - steps: - - step_type: action - description: 1. 连续快速打开关闭单页大文档20次 - needs_accessible_name: false - - step_type: assert - description: 1. 正常打开无异常 - needs_accessible_name: false -- id: case_1580885 - name: 选中一段文本,翻页后回到原位置,选中文本不会消失 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 选中一段文本,翻页后回到原位置,选中文本不会消失 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 选中一段文本,翻页后回到原位置查看 - needs_accessible_name: false - - step_type: assert - description: 1. 选中文本不会消失 - needs_accessible_name: false -- id: case_1580883 - name: 菜单高亮效果 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 菜单高亮效果 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中一段文本,右击文本 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标分别放置在任意一个菜单 - needs_accessible_name: false - - step_type: action - description: 3. 右侧主视图区域,右击弹出右键菜单,鼠标放置在任意菜单 - needs_accessible_name: false - - step_type: action - description: 4. 鼠标放置在百分比下拉框菜单任意位置 - needs_accessible_name: false - - step_type: action - description: 5. 点击菜单键,鼠标放置在任意菜单位置 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 正常高亮显示 - needs_accessible_name: false - - step_type: assert - description: 3. 正常高亮显示 - needs_accessible_name: false - - step_type: assert - description: 4. 正常高亮显示 - needs_accessible_name: false - - step_type: assert - description: 5. 正常高亮显示 - needs_accessible_name: false -- id: case_1580881 - name: 快捷键编辑注释内容 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 快捷键编辑注释内容 - status: active - reason: '' - steps: - - step_type: action - description: 1. 弹出注释编辑窗口,输入内容 - needs_accessible_name: false - - step_type: action - description: 2. 按Ctrl+A快捷键 - needs_accessible_name: false - - step_type: action - description: 3. 按Ctrl+C快捷键 - needs_accessible_name: false - - step_type: action - description: 4. 按Ctrl+V快捷键 - needs_accessible_name: false - - step_type: action - description: 5. 按Ctrl+X快捷键 - needs_accessible_name: false - - step_type: action - description: 6. 按Ctrl+Z快捷键 - needs_accessible_name: false - - step_type: action - description: 7. 按Ctrl+S快捷键 - needs_accessible_name: false - - step_type: action - description: 8. 按delete快捷键 - needs_accessible_name: false - - step_type: assert - description: 1. 内容正常显示 - needs_accessible_name: false - - step_type: assert - description: 2. 全选内容 - needs_accessible_name: false - - step_type: assert - description: 3. 复制内容 - needs_accessible_name: false - - step_type: assert - description: 4. 粘贴内容 - needs_accessible_name: false - - step_type: assert - description: 5. 剪切内容 - needs_accessible_name: false - - step_type: assert - description: 6. 撤销操作 - needs_accessible_name: false - - step_type: assert - description: 7. 保存内容 - needs_accessible_name: false - - step_type: assert - description: 8. 删除选中的内容 - needs_accessible_name: false -- id: case_1580879 - name: 首页Tab键切换 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 首页Tab键切换 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档查看器进入首页界面,按tab键查看菜单按钮切换顺序 - needs_accessible_name: false - - step_type: action - description: 2. 按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 3. 主菜单弹出后按enter或空格键和上下方向键 - needs_accessible_name: false - - step_type: action - description: 4. 主菜单弹出后按左右方向键 - needs_accessible_name: false - - step_type: action - description: 5. 主菜单弹出后按esc键交互操作 - needs_accessible_name: false - - step_type: assert - description: 1. 依次选中主菜单、最小化、最大化、选择文件按钮,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选择 - needs_accessible_name: false - - step_type: assert - description: 3. 切换和执行选择 - needs_accessible_name: false - - step_type: assert - description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 - needs_accessible_name: false - - step_type: assert - description: 5. 退出菜单,返回到主菜单按钮的选中 - needs_accessible_name: false -- id: case_1580877 - name: 单个文档未展开左侧栏,Tab键切换 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 单个文档未展开左侧栏,Tab键切换 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开单个文档,未展开左侧栏,按tab键 - needs_accessible_name: false - - step_type: action - description: 2. 按enter或空格键 - needs_accessible_name: false - - step_type: assert - description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选择 - needs_accessible_name: false -- id: case_1580875 - name: 单个文档展开左侧栏,Tab键切换 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 单个文档展开左侧栏,Tab键切换 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开单个文档,展开左侧栏,按tab键 - needs_accessible_name: false - - step_type: action - description: 2. 按enter或空格键 - needs_accessible_name: false - - step_type: assert - description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选择 - needs_accessible_name: false -- id: case_1580873 - name: 多个文档未展开左侧栏,Tab键切换 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 多个文档未展开左侧栏,Tab键切换 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开多个文档,未展开左侧栏,按tab键 - needs_accessible_name: false - - step_type: action - description: 2. 按enter或空格键 - needs_accessible_name: false - - step_type: assert - description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选择 - needs_accessible_name: false -- id: case_1580871 - name: 多个文档展开左侧栏,Tab键切换 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 多个文档展开左侧栏,Tab键切换 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开多个文档,展开左侧栏,按tab键 - needs_accessible_name: false - - step_type: action - description: 2. 按enter或空格键 - needs_accessible_name: false - - step_type: assert - description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选择 - needs_accessible_name: false -- id: case_1580869 - name: 百分比输入框下拉菜单界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 百分比输入框下拉菜单界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. tab键选中百分比输入框的下拉按钮,按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 2. 按上下方向键 - needs_accessible_name: false - - step_type: action - description: 3. 按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 4. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 下拉菜单界面弹出 - needs_accessible_name: false - - step_type: assert - description: 2. 切换选中菜单,选中效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选择 - needs_accessible_name: false - - step_type: assert - description: 4. 退出菜单,返回到百分比输入框的选中 - needs_accessible_name: false -- id: case_1580867 - name: 主菜单下拉界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 主菜单下拉界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. tab键选中主菜单,按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 2. 按上下方向键 - needs_accessible_name: false - - step_type: action - description: 3. 按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 4. 按左右方向键 - needs_accessible_name: false - - step_type: action - description: 5. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 下拉菜单界面弹出 - needs_accessible_name: false - - step_type: assert - description: 2. 切换选中菜单,选中效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选择 - needs_accessible_name: false - - step_type: assert - description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 - needs_accessible_name: false - - step_type: assert - description: 5. 退出菜单,返回到主菜单按钮的选中 - needs_accessible_name: false -- id: case_1580865 - name: 右击主视图界面弹出右键菜单界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 右击主视图界面弹出右键菜单界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 右击主视图界面 - needs_accessible_name: false - - step_type: action - description: 2. 按上下方向键 - needs_accessible_name: false - - step_type: action - description: 3. 按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 4. 按左右方向键 - needs_accessible_name: false - - step_type: action - description: 5. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 切换选中菜单,选中效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选择 - needs_accessible_name: false - - step_type: assert - description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 - needs_accessible_name: false - - step_type: assert - description: 5. 退出菜单,返回到百分比输入框的选中 - needs_accessible_name: false -- id: case_1580863 - name: 左侧栏目录上下切换与删除 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 左侧栏目录上下切换与删除 - status: active - reason: '' - steps: - - step_type: action - description: 1. 文档缩略图界面,按上下方向键或pageup、pagedown - needs_accessible_name: false - - step_type: action - description: 2. 目录界面,按上下方向键或pageup、pagedown - needs_accessible_name: false - - step_type: action - description: 3. 书签目录界面,按上下方向键或pageup、pagedown,delete键 - needs_accessible_name: false - - step_type: action - description: 4. 注释目录界面,按上下方向键或pageup、pagedown,delete键 - needs_accessible_name: false - - step_type: assert - description: 1. 正确切换 - needs_accessible_name: false - - step_type: assert - description: 2. 正确切换 - needs_accessible_name: false - - step_type: assert - description: 3. 正确切换,正常删除 - needs_accessible_name: false - - step_type: assert - description: 4. 正确切换,正常删除 - needs_accessible_name: false -- id: case_1580861 - name: 选中文本按Alt+M - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 选中文本按Alt+M - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中文本,按Alt+M键 - needs_accessible_name: false - - step_type: action - description: 2. 按上下方向键 - needs_accessible_name: false - - step_type: action - description: 3. 按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 4. 按左右方向键 - needs_accessible_name: false - - step_type: action - description: 5. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 切换选中菜单,选中效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选择 - needs_accessible_name: false - - step_type: assert - description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 - needs_accessible_name: false - - step_type: assert - description: 5. 退出菜单,文本仍是选中状态 - needs_accessible_name: false -- id: case_1580859 - name: 选中书签目录按Alt+M - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 选中书签目录按Alt+M - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中一个书签目录,按Alt+M键 - needs_accessible_name: false - - step_type: action - description: 2. 按上下方向键 - needs_accessible_name: false - - step_type: action - description: 3. 按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 4. 按左右方向键 - needs_accessible_name: false - - step_type: action - description: 5. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 切换选中菜单,选中效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选择 - needs_accessible_name: false - - step_type: assert - description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 - needs_accessible_name: false - - step_type: assert - description: 5. 退出菜单,书签目录仍是选中状态 - needs_accessible_name: false -- id: case_1580857 - name: 选中注释目录按Alt+M - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 选中注释目录按Alt+M - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中一个注释目录,按Alt+M键 - needs_accessible_name: false - - step_type: action - description: 2. 按上下方向键 - needs_accessible_name: false - - step_type: action - description: 3. 按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 4. 按左右方向键 - needs_accessible_name: false - - step_type: action - description: 5. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 切换选中菜单,选中效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选择 - needs_accessible_name: false - - step_type: assert - description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 - needs_accessible_name: false - - step_type: assert - description: 5. 退出菜单,注释目录仍是选中状态 - needs_accessible_name: false -- id: case_1580855 - name: 选中输入框内容按Alt+M - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 选中输入框内容按Alt+M - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中输入框内容,按Alt+M键 - needs_accessible_name: false - - step_type: action - description: 2. 按上下方向键 - needs_accessible_name: false - - step_type: action - description: 3. 按enter或空格键 - needs_accessible_name: false - - step_type: action - description: 4. 按左右方向键 - needs_accessible_name: false - - step_type: action - description: 5. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 切换选中菜单,选中效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选择 - needs_accessible_name: false - - step_type: assert - description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 - needs_accessible_name: false - - step_type: assert - description: 5. 退出菜单,注释目录仍是选中状态 - needs_accessible_name: false -- id: case_1580853 - name: 点击“删除全部书签”对话框界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 点击“删除全部书签”对话框界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击“删除全部书签” - needs_accessible_name: false - - step_type: action - description: 2. 对话框界面按tab键切换 - needs_accessible_name: false - - step_type: action - description: 3. 按回车键 - needs_accessible_name: false - - step_type: action - description: 4. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出对话框界面 - needs_accessible_name: false - - step_type: assert - description: 2. 可以在对话框界面循环切换,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选中的按钮 - needs_accessible_name: false - - step_type: assert - description: 4. 关闭对话框,焦点返回至选中的书签目录 - needs_accessible_name: false -- id: case_1580851 - name: 点击“删除全部注释”对话框界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 点击“删除全部注释”对话框界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击“删除全部注释” - needs_accessible_name: false - - step_type: action - description: 2. 对话框界面按tab键切换 - needs_accessible_name: false - - step_type: action - description: 3. 按回车键 - needs_accessible_name: false - - step_type: action - description: 4. 选中任意菜单时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出对话框界面 - needs_accessible_name: false - - step_type: assert - description: 2. 可以在对话框界面循环切换,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选中的按钮 - needs_accessible_name: false - - step_type: assert - description: 4. 关闭对话框,焦点返回至选中的注释目录 - needs_accessible_name: false -- id: case_1580849 - name: 编辑文档后关闭或退出,弹出是否保存对话框 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 编辑文档后关闭或退出,弹出是否保存对话框 - status: active - reason: '' - steps: - - step_type: action - description: 1. 编辑文档后关闭或退出 - needs_accessible_name: false - - step_type: action - description: 2. 对话框界面按tab键切换 - needs_accessible_name: false - - step_type: action - description: 3. 按回车键 - needs_accessible_name: false - - step_type: action - description: 4. 选中任意按钮时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出是否保存对话框 - needs_accessible_name: false - - step_type: assert - description: 2. 可以在对话框界面循环切换,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选中的按钮 - needs_accessible_name: false - - step_type: assert - description: 4. 关闭对话框 - needs_accessible_name: false -- id: case_1580847 - name: 不改变文件名保存替换界面,弹出对话框 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 不改变文件名保存替换界面,弹出对话框 - status: active - reason: '' - steps: - - step_type: action - description: 1. 不改变文件名保存替换 - needs_accessible_name: false - - step_type: action - description: 2. 对话框界面按tab键切换 - needs_accessible_name: false - - step_type: action - description: 3. 按回车键 - needs_accessible_name: false - - step_type: action - description: 4. 选中任意按钮时按esc键 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 可以在对话框界面循环切换,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 3. 执行选中的按钮 - needs_accessible_name: false - - step_type: assert - description: 4. 关闭对话框 - needs_accessible_name: false -- id: case_1580845 - name: 搜索框界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 搜索框界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 搜索框弹出,按tab键切换 - needs_accessible_name: false - - step_type: action - description: 2. focus每个按钮时分别按回车键 - needs_accessible_name: false - - step_type: assert - description: 1. 正常切换,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选中的按钮 - needs_accessible_name: false -- id: case_1580843 - name: 文档信息界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 文档信息界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 文档信息界面弹出,按tab键切换 - needs_accessible_name: false - - step_type: action - description: 2. 按回车键 - needs_accessible_name: false - - step_type: action - description: 3. 选中任意按钮时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 选中关闭按钮,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选中的按钮 - needs_accessible_name: false - - step_type: assert - description: 3. 退出文档信息界面 - needs_accessible_name: false -- id: case_1580841 - name: 在文件管理器显示界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 在文件管理器显示界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在文件管理器显示弹出,按tab键切换 - needs_accessible_name: false - - step_type: action - description: 2. 按回车键 - needs_accessible_name: false - - step_type: assert - description: 1. 循环切换,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选中的按钮 - needs_accessible_name: false -- id: case_1580839 - name: 关于界面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 关于界面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 文档信息界面弹出,按tab键切换 - needs_accessible_name: false - - step_type: action - description: 2. 按回车键 - needs_accessible_name: false - - step_type: action - description: 3. 选中任意按钮时按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 选中关闭按钮,focus效果正确 - needs_accessible_name: false - - step_type: assert - description: 2. 执行选中的按钮 - needs_accessible_name: false - - step_type: assert - description: 3. 退出关于界面 - needs_accessible_name: false -- id: case_1580837 - name: 单指手势单击工具栏菜单按钮 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸板(#114153) - description: 单指手势单击工具栏菜单按钮 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开多份文档,单击工具栏菜单按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 功能正常 - needs_accessible_name: false -- id: case_1580835 - name: 单指手势单击任意缩略图 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸板(#114153) - description: 单指手势单击任意缩略图 - status: active - reason: '' - steps: - - step_type: action - description: 1. 展开左侧栏,单击选择书签、目录、缩略图、注释功能 - needs_accessible_name: false - - step_type: action - description: 2. 展开左侧栏,单击选择任意缩略图 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常选择切换 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常选择切换 - needs_accessible_name: false -- id: case_1580833 - name: 单指手势单击视图方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸板(#114153) - description: 单指手势单击视图方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 单击放大缩小下拉框,选中视图方式 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常选择切换 - needs_accessible_name: false -- id: case_1580831 - name: 单指手势单击增加、切换标签页 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸板(#114153) - description: 单指手势单击增加、切换标签页 - status: active - reason: '' - steps: - - step_type: action - description: 1. 单击+按钮增加标签页 - needs_accessible_name: false - - step_type: action - description: 2. 点击标签页切换显示 - needs_accessible_name: false - - step_type: assert - description: 1. 进入文件管理选择界面 - needs_accessible_name: false - - step_type: assert - description: 2. 可以切换显示 - needs_accessible_name: false -- id: case_1580829 - name: 单指双击 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸板(#114153) - description: 单指双击 - status: active - reason: '' - steps: - - step_type: action - description: 1. 应用工具栏一指双击 - needs_accessible_name: false - - step_type: action - description: 2. 再次双击 - needs_accessible_name: false - - step_type: assert - description: 1. 窗口最大化 - needs_accessible_name: false - - step_type: assert - description: 2. 恢复原来窗口大小 - needs_accessible_name: false -- id: case_1580817 - name: 单指手势单击工具栏菜单按钮 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸屏(#114151) - description: 单指手势单击工具栏菜单按钮 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开多份文档,单击工具栏菜单按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 功能正常 - needs_accessible_name: false -- id: case_1580815 - name: 单指手势单击任意缩略图 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸屏(#114151) - description: 单指手势单击任意缩略图 - status: active - reason: '' - steps: - - step_type: action - description: 1. 展开左侧栏,单击选择书签、目录、缩略图、注释功能 - needs_accessible_name: false - - step_type: action - description: 2. 展开左侧栏,单击选择任意缩略图 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常选择切换 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常选择切换 - needs_accessible_name: false -- id: case_1580813 - name: 单指手势单击视图方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸屏(#114151) - description: 单指手势单击视图方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 单击放大缩小下拉框,选中视图方式 - needs_accessible_name: false - - step_type: assert - description: 1. 可以正常选择切换 - needs_accessible_name: false -- id: case_1580811 - name: 单指手势单击增加、切换标签页 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸屏(#114151) - description: 单指手势单击增加、切换标签页 - status: active - reason: '' - steps: - - step_type: action - description: 1. 单击+按钮增加标签页 - needs_accessible_name: false - - step_type: action - description: 2. 点击标签页切换显示 - needs_accessible_name: false - - step_type: assert - description: 1. 进入文件管理选择界面 - needs_accessible_name: false - - step_type: assert - description: 2. 可以切换显示 - needs_accessible_name: false -- id: case_1580809 - name: 单指双击 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸屏(#114151) - description: 单指双击 - status: active - reason: '' - steps: - - step_type: action - description: 1. 应用工具栏单指双击 - needs_accessible_name: false - - step_type: action - description: 2. 再次双击 - needs_accessible_name: false - - step_type: assert - description: 1. 窗口最大化 - needs_accessible_name: false - - step_type: assert - description: 2. 恢复原来窗口大小 - needs_accessible_name: false -- id: case_1580807 - name: 单指移动窗口的位置 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸屏(#114151) - description: 单指移动窗口的位置 - status: active - reason: '' - steps: - - step_type: action - description: 1. 鼠标点击窗口的工具栏和左侧栏底部工具栏区域,不抬起手指,在屏幕上移动 - needs_accessible_name: false - - step_type: assert - description: 1. 可以移动窗口的位置 - needs_accessible_name: false -- id: case_1580805 - name: 单指拖拽批量文件到应用内 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸屏(#114151) - description: 单指拖拽批量文件到应用内 - status: active - reason: '' - steps: - - step_type: action - description: 1. 文件夹中有多份文档,单指拖拽批量文件到应用内 - needs_accessible_name: false - - step_type: assert - description: 1. 应用中打开多个标签页 - needs_accessible_name: false -- id: case_1580803 - name: 单指拖拽拉伸窗口大小 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/触摸屏(#114151) - description: 单指拖拽拉伸窗口大小 - status: active - reason: '' - steps: - - step_type: action - description: 1. 单指拖拽应用边角任意位置 - needs_accessible_name: false - - step_type: assert - description: 1. 可拉伸窗口大小 - needs_accessible_name: false -- id: case_1580785 - name: '[029]选中文本后右击' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: '[029]选中文本后右击' - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开PDF文档,选中一段文本,鼠标在选中区域右击 - needs_accessible_name: false - - step_type: action - description: 2. 打开PDF文档,选中一段文本,鼠标在非选中区域右击 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出高亮相关的右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出进行上下页跳转相关的右键菜单 - needs_accessible_name: false -- id: case_1580783 - name: 全屏显示界面打开放大镜,按esc键退出放大镜 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 全屏显示界面打开放大镜,按esc键退出放大镜 - status: active - reason: '' - steps: - - step_type: action - description: 1. 全屏显示界面打开放大镜 - needs_accessible_name: false - - step_type: action - description: 2. 按esc键 - needs_accessible_name: false - - step_type: assert - description: 1. 正常打开 - needs_accessible_name: false - - step_type: assert - description: 2. 退出放大镜,不会退出全屏显示 - needs_accessible_name: false -- id: case_1580781 - name: 保存替换文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 保存替换文档 - status: active - reason: '' - steps: - - step_type: action - description: 1. 添加高亮/注释/书签,点击另存为 - needs_accessible_name: false - - step_type: action - description: 2. 不改变名称,点击“保存”按钮 - needs_accessible_name: false - - step_type: action - description: 3. 点击“替换”按钮 - needs_accessible_name: false - - step_type: assert - description: 4. 点击文档查看器应用关闭按钮 - needs_accessible_name: false - - step_type: action - description: 5. 再次打开替换后的文档 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出保存文档界面 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出是否替换文档弹框 - needs_accessible_name: false - - step_type: assert - description: 3. 新编辑的文档正常替换原文档 - needs_accessible_name: false - - step_type: assert - description: 4. 直接关闭应用 - needs_accessible_name: false - - step_type: assert - description: 5. 界面显示正常,添加的高亮/注释/书签保存正常 - needs_accessible_name: false -- id: case_1580773 - name: 百分比框和页码框输入数值,按键盘enter键 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 百分比框和页码框输入数值,按键盘enter键 - status: active - reason: '' - steps: - - step_type: action - description: 1. 百分比框输入数值,按键盘enter键 - needs_accessible_name: false - - step_type: action - description: 2. 页码框输入数值,按键盘enter键 - needs_accessible_name: false - - step_type: assert - description: 1. 页面跳转,焦点仍然在百分比框 - needs_accessible_name: false - - step_type: assert - description: 2. 页面跳转,焦点仍然在页码框 - needs_accessible_name: false -- id: case_1580771 - name: 重命名后再打开文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 重命名后再打开文档 - status: active - reason: '' - steps: - - step_type: action - description: 1. 重命名文档,在名称中按tab键 - needs_accessible_name: false - - step_type: action - description: 2. 重命名文档,在名称中按enter键 - needs_accessible_name: false - - step_type: action - description: 3. 重命名文档,在名称中按空格键,再打开此文档 - needs_accessible_name: false - - step_type: action - description: 4. 重命名文档,在名称中输入特殊字符、标点符号(%# ,。等),再打开此文档 - needs_accessible_name: false - - step_type: assert - description: 1. 按tab键不起作用 - needs_accessible_name: false - - step_type: assert - description: 2. 按enter键不起作用 - needs_accessible_name: false - - step_type: assert - description: 3. 正常打开 - needs_accessible_name: false - - step_type: assert - description: 4. 正常打开 - needs_accessible_name: false -- id: case_1580767 - name: 按Ctrl+1,视图调整菜单同步勾选 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/其它交互(#114177) - description: 按Ctrl+1,视图调整菜单同步勾选 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,按Ctrl+1,点击百分比下拉框查看 - needs_accessible_name: false - - step_type: assert - description: 1. 默认大小和100%选项都会自动勾选 - needs_accessible_name: false -- id: case_1580765 - name: 最小化窗口后,双击其他文档重新打开窗口 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 最小化窗口后,双击其他文档重新打开窗口 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 仅打开一个文档查看器窗口,打开文档,点击最小化 - needs_accessible_name: false - - step_type: action - description: 2. 双击另一份文档 - needs_accessible_name: false - - step_type: assert - description: 1. 最小化至任务栏 - needs_accessible_name: false - - step_type: assert - description: 2. 窗口重新在桌面打开,另一份文档打开显示在同一个窗口中 - needs_accessible_name: false -- id: case_1580761 - name: 打开文本按Alt+A和Alt+H - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/其它交互(#114177) - description: 打开文本按Alt+A和Alt+H - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开PDF文档,未选中文本,分别按Alt+A和Alt+H - needs_accessible_name: false - - step_type: action - description: 2. 打开DJVU文档,分别按Alt+A和Alt+H - needs_accessible_name: false - - step_type: assert - description: 1. 弹出提示:请选择文本 - needs_accessible_name: false - - step_type: assert - description: 2. 无提示弹出 - needs_accessible_name: false -- id: case_1580759 - name: 焦点切换,直接跳过置灰菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/键盘(#114149) - description: 焦点切换,直接跳过置灰菜单 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开PDF文档,选中文本并右击 - needs_accessible_name: false - - step_type: action - description: 2. 按键盘上下键,焦点切换 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出右键菜单 - needs_accessible_name: false - - step_type: assert - description: 2. 焦点在每个高亮菜单切换,置灰菜单直接跳过,不会出现焦点消失现象 - needs_accessible_name: false -- id: case_1580757 - name: debian/control文件description字段,长、短描述与文案相符 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: debian/control文件description字段,长、短描述与文案相符 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开终端,输入 apt show deepin-reader,查看debian/control文件description字段,长、短描述 - needs_accessible_name: false - - step_type: assert - description: 1. 描述与文案相符 - needs_accessible_name: false -- id: case_1580755 - name: 切换系统语言后,检查翻译是否正确 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/兼容性(#114173) - description: 切换系统语言后,检查翻译是否正确 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 切换系统语言为英文,打开文档后查看各界面翻译是否正常 - needs_accessible_name: false - - step_type: assert - description: 2. 切换系统语言为繁体中文(香港),打开文档后查看各界面翻译是否正常 - needs_accessible_name: false - - step_type: assert - description: 3. 切换系统语言为正体中文(台湾),打开文档后查看各界面翻译是否正常 - needs_accessible_name: false - - step_type: assert - description: 4. 切换系统语言为藏语(终端locale查询显示Bo则表示切换成功),打开文档后查看各界面翻译是否正常 - needs_accessible_name: false - - step_type: assert - description: 5. 切换系统语言为维吾尔语,打开文档后查看各界面翻译是否正常 - needs_accessible_name: false - - step_type: assert - description: 1. 查看各界面显示正确,基本功能使用正常 - needs_accessible_name: false - - step_type: assert - description: 2. 查看各界面显示正确,基本功能使用正常 - needs_accessible_name: false - - step_type: assert - description: 3. 查看各界面显示正确,基本功能使用正常 - needs_accessible_name: false - - step_type: assert - description: 4. 查看各界面显示正确 - needs_accessible_name: false - - step_type: assert - description: 5. 查看各界面显示正确 - needs_accessible_name: false -- id: case_1580753 - name: 按快捷键Windows+D进入桌面,注释浮窗不会单独显示桌面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 按快捷键Windows+D进入桌面,注释浮窗不会单独显示桌面 - status: active - reason: '' - steps: - - step_type: action - description: 1. 鼠标悬停在图标注释或高亮注释之上 - needs_accessible_name: false - - step_type: assert - description: 2. 按快捷键Windows+D进入桌面查看 - needs_accessible_name: false - - step_type: action - description: 3. 鼠标悬停在图标注释或高亮注释之上 - needs_accessible_name: false - - step_type: action - description: 4. 鼠标移出注释区域 - needs_accessible_name: false - - step_type: assert - description: 1. 注释浮窗显示 - needs_accessible_name: false - - step_type: assert - description: 2. 应用最小化,浮窗不会单独显示桌面 - needs_accessible_name: false - - step_type: assert - description: 3. 注释浮窗显示注释浮窗显示 - needs_accessible_name: false - - step_type: assert - description: 4. 注释浮窗应该消失 - needs_accessible_name: false -- id: case_1580749 - name: 点击正文目录跳转至相应文档内容中 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/目录(#114163) - description: 点击正文目录跳转至相应文档内容中 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开有目录的文档,点击正文的目录 - needs_accessible_name: false - - step_type: action - description: 2. 文档左旋转,点击正文的目录 - needs_accessible_name: false - - step_type: action - description: 3. 文档右旋转,点击正文的目录 - needs_accessible_name: false - - step_type: action - description: 4. 文档旋转180度后,击右侧正文的目录 - needs_accessible_name: false - - step_type: assert - description: 1. 跳转至相应文档内容处 - needs_accessible_name: false - - step_type: assert - description: 2. 跳转至相应文档内容处 - needs_accessible_name: false - - step_type: assert - description: 3. 跳转至相应文档内容处 - needs_accessible_name: false - - step_type: assert - description: 4. 跳转至相应文档内容处 - needs_accessible_name: false -- id: case_1580737 - name: 快速滑动页面 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 快速滑动页面 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,默认百分比100%,快速滑动页面,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 打开文档,调整百分比为10%,快速滑动页面,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 界面显示正常,不会出现加载时长过长现象 - needs_accessible_name: false - - step_type: assert - description: 2. 界面显示正常,不会出现加载时长过长现象 - needs_accessible_name: false -- id: case_1580735 - name: 选中多个文档,右击打开 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 选中多个文档,右击打开 - status: active - reason: '' - steps: - - step_type: action - description: 1. 选中多个PDF格式文档,右键菜单选择打开 - needs_accessible_name: false - - step_type: action - description: 2. 选中多个DJVU格式文档,右键菜单选择打开 - needs_accessible_name: false - - step_type: action - description: 3. 选中多个DOCX格式文档,右键菜单选择打开 - needs_accessible_name: false - - step_type: assert - description: 1. 正常打开所有选择的文档 - needs_accessible_name: false - - step_type: assert - description: 2. 正常打开所有选择的文档 - needs_accessible_name: false - - step_type: assert - description: 3. 正常打开所有选择的文档 - needs_accessible_name: false -- id: case_1580731 - name: 右击蓝色书签图标进行删除 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 右击蓝色书签图标进行删除 - status: active - reason: '' - steps: - - step_type: action - description: 1. 添加书签 - needs_accessible_name: false - - step_type: action - description: 2. 右击蓝色书签图标,点击右键菜单中删除书签菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 右上角正常显示蓝色书签图标 - needs_accessible_name: false - - step_type: assert - description: 2. 可以正常删除,鼠标移走后文档右上角不显示任何书签图标 - needs_accessible_name: false -- id: case_1580729 - name: 快捷键切换书签/注释缩略图 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/书签(#114165) - description: 快捷键切换书签/注释缩略图 - status: active - reason: '' - steps: - - step_type: action - description: 1. 添加多个书签 - needs_accessible_name: false - - step_type: action - description: 2. 选择一个书签缩略图,按键盘上下/pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 3. 双页显示时,添加多个书签 - needs_accessible_name: false - - step_type: action - description: 4. 选择一个书签缩略图,按键盘上下/pageup/pagedown - needs_accessible_name: false - - step_type: assert - description: 1. 展开左边栏,显示多个书签缩略图 - needs_accessible_name: false - - step_type: assert - description: 2. 正确切换,右侧文档跟随变化 - needs_accessible_name: false - - step_type: assert - description: 3. 展开左边栏,显示多个书签缩略图 - needs_accessible_name: false - - step_type: assert - description: 4. 正确切换,右侧文档跟随变化 - needs_accessible_name: false -- id: case_1580727 - name: 快捷键切换注释目录 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 快捷键切换注释目录 - status: active - reason: '' - steps: - - step_type: action - description: 1. 添加多个注释 - needs_accessible_name: false - - step_type: assert - description: 2. 选择一个注释目录,按键盘上下键/pageup、pagedown,查看 - needs_accessible_name: false - - step_type: action - description: 3. 双页显示时,添加多个注释 - needs_accessible_name: false - - step_type: assert - description: 4. 选择一个注释目录,按键盘上下键/pageup、pagedown,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 展开左边栏,显示多个注释目录 - needs_accessible_name: false - - step_type: assert - description: 2. 切换正常,右侧文档对应跳转 - needs_accessible_name: false - - step_type: assert - description: 3. 展开左边栏,显示多个注释目录 - needs_accessible_name: false - - step_type: assert - description: 4. 切换正常,右侧文档对应跳转 - needs_accessible_name: false -- id: case_1580719 - name: 搜索过程中点击主菜单选项 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 搜索过程中点击主菜单选项 - status: active - reason: '' - steps: - - step_type: action - description: 1. 搜索关键字,当搜索结果较多正在进行时,点新窗口菜单 - needs_accessible_name: false - - step_type: action - description: 2. 搜索关键字,当搜索结果较多正在进行时,点新标签页菜单 - needs_accessible_name: false - - step_type: action - description: 3. 搜索关键字,当搜索结果较多正在进行时,点保存菜单 - needs_accessible_name: false - - step_type: action - description: 4. 搜索关键字,当搜索结果较多正在进行时,点另存为菜单,另存为新文档 - needs_accessible_name: false - - step_type: action - description: 5. 搜索关键字,当搜索结果较多正在进行时,点击幻灯片放映菜单 - needs_accessible_name: false - - step_type: action - description: 6. 搜索关键字,当搜索结果较多正在进行时,点击放大镜菜单 - needs_accessible_name: false - - step_type: action - description: 7. 搜索关键字,当搜索结果较多正在进行时,点击在文件管理器中显示菜单 - needs_accessible_name: false - - step_type: action - description: 8. 搜索关键字,当搜索结果较多正在进行时,点击在主题菜单 - needs_accessible_name: false - - step_type: action - description: 9. 搜索关键字,当搜索结果较多正在进行时,点击在帮助菜单 - needs_accessible_name: false - - step_type: action - description: 10. 搜索关键字,当搜索结果较多正在进行时,点击在关于菜单 - needs_accessible_name: false - - step_type: action - description: 11. 搜索关键字,当搜索结果较多正在进行时,点击在退出菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 正常弹出新窗口 - needs_accessible_name: false - - step_type: assert - description: 2. 正常弹出文件管理器选择界面 - needs_accessible_name: false - - step_type: assert - description: 3. 正常保存文档 - needs_accessible_name: false - - step_type: assert - description: 4. 可以另存成功 - needs_accessible_name: false - - step_type: assert - description: 5. 进入幻灯片放映界面 - needs_accessible_name: false - - step_type: assert - description: 6. 放大镜正常可以使用 - needs_accessible_name: false - - step_type: assert - description: 7. 可以打开所在文件夹 - needs_accessible_name: false - - step_type: assert - description: 8. 正常切换主题 - needs_accessible_name: false - - step_type: assert - description: 9. 进入帮助手册界面 - needs_accessible_name: false - - step_type: assert - description: 10. 打开关于弹窗 - needs_accessible_name: false - - step_type: assert - description: 11. 退出应用 - needs_accessible_name: false -- id: case_1580717 - name: 不同百分比显示时进行视图调整 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 不同百分比显示时进行视图调整 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 百分比调整到10%,分别点击双页显示、适合宽度、 适合高度、适合页面、 左旋转、 右旋转,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 2. 百分比调整到500%,分别点击双页显示、适合宽度、 适合高度、适合页面、 左旋转、 右旋转,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 2. 界面显示正常 - needs_accessible_name: false -- id: case_1580715 - name: 放大缩小文档,过程流畅,无闪烁 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 放大缩小文档,过程流畅,无闪烁 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,按Ctrl+鼠标滚轮,上滑 - needs_accessible_name: false - - step_type: action - description: 2. 打开文档,按Ctrl+鼠标滚轮,下滑 - needs_accessible_name: false - - step_type: action - description: 3. 打开文档,按Ctrl+“+”, - needs_accessible_name: false - - step_type: action - description: 4. 打开文档,按Ctrl+“-”, - needs_accessible_name: false - - step_type: assert - description: 1. 文档正常进行放大,放大过程流畅,无闪烁 - needs_accessible_name: false - - step_type: assert - description: 2. 文档正常进行缩小,缩小过程流畅,无闪烁 - needs_accessible_name: false - - step_type: assert - description: 3. 文档正常进行放大,放大过程流畅,无闪烁 - needs_accessible_name: false - - step_type: assert - description: 4. 文档正常进行缩小,缩小过程流畅,无闪烁 - needs_accessible_name: false -- id: case_1580713 - name: 翻页,页面显示流畅 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 翻页,页面显示流畅 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,鼠标滚轮滑动,查看显示 - needs_accessible_name: false - - step_type: action - description: 2. 打开文档,拖拽右侧和底部滚动条 - needs_accessible_name: false - - step_type: assert - description: 1. 页面翻页流畅,无闪烁 - needs_accessible_name: false - - step_type: assert - description: 2. 页面翻页流畅,无闪烁 - needs_accessible_name: false -- id: case_1580711 - name: 拖拽窗口界面显示顺畅 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 拖拽窗口界面显示顺畅 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,双页显示,拖拽窗口,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 打开文档,适应高度,拖拽窗口,查看 - needs_accessible_name: false - - step_type: assert - description: 3. 打开文档,适应宽度,拖拽窗口,查看 - needs_accessible_name: false - - step_type: assert - description: 4. 打开文档,左旋转,拖拽窗口,查看 - needs_accessible_name: false - - step_type: assert - description: 5. 打开文档,右旋转,拖拽窗口,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 界面显示顺畅,无闪烁、重影现象 - needs_accessible_name: false - - step_type: assert - description: 2. 界面显示顺畅,无闪烁、重影现象 - needs_accessible_name: false - - step_type: assert - description: 3. 界面显示顺畅,无闪烁、重影现象 - needs_accessible_name: false - - step_type: assert - description: 4. 界面显示顺畅,无闪烁、重影现象 - needs_accessible_name: false - - step_type: assert - description: 5. 界面显示顺畅,无闪烁、重影现象 - needs_accessible_name: false -- id: case_1580709 - name: 窗口拖动与界面显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 窗口拖动与界面显示 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,分别从上下左右、四个边角拖动改变窗口大小 - needs_accessible_name: false - - step_type: action - description: 2. 打开文档,双页显示,分别从上下左右、四个边角拖动改变窗口大小 - needs_accessible_name: false - - step_type: action - description: 3. 打开文档,适应高度,分别从上下左右、四个边角拖动改变窗口大小 - needs_accessible_name: false - - step_type: action - description: 4. 打开文档,适应宽度,分别从上下左右、四个边角拖动改变窗口大小 - needs_accessible_name: false - - step_type: assert - description: 1. 窗口变化正常,界面显示正常,不会出现闪烁等异常 - needs_accessible_name: false - - step_type: assert - description: 2. 窗口变化正常,界面显示正常,不会出现闪烁等异常 - needs_accessible_name: false - - step_type: assert - description: 3. 窗口变化正常,界面显示正常,不会出现闪烁等异常;页面始终适应高度显示 - needs_accessible_name: false - - step_type: assert - description: 4. 窗口变化正常,界面显示正常,不会出现闪烁等异常;页面始终适应宽度显示 - needs_accessible_name: false -- id: case_1580707 - name: 已添加DJVU文档界面布局显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 已添加DJVU文档界面布局显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 已添加文档,查看顶部工具栏的显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击菜单键,查看包含的菜单项 - needs_accessible_name: false - - step_type: assert - description: 3. 查看文档区域显示 - needs_accessible_name: false - - step_type: assert - description: 4. 展开左边栏,查看底部图标 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 包含的菜单有:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、工具、打印、主题、帮助、关于、退出 - needs_accessible_name: false - - step_type: assert - description: 3. 左边栏缩略图默认收起,右侧文档首次打开默认显示第一页 - needs_accessible_name: false - - step_type: assert - description: 4. 显示缩略图图标和书签图标,显示无异常 - needs_accessible_name: false -- id: case_1580705 - name: 打开DJVU文档,未选中文本右击弹出菜单 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 打开DJVU文档,未选中文本右击弹出菜单 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 未选中文本,点击鼠标右键,查看右键菜单显示 - needs_accessible_name: false - - step_type: assert - description: 2. 点击添加书签,查看 - needs_accessible_name: false - - step_type: assert - description: 3. 点击全屏,查看 - needs_accessible_name: false - - step_type: assert - description: 4. 点击幻灯片放映,查看 - needs_accessible_name: false - - step_type: assert - description: 5. 点击第一页,查看 - needs_accessible_name: false - - step_type: assert - description: 6. 点击前一页,查看 - needs_accessible_name: false - - step_type: assert - description: 7. 点击后一页,查看 - needs_accessible_name: false - - step_type: assert - description: 8. 点击最后一页,查看 - needs_accessible_name: false - - step_type: assert - description: 9. 点击左旋转,查看 - needs_accessible_name: false - - step_type: assert - description: 10. 点击右旋转,查看 - needs_accessible_name: false - - step_type: assert - description: 11. 点击打印,查看 - needs_accessible_name: false - - step_type: assert - description: 12. 点击文档信息,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 显示:添加书签、全屏、幻灯片放映、第一页、前一页、后一页、最后一页、左旋转、右旋转、打印、文档信息 - needs_accessible_name: false - - step_type: assert - description: 2. 当前页面正常添加后书签,右上角显示书签图标,左边栏显示书签缩略图 - needs_accessible_name: false - - step_type: assert - description: 3. 进入全屏显示 - needs_accessible_name: false - - step_type: assert - description: 4. 正常播放幻灯片 - needs_accessible_name: false - - step_type: assert - description: 5. 跳转至第一页,如当前文档已在第一页,则“第一页”菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 6. 跳转至前一页,如当前文档已在第一页,则“前一页”菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 7. 跳转至后一页,如当前文档已在最后一页,则“后一页”菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 8. 跳转至最后一页,如当前文档已在最后一页,则“最后一页”菜单置灰显示 - needs_accessible_name: false - - step_type: assert - description: 9. 文档正常左旋转,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 10. 文档正常右旋转,界面显示正常 - needs_accessible_name: false - - step_type: assert - description: 11. 跳转到打印预览界面 - needs_accessible_name: false - - step_type: assert - description: 12. 显示文档信息界面,界面显示无异常 - needs_accessible_name: false -- id: case_1580683 - name: 未编辑进行另存 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 未编辑进行另存 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开已添加过书签、高亮、注释的文档,不编辑,点击工具栏中的菜单键,再点击另存为 - needs_accessible_name: false - - step_type: assert - description: 2. 点击打开新文档,查看内容显示是否正常,原有的书签、高亮、注释是否改变 - needs_accessible_name: false - - step_type: action - description: 3. 关闭旧文档 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出系统文件弹框,弹出文档选择器,输入名字可将文件保存为新的文件 - needs_accessible_name: false - - step_type: assert - description: 2. 内容显示是否正常,原有的书签、高亮、注释无改变 - needs_accessible_name: false - - step_type: assert - description: 3. 旧文档被直接关闭,不会弹出是否保存的提示框 - needs_accessible_name: false -- id: case_1580679 - name: docx文档打开方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: docx文档打开方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在文件夹中双击一个docx文档 - needs_accessible_name: false - - step_type: assert - description: 2. 在文件夹中右击一个docx文档,选择打开方式为:文档查看器 - needs_accessible_name: false - - step_type: action - description: 3. 拖拽一个docx文档至初始页面 - needs_accessible_name: false - - step_type: action - description: 4. 打开应用,点击“选择文件”进行选择:进入文件选择页面,选择一个docx文档,点击打开 - needs_accessible_name: false - - step_type: action - description: 5. 初始界面按Ctrl+O键,选择一个docx文档打开 - needs_accessible_name: false - - step_type: action - description: 6. 打开应用,点击菜单列表中的“新标签页”菜单,选择一个docx文档打开 - needs_accessible_name: false - - step_type: action - description: 7. 已打开文档后,点击标签栏右侧的+菜单 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: '2.' - needs_accessible_name: false - - step_type: assert - description: '3.' - needs_accessible_name: false - - step_type: assert - description: '4.' - needs_accessible_name: false - - step_type: assert - description: '5.' - needs_accessible_name: false - - step_type: assert - description: '6.' - needs_accessible_name: false - - step_type: assert - description: '7.' - needs_accessible_name: false -- id: case_1580677 - name: 选中多个docx文档,右击打开 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 选中多个docx文档,右击打开 - status: active - reason: '' - steps: - - step_type: action - description: 1. 1.选中多个docx文档,右键菜单选择打开 - needs_accessible_name: false - - step_type: assert - description: 1. 正常打开所有选择的文档 - needs_accessible_name: false -- id: case_1580675 - name: '[003]退出打开' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: '[003]退出打开' - status: active - reason: '' - steps: - - step_type: action - description: 1. 初始界面按Ctrl+O键 - needs_accessible_name: false - - step_type: assert - description: 2. 文件选择页面点击取消,或者点击ESC键,查看是否退出文件选择界面 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出文件选择界面 - needs_accessible_name: false - - step_type: assert - description: 2. 退出文件选择界面 - needs_accessible_name: false -- id: case_1580673 - name: 同时打开三种格式文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 同时打开三种格式文档 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开应用,选中三种格式文档(docx、pdf、djvu)拖拽至窗口中,查看 - needs_accessible_name: false - - step_type: action - description: 2. 打开应用,点击“选择文件”进行选择:进入文件选择页面,选中三种格式文档(docx、pdf、djvu)打开 - needs_accessible_name: false - - step_type: action - description: 3. 初始界面按Ctrl+O键,进入文件选择页面,选中三种格式文档(docx、pdf、djvu)打开 - needs_accessible_name: false - - step_type: action - description: 4. 打开应用,点击菜单列表中的“新标签页”菜单,选中三种格式文档(docx、pdf、djvu)打开 - needs_accessible_name: false - - step_type: action - description: 5. 已打开文档后,点击标签栏右侧的+菜单,三种格式文档(docx、pdf、djvu)打开 - needs_accessible_name: false - - step_type: assert - description: 1. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 - needs_accessible_name: false - - step_type: assert - description: 2. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 - needs_accessible_name: false - - step_type: assert - description: 3. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 - needs_accessible_name: false - - step_type: assert - description: 4. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 - needs_accessible_name: false - - step_type: assert - description: 5. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 - needs_accessible_name: false -- id: case_1580671 - name: '[030]docx文档打开界面显示' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: '[030]docx文档打开界面显示' - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开docx文档,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: '1.0' - needs_accessible_name: false -- id: case_1580669 - name: 单个窗口中只打开一个docx标签页,关闭或退出 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 单个窗口中只打开一个docx标签页,关闭或退出 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 在文档查看器应用中打开一份docx文档 - needs_accessible_name: false - - step_type: action - description: 2. 文档未编辑,点击工具栏关闭按钮或“退出”菜单 - needs_accessible_name: false - - step_type: action - description: 3. 文档编辑后,点击工具栏关闭按钮或“退出”菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 检查所有保存的文档,编辑内容都正确保存 - needs_accessible_name: false - - step_type: assert - description: 2. 是否保存弹框的文案改为“是否保存对文档xxx的编辑” - needs_accessible_name: false - - step_type: assert - description: '3.' - needs_accessible_name: false -- id: case_1580665 - name: 单个窗口中打开多个标签页(仅包含docx)全部未编辑,关闭或退出 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 单个窗口中打开多个标签页(仅包含docx)全部未编辑,关闭或退出 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 单个窗口中打开三份docx文档,全部未编辑,点击工具栏中的关闭,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 窗口直接关闭,无提示弹出 - needs_accessible_name: false -- id: case_1580641 - name: '[031]Ctrl+S和Ctrl+Shift+S快捷键' - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: '[031]Ctrl+S和Ctrl+Shift+S快捷键' - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开docx文档,文档未编辑,按快捷键Ctrl+S - needs_accessible_name: false - - step_type: action - description: 2. 打开docx文档,文档编辑后,按快捷键Ctrl+S - needs_accessible_name: false - - step_type: action - description: 3. 打开docx文档,文档编辑后,按快捷键Ctrl+Shift+S - needs_accessible_name: false - - step_type: assert - description: 1. 无提示语弹出 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出另存为界面,可以修改文件名进行另存 - needs_accessible_name: false - - step_type: assert - description: 3. 弹出另存为界面,可以修改文件名进行另存 - needs_accessible_name: false -- id: case_1580639 - name: docx文档编辑后不保存,重启/关机/注销 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: docx文档编辑后不保存,重启/关机/注销 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开一份docx文档,编辑后不保存,重启电脑 - needs_accessible_name: false - - step_type: action - description: 2. 打开一份docx文档,编辑后不保存,注销电脑 - needs_accessible_name: false - - step_type: action - description: 3. 打开一份docx文档,编辑后不保存,关机 - needs_accessible_name: false - - step_type: assert - description: 1. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“重启”继续重启编辑内容不会被保存 - needs_accessible_name: false - - step_type: assert - description: 2. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“注销”PC会注销,编辑内容不会被保存 - needs_accessible_name: false - - step_type: assert - description: 3. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“关机”PC 会关机,编辑内容不会被保存 - needs_accessible_name: false -- id: case_1580637 - name: docx文档编辑后另存,重启/关机/注销 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: docx文档编辑后另存,重启/关机/注销 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,重启电脑 - needs_accessible_name: false - - step_type: action - description: 2. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,关机 - needs_accessible_name: false - - step_type: action - description: 3. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,注销 - needs_accessible_name: false - - step_type: assert - description: 1. 无“文档未保存”的提示弹出,直接进入重启;再次开机,另存后的pdf文档中编辑内容不会消失 - needs_accessible_name: false - - step_type: assert - description: 2. 无“文档未保存”的提示弹出,直接关机。再次开机,另存后的pdf文档中编辑内容不会消失 - needs_accessible_name: false - - step_type: assert - description: 3. 无“文档未保存”的提示弹出,直接注销。再次开机,另存后的pdf文档中编辑内容不会消失 - needs_accessible_name: false -- id: case_1580609 - name: 应用内嵌帮助手册功能正常 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 应用内嵌帮助手册功能正常 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 检查如下路径下 /usr/share/deepin-manual/manual-assets/application下是否存在deepin-reader文件夹 - needs_accessible_name: false - - step_type: assert - description: 2. 打开deepin-reader文件夹进入document-viewer/zh_CN ,查看document-viewer.md中内容显示 - needs_accessible_name: false - - step_type: assert - description: 3. 帮助手册更新到最新版本,查看应用图标显示是否正确 - needs_accessible_name: false - - step_type: assert - description: 4. 打开文档查看器,点击帮助菜单,查看文案是否正确 - needs_accessible_name: false - - step_type: assert - description: 1. 存在deepin-reader文件夹 - needs_accessible_name: false - - step_type: assert - description: 2. 首行显示为:# 文档查看器 | deepin-reader - needs_accessible_name: false - - step_type: assert - description: 3. 显示正确 - needs_accessible_name: false - - step_type: assert - description: 4. 文案正确 - needs_accessible_name: false -- id: case_1580603 - name: 新开启的窗口中文档打开正常 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/标签页(#114179) - description: 新开启的窗口中文档打开正常 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档查看器后,点击“新窗口”菜单 - needs_accessible_name: false - - step_type: action - description: 2. 拖拽文档至新打开的窗口中 - needs_accessible_name: false - - step_type: action - description: 3. 在新窗口中点击“选择文件”按钮打开文档 - needs_accessible_name: false - - step_type: action - description: 4. 在新窗口中点击“新标签页”添加文档 - needs_accessible_name: false - - step_type: action - description: 5. 关闭旧窗口,双击桌面或文件夹的一份文档 - needs_accessible_name: false - - step_type: assert - description: 1. 打开一个新的窗口 - needs_accessible_name: false - - step_type: assert - description: 2. 文档在新窗口中正常打开 - needs_accessible_name: false - - step_type: assert - description: 3. 文档在新窗口中正常打开 - needs_accessible_name: false - - step_type: assert - description: 4. 文档在新窗口中正常打开 - needs_accessible_name: false - - step_type: assert - description: 5. 文档在新窗口中正常打开 - needs_accessible_name: false -- id: case_1580601 - name: 按快捷键翻页(1040阶段) - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 按快捷键翻页(1040阶段) - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,鼠标不点击,任意移动,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 2. 点击工具栏任意菜单(除去百分比菜单)后,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 3. 点击百分比或页数输入框后,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 4. 展开左边栏,鼠标点击左边栏区域后任意移动,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 5. 鼠标点击右侧文档区域后任意移动,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: action - description: 6. 鼠标点击窗口外桌面区域,,按键盘上下键或pageup/pagedown - needs_accessible_name: false - - step_type: assert - description: 1. 焦点默认在文档中,文档正常逐行翻页/逐页翻页 - needs_accessible_name: false - - step_type: assert - description: 2. 焦点转移到工具栏 - needs_accessible_name: false - - step_type: assert - description: 3. 焦点在输入框,文档不会进行翻页 - needs_accessible_name: false - - step_type: assert - description: 4. 焦点在左侧,缩略图进行翻页 - needs_accessible_name: false - - step_type: assert - description: 5. 焦点在右侧,文档进行翻页 - needs_accessible_name: false - - step_type: assert - description: 6. 焦点在桌面中,选中桌面应用 - needs_accessible_name: false -- id: case_1580597 - name: 打开多个窗口,窗口A中点击“关于”并关闭,再点击窗口B中的“关于”无异常 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 打开多个窗口,窗口A中点击“关于”并关闭,再点击窗口B中的“关于”无异常 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开窗口A和窗口B-> 在窗口A中打开关于窗口,并关闭窗口A - needs_accessible_name: false - - step_type: assert - description: 2. 窗口B中点击“关于”菜单,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 窗口A关闭 - needs_accessible_name: false - - step_type: assert - description: 2. 正常查看 - needs_accessible_name: false -- id: case_1580595 - name: 打开多份文档并进入全屏或退出,不会丢失 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 打开多份文档并进入全屏或退出,不会丢失 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开多份文档并进入全屏 - needs_accessible_name: false - - step_type: action - description: 2. 全屏界面添加新的文档 - needs_accessible_name: false - - step_type: action - description: 3. 退出全屏 - needs_accessible_name: false - - step_type: action - description: 4. 全屏界面关闭部分文档,再退出全屏 - needs_accessible_name: false - - step_type: assert - description: 1. 文档正常显示,不会丢失 - needs_accessible_name: false - - step_type: assert - description: 2. 文档标题正常显示 - needs_accessible_name: false - - step_type: assert - description: 3. 文档正常显示,不会丢失 - needs_accessible_name: false - - step_type: assert - description: 4. 文档正常显示 - needs_accessible_name: false -- id: case_1580589 - name: 【UI】是否保存提示语显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 【UI】是否保存提示语显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,编辑后关闭,查看提示语显示 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出是否保存弹框,提示语为 是否保存对“xxx”的编辑 - needs_accessible_name: false -- id: case_1580585 - name: 【UI】搜索框界面显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 【UI】搜索框界面显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,打开搜索框,未输入关键词查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 2. 打开文档,打开搜索框,输入关键词未按enter键,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 3. 打开文档,打开搜索框,输入关键词并按enter键,查看界面显示 - needs_accessible_name: false - - step_type: assert - description: 1. 向上、向下切换按键置灰显示 - needs_accessible_name: false - - step_type: assert - description: 2. 向上、向下切换按键置灰显示 - needs_accessible_name: false - - step_type: assert - description: 3. 向上、向下切换按键高亮显示 - needs_accessible_name: false -- id: case_1580583 - name: 多个英文或中文关键字均可以正常搜索到 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 多个英文或中文关键字均可以正常搜索到 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档,在输入框中输入英文关键字,如:user,按键盘enter键,查看 - needs_accessible_name: false - - step_type: action - description: 2. 点击搜索框上一个、下一个按钮 - needs_accessible_name: false - - step_type: assert - description: 3. 打开文档,在输入框中输入中文关键字,如:系统,按键盘enter键,查看 - needs_accessible_name: false - - step_type: action - description: 4. 点击搜索框上一个、下一个按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 搜索结果高亮显示,左侧栏中搜索结果内容与个数显示正确 - needs_accessible_name: false - - step_type: assert - description: 2. 按整个单词跳转,而不是按单个字母跳转;点击“上一个” 、“下一个”按钮均可以起作用,跳转到最后一个关键字后循环切换 - needs_accessible_name: false - - step_type: assert - description: 3. 搜索结果高亮显示,左侧栏中搜索结果个数显示正确 - needs_accessible_name: false - - step_type: assert - description: 4. 按整个词语跳转,而不是按单个字跳转;点击“上一个” 、“下一个”按钮均可以起作用,跳转到最后一个关键字后循环切换 - needs_accessible_name: false -- id: case_1580581 - name: 缓慢移动放大镜,界面无抖动现象 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 缓慢移动放大镜,界面无抖动现象 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开放大镜后缓慢移动查看 - needs_accessible_name: false - - step_type: assert - description: 2. 在高分屏中切换分辨率后移动放大镜查看 - needs_accessible_name: false - - step_type: assert - description: 1. 界面显示正常,无抖动现象 - needs_accessible_name: false - - step_type: assert - description: 2. 界面显示正常,无抖动现象 - needs_accessible_name: false -- id: case_1580575 - name: 进入全屏再退出,窗口大小需保持之前的状态 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 进入全屏再退出,窗口大小需保持之前的状态 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,点击最大化按钮 - needs_accessible_name: false - - step_type: action - description: 2. 点击右键菜单中的“全屏”菜单 - needs_accessible_name: false - - step_type: action - description: 3. 右击主视图界面弹出右键菜单,点击“退出全屏”菜单 - needs_accessible_name: false - - step_type: action - description: 4. 打开文档,显示为默认窗口大小,点击右键菜单中的“全屏”菜单 - needs_accessible_name: false - - step_type: action - description: 5. 右击主视图界面弹出右键菜单,点击“退出全屏”菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 窗口最大化显示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入全屏显示 - needs_accessible_name: false - - step_type: assert - description: 3. 可以退出全屏显示,窗口需保持最大化显示 - needs_accessible_name: false - - step_type: assert - description: 4. 进入全屏显示 - needs_accessible_name: false - - step_type: assert - description: 5. 可以退出全屏显示,窗口需保持默认大小显示 - needs_accessible_name: false -- id: case_1580573 - name: 鼠标放置在屏幕顶端或左侧边缘,按快捷键F11,工具栏和左侧栏正常弹出可点击 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 鼠标放置在屏幕顶端或左侧边缘,按快捷键F11,工具栏和左侧栏正常弹出可点击 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,点击最大化显示 - needs_accessible_name: false - - step_type: action - description: 2. 鼠标放置在屏幕顶端,按快捷键F11 - needs_accessible_name: false - - step_type: action - description: 3. 打开文档,点击最大化显示 - needs_accessible_name: false - - step_type: action - description: 4. 鼠标放置在屏幕左侧边缘,按快捷键F11 - needs_accessible_name: false - - step_type: assert - description: 1. 文档最大化显示 - needs_accessible_name: false - - step_type: assert - description: 2. 工具栏自动弹出,按钮可点击,不会置灰显示 - needs_accessible_name: false - - step_type: assert - description: 3. 文档最大化显示 - needs_accessible_name: false - - step_type: assert - description: 4. 左侧栏自动弹出,按钮可点击,不会置灰显示 - needs_accessible_name: false -- id: case_1580565 - name: 切换至新的用户,检查文档查看器版本和基本功能 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 切换至新的用户,检查文档查看器版本和基本功能 - status: active - reason: '' - steps: - - step_type: action - description: 1. 进入设置添加新的用户 - needs_accessible_name: false - - step_type: assert - description: 2. 切换至新的用户,检查文档查看器版本和基本功能 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 版本正确,基本功能正常 - needs_accessible_name: false -- id: case_1580557 - name: 默认打开方式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档打开(#114147) - description: 默认打开方式 - status: active - reason: '' - steps: - - step_type: action - description: 1. 刷机后首次双击PDF格式文档 - needs_accessible_name: false - - step_type: action - description: 2. 刷机后首次双击DJVU格式文档 - needs_accessible_name: false - - step_type: action - description: 3. 刷机后首次双击DOCX格式文档 - needs_accessible_name: false - - step_type: assert - description: 1. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开。 - needs_accessible_name: false - - step_type: assert - description: 2. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开 - needs_accessible_name: false - - step_type: assert - description: 3. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开 - needs_accessible_name: false -- id: case_1580553 - name: 超链接详情浮窗显示 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 超链接详情浮窗显示 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开带有超链接文本的文档,鼠标(默认选择样式)放置在超链接文本之上,查看 - needs_accessible_name: false - - step_type: assert - description: 2. 移走鼠标,查看 - needs_accessible_name: false - - step_type: assert - description: 1. 鼠标显示为手形样式,显示超链接详情浮窗,浮窗立即显示无间隔时长,与UI图相符。浮窗内容无法点击 - needs_accessible_name: false - - step_type: assert - description: 2. 超链接详情浮窗和手形样式消失,鼠标恢复选择样式 - needs_accessible_name: false -- id: case_1580551 - name: 点击超链接 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 点击超链接 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 鼠标放置在超链接文本之上,弹出手形样式和详情浮窗,点击超链接,查看 - needs_accessible_name: false - - step_type: action - description: 2. 安全提示弹框弹出后,点击关闭按钮 - needs_accessible_name: false - - step_type: action - description: 3. 安全提示弹框弹出后,点击“阻止”按钮 - needs_accessible_name: false - - step_type: action - description: 4. 安全提示弹框弹出后,点击“允许”按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出安全提示弹框,弹框中显示关闭、“阻止”、“允许”按钮 - needs_accessible_name: false - - step_type: assert - description: 2. 关闭弹窗,不做任何操作 - needs_accessible_name: false - - step_type: assert - description: 3. 关闭弹窗,不做任何操作 - needs_accessible_name: false - - step_type: assert - description: 4. 关闭弹窗,打开浏览器并跳转至该链接(网页的超链接会打开浏览器,email超链接会打开邮箱应用,多媒体超链接会打开相应的应用) - needs_accessible_name: false -- id: case_1580549 - name: 安全提示弹框弹出后,点击应用其他菜单不应该起作用 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 安全提示弹框弹出后,点击应用其他菜单不应该起作用 - status: active - reason: '' - steps: - - step_type: action - description: 1. 安全提示弹框弹出后,点击应用其他菜单 - needs_accessible_name: false - - step_type: assert - description: 1. 点击均无作用 - needs_accessible_name: false -- id: case_1580545 - name: 每次点击超链接都会弹出安全提示弹框 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 每次点击超链接都会弹出安全提示弹框 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击超链接文本,点击安全提示弹框中的“允许”按钮 - needs_accessible_name: false - - step_type: action - description: 2. 再次点击此超链接 - needs_accessible_name: false - - step_type: assert - description: 1. 关闭弹窗,打开浏览器并跳转至该链接 - needs_accessible_name: false - - step_type: assert - description: 2. 继续弹出安全提示弹框,点击“允许”按钮,浏览器中重新打开另一个标签页 - needs_accessible_name: false - - step_type: assert - description: 备注:每次点击超链接都会弹出安全提示弹框 - needs_accessible_name: false -- id: case_1580543 - name: 切换至手形工具点击超链接 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 切换至手形工具点击超链接 - status: active - reason: '' - steps: - - step_type: action - description: 1. 切换至手形工具,放置在超链接文本之上 - needs_accessible_name: false - - step_type: action - description: 2. 切换至手形工具,点击超链接文本 - needs_accessible_name: false - - step_type: action - description: 3. 切换至手形工具,选中超链接文本或普通文本 - needs_accessible_name: false - - step_type: action - description: 4. 切换至手形工具,右击超链接文本 - needs_accessible_name: false - - step_type: assert - description: 1. 会显示超链接浮窗 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出安全提示弹框,弹框中显示关闭、“阻止”、“允许”按钮,点击各按钮功能正常 - needs_accessible_name: false - - step_type: assert - description: 3. 无法选中超链接文本或普通文本 - needs_accessible_name: false - - step_type: assert - description: 4. 弹出搜索相关的右键菜单 - needs_accessible_name: false -- id: case_1580533 - name: 不选中文本右击 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 不选中文本右击 - status: active - reason: '' - steps: - - step_type: action - description: 1. 不选中,直接右击超链接文本 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出包含搜索等的菜单的右键菜单,点击各菜单功能正常 - needs_accessible_name: false -- id: case_1580529 - name: 安全提示弹框弹出后按tab键 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 安全提示弹框弹出后按tab键 - status: active - reason: '' - steps: - - step_type: action - description: 1. 点击超链接弹出安全提示弹框 - needs_accessible_name: false - - step_type: action - description: 2. 按tab键切换 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: '2.' - needs_accessible_name: false -- id: case_1580523 - name: 退出幻灯片播放,应用保持之前的最大化或默认状态 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 退出幻灯片播放,应用保持之前的最大化或默认状态 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,点击最大化 - needs_accessible_name: false - - step_type: action - description: 2. 右击主视图界面弹出右键菜单,点击幻灯片播放菜单 - needs_accessible_name: false - - step_type: action - description: 3. 点击底部按钮的X键,或键盘ESC键 - needs_accessible_name: false - - step_type: assert - description: 4. 打开文档,查看默认状态 - needs_accessible_name: false - - step_type: action - description: 5. 右击主视图界面弹出右键菜单,点击幻灯片播放菜单 - needs_accessible_name: false - - step_type: action - description: 6. 点击底部按钮的X键,或键盘ESC键 - needs_accessible_name: false - - step_type: assert - description: 1. 应用最大化显示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放 - needs_accessible_name: false - - step_type: assert - description: 3. 退出幻灯片播放,应用窗口保持最大化显示 - needs_accessible_name: false - - step_type: assert - description: 4. 窗口为默认大小 - needs_accessible_name: false - - step_type: assert - description: 5. 进入幻灯片播放 - needs_accessible_name: false - - step_type: assert - description: 6. 退出幻灯片播放,应用窗口保持默认大小 - needs_accessible_name: false -- id: case_1580519 - name: 未连接打印机,存为PDF - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 未连接打印机,存为PDF - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,点击主菜单再点击“打印”菜单 - needs_accessible_name: false - - step_type: action - description: 2. 打印预览界面默认选择“存为PDF”,页码范围是“全部”,点击保存菜单,进入选择路径界面,选择后保存 - needs_accessible_name: false - - step_type: action - description: 3. 打印预览界面默认选择“存为PDF”,页码范围选择“当前页”,点击保存菜单,进入选择路径界面,选择后保存 - needs_accessible_name: false - - step_type: action - description: 4. 打印预览界面默认选择“存为PDF”,页码范围选择“指定页面”,点击保存菜单,进入选择路径界面,选择后保存 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出打印预览界面 - needs_accessible_name: false - - step_type: assert - description: 2. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,显示正确 - needs_accessible_name: false - - step_type: assert - description: 3. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示当前的1页 - needs_accessible_name: false - - step_type: assert - description: 4. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示指定的页面 - needs_accessible_name: false -- id: case_1580517 - name: 未连接打印机,另存为图片 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 未连接打印机,另存为图片 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,点击主菜单再点击“打印”菜单 - needs_accessible_name: false - - step_type: action - description: 2. 打印预览界面默认选择“另存为图片”,页码范围是“全部”,点击保存菜单,进入选择路径界面,选择后保存 - needs_accessible_name: false - - step_type: action - description: 3. 打印预览界面默认选择“另存为图片”,页码范围选择“当前页”,点击保存菜单,进入选择路径界面,选择后保存 - needs_accessible_name: false - - step_type: action - description: 4. 打印预览界面默认选择“另存为图片”,页码范围选择“指定页面”,点击保存菜单,进入选择路径界面,选择后保存 - needs_accessible_name: false - - step_type: assert - description: 1. 弹出打印预览界面 - needs_accessible_name: false - - step_type: assert - description: 2. 打印预览界面关闭,进入文件保存的路径,打开另存的图片文件夹,显示全部页面图片 - needs_accessible_name: false - - step_type: assert - description: 3. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示当前的1页图片 - needs_accessible_name: false - - step_type: assert - description: 4. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示指定的页面图片 - needs_accessible_name: false -- id: case_1580513 - name: 支持打开多个窗口 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/主菜单(#114141) - description: 支持打开多个窗口 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 打开文档查看器 - needs_accessible_name: false - - step_type: action - description: 2. 点击主菜单弹出菜单列表,点击“新窗口”菜单 - needs_accessible_name: false - - step_type: action - description: 3. 重复步骤2 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 弹出一个新窗口 - needs_accessible_name: false - - step_type: assert - description: 3. 继续弹出新窗口,窗口数量限制在20个以内,窗口不会重叠在一起 - needs_accessible_name: false -- id: case_1580491 - name: 打开PDF和DOCX大文档无异常 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/压力(#114171) - description: 打开PDF和DOCX大文档无异常 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开50M、100M、200M、300M左右的PDF大文档 - needs_accessible_name: false - - step_type: action - description: 2. 打开10M、20M、50M、100M左右的DOCX大文档 - needs_accessible_name: false - - step_type: assert - description: 1. 正常打开,点击菜单无异常 - needs_accessible_name: false - - step_type: assert - description: 2. 正常打开,点击菜单无异常 - needs_accessible_name: false -- id: case_1580489 - name: 注释内容达到上限后保存 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/缩略图/注释(#114167) - description: 注释内容达到上限后保存 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档,分别添加高亮注释和图标注释,输入注释内容均达到上限1500字 - needs_accessible_name: false - - step_type: action - description: 2. 按快捷键Ctrl+S保存 - needs_accessible_name: false - - step_type: action - description: 3. 关闭文档,再打开 - needs_accessible_name: false - - step_type: assert - description: 1. 添加成功 - needs_accessible_name: false - - step_type: assert - description: 2. 弹出“保存成功”提示 - needs_accessible_name: false - - step_type: assert - description: 3. 高亮注释和图标注释显示正确 - needs_accessible_name: false -- id: case_1580481 - name: 打印预览显示正常 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/右键菜单(#114157) - description: 打印预览显示正常 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开横向显示的PDF格式文档(可以通过ppt转化) - needs_accessible_name: false - - step_type: assert - description: 2. 点击打印,进入打印预览界面,查看预览图片的显示 - needs_accessible_name: false - - step_type: action - description: 3. 打开普通纵向显示的PDF格式文档 - needs_accessible_name: false - - step_type: assert - description: 4. 点击打印,进入打印预览界面,查看预览图片的显示 - needs_accessible_name: false - - step_type: assert - description: 1. 界面内容显示正常 - needs_accessible_name: false - - step_type: assert - description: 2. 正常横向显示,不会被纵向拉伸 - needs_accessible_name: false - - step_type: assert - description: 3. 界面内容显示正常 - needs_accessible_name: false - - step_type: assert - description: 4. 显示正常 - needs_accessible_name: false -- id: case_1580443 - name: 幻灯片播放时全屏展示播放 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放时全屏展示播放 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: assert - description: '1.' - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放,播放内容不会进行拉伸,顶格展示 - needs_accessible_name: false -- id: case_1580439 - name: 幻灯片播放时UI - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放时UI - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 菜单栏显示 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放,播放内容不会进行拉伸,顶格展示 - needs_accessible_name: false - - step_type: assert - description: 3. 鼠标不在菜单栏上,3秒自动隐藏(鼠标在菜单栏上,一直显示不隐藏) - needs_accessible_name: false -- id: case_1580437 - name: 幻灯片播放默认效果 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放默认效果 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 幻灯片默认暂停播放 - needs_accessible_name: false -- id: case_1580435 - name: 幻灯片切换 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片切换 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 鼠标左击点击幻灯片任意位置 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. 切换到下一页 - needs_accessible_name: false -- id: case_1580433 - name: 键盘交互-幻灯片切换 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 键盘交互-幻灯片切换 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 点击方向键下键或者右键 - needs_accessible_name: false - - step_type: action - description: 4. 点击方向键上键或者左键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. 切换到下一页 - needs_accessible_name: false - - step_type: assert - description: 4. 切换到上一页 - needs_accessible_name: false -- id: case_1580431 - name: 幻灯片播放 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 点击菜单键中播放按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. 按钮状态变成暂停,幻灯片开始播放 - needs_accessible_name: false -- id: case_1580429 - name: 幻灯片手动点击最后一页 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片手动点击最后一页 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 手动点击到最后一页幻灯片 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. toast提示“已是最后一页”3秒消失,向后按钮置灰 - needs_accessible_name: false -- id: case_1580427 - name: 幻灯片播放到最后一页 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放到最后一页 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 播放到最后一页点击往下翻时 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. toast提示“已是第一页”3秒后小时,向后按钮置灰 - needs_accessible_name: false -- id: case_1580425 - name: 幻灯片自动播放 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片自动播放 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 自动播放时,播放到最后一页时,自动暂停 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. 菜单键中暂停按钮变成播放按钮,再次点击播放从第一页开始播放 - needs_accessible_name: false -- id: case_1580417 - name: 幻灯片播放到最后一页-滚轮 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放到最后一页-滚轮 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 播放到最后一页滚轮向下滚动 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. toast提示“已是最后一页”3秒后小时,向后按钮置灰 - needs_accessible_name: false -- id: case_1580415 - name: 幻灯片播放到最后一页-下键 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放到最后一页-下键 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 播放到最后一页键盘点击下键或右键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. toast提示“已是最后一页”3秒后小时,向后按钮置灰 - needs_accessible_name: false -- id: case_1580413 - name: 幻灯片播放切换-键盘 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放切换-键盘 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 点击自动播放按钮 - needs_accessible_name: false - - step_type: action - description: 4. 点击方向键下键或者右键 - needs_accessible_name: false - - step_type: action - description: 5. 点击方向键上键或者左键 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. 幻灯片开始播放 - needs_accessible_name: false - - step_type: assert - description: 4. 切换到下一页 - needs_accessible_name: false - - step_type: assert - description: 5. 切换到上一页 - needs_accessible_name: false -- id: case_1580411 - name: 幻灯片播放切换-鼠标滚轮 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/社区需求(#114155) - description: 幻灯片播放切换-鼠标滚轮 - status: active - reason: '' - steps: - - step_type: action - description: 1. 依次在PDF,DJVU,DOCX任意位置右击 - needs_accessible_name: false - - step_type: action - description: 2. 点击幻灯片放映 - needs_accessible_name: false - - step_type: action - description: 3. 点击自动播放按钮 - needs_accessible_name: false - - step_type: action - description: 4. 鼠标滚轮上下滚动 - needs_accessible_name: false - - step_type: assert - description: 1. 弹框展示 - needs_accessible_name: false - - step_type: assert - description: 2. 进入幻灯片播放界面 - needs_accessible_name: false - - step_type: assert - description: 3. 幻灯片开始播放 - needs_accessible_name: false - - step_type: assert - description: 4. 切换到上一页/下一页 - needs_accessible_name: false -- id: case_1580409 - name: 1、快捷键_Ctrl+Home到首页 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/其它交互(#114177) - description: 1、快捷键_Ctrl+Home到首页 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 当前页非首页,同时按快捷键Ctrl+Home(笔记本Ctrl+左键),查看右侧详情页 - needs_accessible_name: false - - step_type: action - description: 2. 点击缩略图按钮,进入缩略图页 - needs_accessible_name: false - - step_type: action - description: 3. 点击缩略图-书签按钮,进入书签页 - needs_accessible_name: false - - step_type: action - description: 4. 点击缩略图-注释按钮,进入注释页 - needs_accessible_name: false - - step_type: assert - description: 1. 右侧详情页定位到首页 - needs_accessible_name: false - - step_type: assert - description: 2. 缩略图-缩略图页 高亮定位到文件的首页 - needs_accessible_name: false - - step_type: assert - description: 3. 缩略图-书签页 跟随高亮定位到文件的首页 - needs_accessible_name: false - - step_type: assert - description: 4. 缩略图-注释 没有高亮定位到任何页 - needs_accessible_name: false -- id: case_1580407 - name: 2、快捷键_Ctrl+End到末尾 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/其它交互(#114177) - description: 2、快捷键_Ctrl+End到末尾 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 当前页非尾页,同时按快捷键Ctrl+End(笔记本Ctrl+右键),查看右侧详情页 - needs_accessible_name: false - - step_type: action - description: 2. 点击缩略图按钮,进入缩略图页 - needs_accessible_name: false - - step_type: action - description: 3. 点击缩略图-书签按钮,进入书签页 - needs_accessible_name: false - - step_type: action - description: 4. 点击缩略图-注释按钮,进入注释页 - needs_accessible_name: false - - step_type: assert - description: 1. 右侧详情页定位到末尾 - needs_accessible_name: false - - step_type: assert - description: 2. 缩略图-缩略图页 高亮定位到文件的末尾 - needs_accessible_name: false - - step_type: assert - description: 3. 缩略图-书签页 跟随高亮定位到文件的末尾 - needs_accessible_name: false - - step_type: assert - description: 4. 缩略图-注释 没有高亮定位到任何页 - needs_accessible_name: false -- id: case_1580405 - name: 3、快捷键_Ctrl+Home到首页,首页、尾页没有书签 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/其它交互(#114177) - description: 3、快捷键_Ctrl+Home到首页,首页、尾页没有书签 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 当前页非首页,同时按快捷键Ctrl+Home,查看右侧详情页 - needs_accessible_name: false - - step_type: action - description: 2. 点击缩略图按钮,进入缩略图页 - needs_accessible_name: false - - step_type: action - description: 3. 点击缩略图-书签按钮,进入书签页 - needs_accessible_name: false - - step_type: action - description: 4. 点击缩略图-注释按钮,进入注释页 - needs_accessible_name: false - - step_type: assert - description: 1. 右侧详情页定位到首页 - needs_accessible_name: false - - step_type: assert - description: 2. 缩略图-缩略图页 高亮定位到文件的首页 - needs_accessible_name: false - - step_type: assert - description: 3. 缩略图-书签页 没有高亮定位到任何页 - needs_accessible_name: false - - step_type: assert - description: 4. 缩略图-注释 没有高亮定位到任何页 - needs_accessible_name: false -- id: case_1580363 - name: 1、视图保持_新安装新标签页首次打开文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 1、视图保持_新安装新标签页首次打开文档 - status: active - reason: '' - steps: - - step_type: action - description: 1. 在新标签页首次打开文档A - needs_accessible_name: false - - step_type: assert - description: 1. 文档A页面视图 默认为适合页面 - needs_accessible_name: false -- id: case_1580353 - name: 6、视图保持_调整页面视图后新窗口打开新文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 6、视图保持_调整页面视图后新窗口打开新文档 - status: active - reason: '' - steps: - - step_type: action - description: 1. 打开文档A且调整页面视图为A(适合页面) - needs_accessible_name: false - - step_type: action - description: 2. 在新窗口打开文档B - needs_accessible_name: false - - step_type: assert - description: 1. 调整页面视图成功 - needs_accessible_name: false - - step_type: assert - description: 2. 新打开的文档B页面视图为A(适合页面) - needs_accessible_name: false -- id: case_1580331 - name: 17、视图保持_修改页面视图后在多标签页打开调整过页面视图的文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 17、视图保持_修改页面视图后在多标签页打开调整过页面视图的文档 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 窗口1查看文档C且调整页面视图C(200%),窗口2查看文档D且调整页面视图D(适应宽度) - needs_accessible_name: false - - step_type: action - description: 2. 两个窗口分别在新标签页打开文档A、文档B - needs_accessible_name: false - - step_type: assert - description: 1. 调整页面视图成功 - needs_accessible_name: false - - step_type: assert - description: 2. 文档A页面视图为A(适合页面),文档B页面视图为B(25%) - needs_accessible_name: false -- id: case_1580329 - name: 18、视图保持_修改页面视图后在多窗口打开调整过页面视图的文档 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/文档视图/操作(#114159) - description: 18、视图保持_修改页面视图后在多窗口打开调整过页面视图的文档 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 窗口1查看文档C且调整页面视图C(300%),窗口2查看文档D且调整页面视图D(75%) - needs_accessible_name: false - - step_type: action - description: 2. 分别在两个新窗口打开文档A、文档B - needs_accessible_name: false - - step_type: assert - description: 1. 调整页面视图成功 - needs_accessible_name: false - - step_type: assert - description: 2. 文档A页面视图为A(双页显示、默认大小),文档B页面视图为B(双页显示、500%) - needs_accessible_name: false -- id: case_1580327 - name: 1、最小尺寸_检查 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/窗口管理(#114139) - description: 1、最小尺寸_检查 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 检查窗口尺寸 - needs_accessible_name: false - - step_type: assert - description: 2. 打开新窗口,检查新窗口尺寸 - needs_accessible_name: false - - step_type: assert - description: 3. 检查各个子页面 - needs_accessible_name: false - - step_type: assert - description: 1. 应用窗口尺寸680*300 - needs_accessible_name: false - - step_type: assert - description: 2. 新窗口尺寸为默认尺寸 - needs_accessible_name: false - - step_type: assert - description: 3. 无遮挡、无压缩变形 - needs_accessible_name: false -- id: case_1580325 - name: 3、最小尺寸_窗口最大化之后再点击最小化按钮 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/窗口管理(#114139) - description: 3、最小尺寸_窗口最大化之后再点击最小化按钮 - status: active - reason: '' - steps: - - step_type: action - description: 1. 窗口最大化之后再点击最小化按钮 - needs_accessible_name: false - - step_type: assert - description: 1. 窗口尺寸为最小窗口680*300 - needs_accessible_name: false -- id: case_1580323 - name: 4、最小尺寸_关闭后再次打开应用 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/窗口管理(#114139) - description: 4、最小尺寸_关闭后再次打开应用 - status: active - reason: '' - steps: - - step_type: action - description: 1. 关闭后再次打开应用 - needs_accessible_name: false - - step_type: assert - description: 1. 窗口尺寸为最小窗口680*300 - needs_accessible_name: false -- id: case_1580309 - name: 【文档查看器紧凑模式】启用紧凑模式 - module: /V25_2500(测试部专用)/B类解耦商店应用/文档查看器/交互/其它交互(#114177) - description: 【文档查看器紧凑模式】启用紧凑模式 - status: active - reason: '' - steps: - - step_type: assert - description: 1. 启动【文档查看器】检查以下控件: - needs_accessible_name: false - - step_type: action - description: ①标题栏侧边栏按钮 - needs_accessible_name: false - - step_type: action - description: ②查找界面的向上及向下查找 - needs_accessible_name: false - - step_type: action - description: ③侧边栏界面的翻页按钮 - needs_accessible_name: false - - step_type: action - description: ④侧边栏宽度 - needs_accessible_name: false - - step_type: action - description: ⑤侧边栏tab按钮大小 - needs_accessible_name: false - - step_type: action - description: ⑥添加书签、添加注释按钮高度 - needs_accessible_name: false - - step_type: action - description: ⑦页码背景高度 - needs_accessible_name: false - - step_type: action - description: ⑧退出全屏图标大小适配 - needs_accessible_name: false - - step_type: action - description: 2. 进行涉及紧凑模式调整的控件点击和跳转 - needs_accessible_name: false - - step_type: assert - description: 3. 切换应用主题后,查看步骤一控件 - needs_accessible_name: false - - step_type: assert - description: 1. 控件呈现紧凑模式 - needs_accessible_name: false - - step_type: assert - description: 2. 调整后的控件点击响应正常,页面切换流畅 - needs_accessible_name: false - - step_type: assert - description: 3. 主题切换后,紧凑模式控件显示正常 - needs_accessible_name: false diff --git a/tests/at/dump/runtime.yaml b/tests/at/dump/runtime.yaml deleted file mode 100644 index ef26b129..00000000 --- a/tests/at/dump/runtime.yaml +++ /dev/null @@ -1,3682 +0,0 @@ -version: '1.0' -app: deepin-reader -type: runtime -tree: -- role: form - name: Form_DMainWindow - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - enabled - - focusable - - resizable - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_Central - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_widget_1 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_CentralNavPage - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - children: - - role: label - name: Label_Drag documents here - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: label - name: 'Label_format supported: PDF,DJVU,DOCX,XPS' - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: button - name: Button_SelectFile - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - ShowMenu - index_in_parent: 2 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: image - name: Label_Icon - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 3 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: form - name: Form_CentralDocPage - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_DocSheet - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_SheetSidebar - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - enabled - - focusable - - sensitive - source: runtime - children: - - role: form - name: Form_SearchResWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - children: - - role: label - name: 无搜索结果 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - focusable - - manages_descendants - - sensitive - source: runtime - - role: check box - name: Button_thumbnail - object_name: '' - accessible_id: '' - description: 缩略图 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 1 - states: - - checkable - - enabled - - focusable - - sensitive - source: runtime - - role: check box - name: Button_catalog - object_name: '' - accessible_id: '' - description: 目录 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 2 - states: - - checkable - - checked - - enabled - - focusable - - sensitive - source: runtime - - role: check box - name: Button_bookmark - object_name: '' - accessible_id: '' - description: 书签 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 3 - states: - - checkable - - enabled - - focusable - - sensitive - source: runtime - - role: check box - name: Button_annotation - object_name: '' - accessible_id: '' - description: 注释 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 4 - states: - - checkable - - enabled - - focusable - - sensitive - source: runtime - - role: check box - name: Button_search - object_name: '' - accessible_id: '' - description: Search - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 5 - states: - - checkable - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_BookMarkWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 6 - states: - - enabled - - sensitive - source: runtime - children: - - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - focusable - - manages_descendants - - sensitive - source: runtime - - role: button - name: Button_BookmarkAdd - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - ShowMenu - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_BookMarkLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_NotesWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 7 - states: - - enabled - - sensitive - source: runtime - children: - - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - focusable - - manages_descendants - - sensitive - source: runtime - children: - - role: list item - name: '0' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 0 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '1' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 1 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '2' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 2 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '3' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 3 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '4' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 4 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '5' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 5 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '6' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 6 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '7' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 7 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '8' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 8 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '9' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 9 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '10' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 10 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '11' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 11 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '12' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 12 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '13' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 13 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '14' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 14 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '15' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 15 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '16' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 16 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '17' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 17 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '18' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 18 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '19' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 19 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '20' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 20 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '21' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 21 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '22' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 22 - states: - - enabled - - focusable - - focused - - selectable - - selected - - sensitive - - showing - - transient - - visible - source: runtime - - role: button - name: Button_NotesAdd - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - ShowMenu - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_NotesLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_ThumbnailWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 8 - states: - - enabled - - sensitive - source: runtime - children: - - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - focusable - - manages_descendants - - sensitive - source: runtime - children: - - role: list item - name: '0' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 0 - states: - - enabled - - focusable - - focused - - selectable - - selected - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '1' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 1 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '2' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 2 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '3' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 3 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '4' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 4 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '5' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 5 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '6' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 6 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '7' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 7 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '8' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 8 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '9' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 9 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '10' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 10 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '11' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 11 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '12' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 12 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '13' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 13 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '14' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 14 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '15' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 15 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '16' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 16 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '17' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 17 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '18' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 18 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '19' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 19 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '20' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 20 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '21' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 21 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '22' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 22 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '23' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 23 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '24' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 24 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '25' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 25 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '26' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 26 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '27' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 27 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '28' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 28 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '29' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 29 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '30' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 30 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '31' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 31 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '32' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 32 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '33' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 33 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '34' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 34 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '35' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 35 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '36' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 36 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '37' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 37 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '38' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 38 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '39' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 39 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '40' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 40 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '41' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 41 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '42' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 42 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '43' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 43 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '44' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 44 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '45' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 45 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '46' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 46 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '47' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 47 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '48' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 48 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '49' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 49 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '50' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 50 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '51' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 51 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '52' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 52 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '53' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 53 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '54' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 54 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '55' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 55 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '56' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 56 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '57' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 57 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '58' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 58 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '59' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 59 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '60' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 60 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '61' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 61 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '62' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 62 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '63' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 63 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '64' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 64 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '65' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 65 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '66' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 66 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '67' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 67 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '68' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 68 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '69' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 69 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '70' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 70 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '71' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 71 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '72' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 72 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '73' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 73 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '74' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 74 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '75' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 75 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '76' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 76 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '77' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 77 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '78' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 78 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '79' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 79 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '80' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 80 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '81' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 81 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '82' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 82 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '83' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 83 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '84' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 84 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '85' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 85 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '86' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 86 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '87' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 87 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '88' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 88 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '89' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 89 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '90' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 90 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '91' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 91 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '92' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 92 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '93' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 93 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '94' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 94 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '95' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 95 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '96' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 96 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '97' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 97 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '98' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 98 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '99' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 99 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: form - name: Form_Paging - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - source: runtime - children: - - role: label - name: Label_TotalPage - object_name: '' - accessible_id: '' - description: '344' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: form - name: Form_Page - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - source: runtime - children: - - role: text - name: pageEdit - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - editable - - enabled - - focusable - - sensitive - source: runtime - - role: label - name: CurrentPage - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: button - name: Button_ThumbnailPre - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 3 - states: - - focusable - source: runtime - - role: button - name: Button_ThumbnailNext - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 4 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_ThumbnailLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_CatalogWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 9 - states: - - enabled - - sensitive - source: runtime - children: - - role: label - name: Label_title - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: tree - name: View_CatalogTree - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - manages_descendants - - sensitive - source: runtime - children: - - role: table column header - name: '1' - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - - role: table column header - name: '2' - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - source: runtime - - role: table cell - name: JavaScript Application Design - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 2 - states: - - enabled - - focusable - - selectable - - selected - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '1' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 3 - states: - - enabled - - focusable - - selectable - - selected - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: brief contents - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 4 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '8' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 5 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: contents - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 6 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '10' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 7 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: foreword - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 8 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '16' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 9 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: preface - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 10 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '18' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 11 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: acknowledgments - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 12 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '20' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 13 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: about this book - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 14 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '22' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 15 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: about the author - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 16 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '26' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 17 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: about the cover illustration - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 18 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '27' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 19 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: Part 1 Build processes - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 20 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '30' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 21 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: Part 2 Managing complexity - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 22 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '126' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 23 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: appendix A Modules in Node.js - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 24 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '302' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 25 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: appendix B Introduction to Grunt - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 26 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '305' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 27 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: appendix C Picking your build tool - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 28 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '313' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 29 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: appendix D JavaScript code quality guide - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 30 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '322' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 31 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: index - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 32 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '336' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 33 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: JavaScript Application Design-back - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 34 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '344' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 35 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: maps and atlases, especially of North America. His work as - a mapmaker sparked an interest in local d - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 36 - states: - - enabled - - focusable - - focused - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '27' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 37 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: 'a mapmaker sparked an interest in local dress customs of - the lands he surveyed and mapped; they are ' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 38 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '27' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 39 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: form - name: Form_SheetBrowser - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_qt_scrollarea_hcontainer - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_widget_2 - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_qt_scrollarea_vcontainer - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DocTabBar - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - source: runtime - children: - - role: page tab list - name: normal.pdf - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - children: - - role: page tab - name: normal.pdf - object_name: '' - accessible_id: '' - description: normal.pdf - actions: - - Press - index_in_parent: 0 - states: - - enabled - - focused - - selectable - - selected - - sensitive - source: runtime - - role: button - name: 向左滚动 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - focusable - source: runtime - - role: button - name: 向右滚动 - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 2 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: button - name: DTabBarAddButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - focusable - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 3 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_widget_3 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DMainWindowTitlebar - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: label - name: DTitlebarCenterArea - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DTitlebarTopHorizontalLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_DTitlebarHorizontalLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_DTitlebarLeftArea - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 3 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: button - name: DTitlebarIconLabel - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_TitleWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: check box - name: '' - object_name: '' - accessible_id: '' - description: 缩略图 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 0 - states: - - checkable - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_widget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_scaleEdit_P - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - children: - - role: text - name: DLineEditChildLineEdit - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - editable - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 2 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: label - name: normal.pdf - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - read_only - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DTitlebarRightArea - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 4 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_DTitlebarButtonArea - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: button - name: DTitlebarDWindowOptionButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 0 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: DTitlebarDWindowMinButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: DTitlebarDWindowMaxButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 2 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: DTitlebarDWindowQuitFullscreenButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 3 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: button - name: DTitlebarDWindowCloseButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 4 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DMainWindowTitleShadowLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 3 - states: - - enabled - - sensitive - - showing - - visible - source: runtime -- role: popup menu - name: DTitlebarMainMenu - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - resizable - - sensitive - source: runtime -- role: popup menu - name: DTitlebarThemeMenu - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - resizable - - sensitive - source: runtime - children: - - role: menu item - name: 浅色 - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - index_in_parent: 0 - states: - - checkable - - enabled - - sensitive - source: runtime - - role: menu item - name: 深色 - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - index_in_parent: 1 - states: - - checkable - - enabled - - sensitive - source: runtime - - role: menu item - name: 跟随系统 - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - index_in_parent: 2 - states: - - checkable - - checked - - enabled - - sensitive - source: runtime -- role: form - name: Form_Tips - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 3 - states: - - enabled - - sensitive - source: runtime diff --git a/tests/at/dump/scanned_gaps.yaml b/tests/at/dump/scanned_gaps.yaml deleted file mode 100644 index d88dd899..00000000 --- a/tests/at/dump/scanned_gaps.yaml +++ /dev/null @@ -1,2736 +0,0 @@ ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFXEU_InsertWord -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/pwl/cpwl_edit_impl.h -base_classes: -- IFX_Edit_UndoItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFXEU_InsertReturn -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/pwl/cpwl_edit_impl.h -base_classes: -- IFX_Edit_UndoItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFXEU_ReplaceSelection -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/pwl/cpwl_edit_impl.h -base_classes: -- IFX_Edit_UndoItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFXEU_Backspace -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/pwl/cpwl_edit_impl.h -base_classes: -- IFX_Edit_UndoItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFXEU_Delete -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/pwl/cpwl_edit_impl.h -base_classes: -- IFX_Edit_UndoItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFXEU_Clear -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/pwl/cpwl_edit_impl.h -base_classes: -- IFX_Edit_UndoItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFXEU_InsertText -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/pwl/cpwl_edit_impl.h -base_classes: -- IFX_Edit_UndoItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFX_KeyValue -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fxjs/cfx_keyvalue.h -base_classes: -- CFX_Value -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: vertex_dist_cmd -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/third_party/agg23/agg_vertex_sequence.h -base_classes: -- vertex_dist -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfTextAnnot -source_file: 3rdparty/deepin-pdfium/include/dpdfannot.h -base_classes: -- DPdfAnnot -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfSquareAnnot -source_file: 3rdparty/deepin-pdfium/include/dpdfannot.h -base_classes: -- DPdfAnnot -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfCIRCLEAnnot -source_file: 3rdparty/deepin-pdfium/include/dpdfannot.h -base_classes: -- DPdfAnnot -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfHightLightAnnot -source_file: 3rdparty/deepin-pdfium/include/dpdfannot.h -base_classes: -- DPdfAnnot -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfLinkAnnot -source_file: 3rdparty/deepin-pdfium/include/dpdfannot.h -base_classes: -- DPdfAnnot -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfWidgetAnnot -source_file: 3rdparty/deepin-pdfium/include/dpdfannot.h -base_classes: -- DPdfAnnot -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfUnknownAnnot -source_file: 3rdparty/deepin-pdfium/include/dpdfannot.h -base_classes: -- DPdfAnnot -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfUnderlineAnnot -source_file: 3rdparty/deepin-pdfium/include/dpdfannot.h -base_classes: -- DPdfAnnot -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfDoc -source_file: 3rdparty/deepin-pdfium/include/dpdfdoc.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfMutexLocker -source_file: 3rdparty/deepin-pdfium/include/dpdfglobal.h -base_classes: -- QMutexLocker -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DPdfPage -source_file: 3rdparty/deepin-pdfium/include/dpdfpage.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/base/optional.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TCoverageFormat1 -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fpdfapi/font/cfx_cttgsubtable.h -base_classes: -- TCoverageFormatBase -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TCoverageFormat2 -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fpdfapi/font/cfx_cttgsubtable.h -base_classes: -- TCoverageFormatBase -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TSubTable1 -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fpdfapi/font/cfx_cttgsubtable.h -base_classes: -- TSubTableBase -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TSubTable2 -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fpdfapi/font/cfx_cttgsubtable.h -base_classes: -- TSubTableBase -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_string_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_string_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_string_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_string_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/bytestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: IFX_ArchiveStream -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/fx_stream.h -base_classes: -- IFX_WriteStream -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: IFX_SeekableWriteStream -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/fx_stream.h -base_classes: -- IFX_StreamWithSize -- IFX_RetainableWriteStream -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: IFX_SeekableReadStream -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/fx_stream.h -base_classes: -- IFX_StreamWithSize -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: IFX_SeekableStream -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/fx_stream.h -base_classes: -- IFX_SeekableReadStream -- IFX_SeekableWriteStream -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_string_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_string_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_string_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_string_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: hash -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcrt/widestring.h -base_classes: -- __hash_base -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFX_RetainableGraphStateData -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxge/cfx_graphstatedata.h -base_classes: -- CFX_GraphStateData -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFX_RetainablePathData -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxge/cfx_pathdata.h -base_classes: -- CFX_PathData -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CPDF_NonConstObjectWalker -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fpdfapi/parser/cpdf_object_walker.h -base_classes: -- CPDF_ObjectWalker -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: FlatePredictorScanlineDecoder -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxcodec/flate/flatemodule.cpp -base_classes: -- FlateScanlineDecoder -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CFX_BilinearMatrix -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/core/fxge/dib/cfx_imagetransformer.cpp -base_classes: -- CPDF_FixedMatrix -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AutoClosedQCommand -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/cpdfsdk_appstream.cpp -base_classes: -- AutoClosedCommand -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CPDF_PageExporter -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/fpdf_ppo.cpp -base_classes: -- CPDF_PageOrganizer -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CPDF_NPageToOneExporter -source_file: 3rdparty/deepin-pdfium/src/3rdparty/pdfium/pdfium/fpdfsdk/fpdf_ppo.cpp -base_classes: -- CPDF_PageOrganizer -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Holder -source_file: 3rdparty/deepin-pdfium/src/dpdfglobal.cpp -base_classes: -- HolderBase -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Holder -source_file: 3rdparty/deepin-pdfium/src/dpdfglobal.cpp -base_classes: -- HolderBase -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Application -source_file: reader/Application.cpp -base_classes: -- DApplication -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Application -source_file: reader/Application.h -base_classes: -- DApplication -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: MainWindow -source_file: reader/MainWindow.cpp -base_classes: -- Dtk::Widget::DMainWindow -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: -- DMainWindow -- DMainWindow ---- -class_name: MainWindow -source_file: reader/MainWindow.h -base_classes: -- Dtk::Widget::DMainWindow -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DBusObject -source_file: reader/app/DBusObject.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DBusObject -source_file: reader/app/DBusObject.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Database -source_file: reader/app/Database.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Database -source_file: reader/app/Database.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TMFunctionThread -source_file: reader/app/TMFunctionThread.cpp -base_classes: -- QThread -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TMFunctionThread -source_file: reader/app/TMFunctionThread.h -base_classes: -- QThread -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Utils -source_file: reader/app/Utils.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Utils -source_file: reader/app/Utils.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleMainWindow -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleCentral -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleCentralDocPage -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleCentralNavPage -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDocSheet -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDocTabBar -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleTitleWidget -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleSheetSidebar -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleSheetBrowser -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleThumbnailWidget -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleCatalogWidget -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleBookMarkWidget -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleNotesWidget -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleSearchResWidget -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleQFrame -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleQWidget -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleQPushButton -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleQSlider -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -- QAccessibleValueInterface -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDFrame -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDWidget -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDBackgroundGroup -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDSwitchButton -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDFloatingButton -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDSearchEdit -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDPushButton -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDIconButton -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDCheckBox -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDCommandLinkButton -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDLabel -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -- QAccessibleTextInterface -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDTitlebar -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDToolButton -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDDialog -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AccessibleDFileDialog -source_file: reader/app/accessible.h -base_classes: -- QAccessibleWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserAnnotation -source_file: reader/browser/BrowserAnnotation.cpp -base_classes: -- QGraphicsItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserAnnotation -source_file: reader/browser/BrowserAnnotation.h -base_classes: -- QGraphicsItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ReadMagnifierManager -source_file: reader/browser/BrowserMagniFier.cpp -base_classes: -- QThread -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserMagniFier -source_file: reader/browser/BrowserMagniFier.cpp -base_classes: -- QLabel -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ReadMagnifierManager -source_file: reader/browser/BrowserMagniFier.h -base_classes: -- QThread -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserMagniFier -source_file: reader/browser/BrowserMagniFier.h -base_classes: -- QLabel -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserMenu -source_file: reader/browser/BrowserMenu.cpp -base_classes: -- DMenu -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserMenu -source_file: reader/browser/BrowserMenu.h -base_classes: -- DMenu -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserPage -source_file: reader/browser/BrowserPage.cpp -base_classes: -- QGraphicsItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserPage -source_file: reader/browser/BrowserPage.h -base_classes: -- QGraphicsItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserWord -source_file: reader/browser/BrowserWord.cpp -base_classes: -- QGraphicsItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BrowserWord -source_file: reader/browser/BrowserWord.h -base_classes: -- QGraphicsItem -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PageRenderThread -source_file: reader/browser/PageRenderThread.cpp -base_classes: -- QThread -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PageRenderThread -source_file: reader/browser/PageRenderThread.h -base_classes: -- QThread -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PageSearchThread -source_file: reader/browser/PageSearchThread.cpp -base_classes: -- QThread -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PageSearchThread -source_file: reader/browser/PageSearchThread.h -base_classes: -- QThread -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SheetBrowser -source_file: reader/browser/SheetBrowser.cpp -base_classes: -- Dtk::Widget::DGraphicsView -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SheetBrowser -source_file: reader/browser/SheetBrowser.h -base_classes: -- Dtk::Widget::DGraphicsView -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DjVuPage -source_file: reader/document/DjVuModel.cpp -base_classes: -- Page -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DjVuDocument -source_file: reader/document/DjVuModel.cpp -base_classes: -- Document -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DjVuPage -source_file: reader/document/DjVuModel.h -base_classes: -- Page -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DjVuDocument -source_file: reader/document/DjVuModel.h -base_classes: -- Document -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Annotation -source_file: reader/document/Model.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: FormField -source_file: reader/document/Model.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Page -source_file: reader/document/Model.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Document -source_file: reader/document/Model.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Annotation -source_file: reader/document/Model.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: FormField -source_file: reader/document/Model.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Page -source_file: reader/document/Model.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Document -source_file: reader/document/Model.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PDFAnnotation -source_file: reader/document/PDFModel.cpp -base_classes: -- Annotation -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PDFPage -source_file: reader/document/PDFModel.cpp -base_classes: -- Page -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PDFDocument -source_file: reader/document/PDFModel.cpp -base_classes: -- Document -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PDFAnnotation -source_file: reader/document/PDFModel.h -base_classes: -- Annotation -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PDFPage -source_file: reader/document/PDFModel.h -base_classes: -- Page -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PDFDocument -source_file: reader/document/PDFModel.h -base_classes: -- Document -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: XpsDocumentAdapter -source_file: reader/document/XpsDocumentAdapter.cpp -base_classes: -- Document -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: XpsPageAdapter -source_file: reader/document/XpsDocumentAdapter.cpp -base_classes: -- Page -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: XpsDocumentAdapter -source_file: reader/document/XpsDocumentAdapter.h -base_classes: -- Document -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: XpsPageAdapter -source_file: reader/document/XpsDocumentAdapter.h -base_classes: -- Page -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: MLogger -source_file: reader/logger.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: MLogger -source_file: reader/logger.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BookMarkDelegate -source_file: reader/sidebar/BookMarkDelegate.cpp -base_classes: -- DStyledItemDelegate -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DStyledItemDelegate ---- -class_name: BookMarkDelegate -source_file: reader/sidebar/BookMarkDelegate.h -base_classes: -- DStyledItemDelegate -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CatalogTreeView -source_file: reader/sidebar/CatalogTreeView.cpp -base_classes: -- DTreeView -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ActiveProxyStyle -source_file: reader/sidebar/CatalogTreeView.cpp -base_classes: -- QProxyStyle -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CatalogModel -source_file: reader/sidebar/CatalogTreeView.cpp -base_classes: -- QStandardItemModel -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: CatalogTreeView -source_file: reader/sidebar/CatalogTreeView.h -base_classes: -- DTreeView -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: NotesDelegate -source_file: reader/sidebar/NotesDelegate.cpp -base_classes: -- DStyledItemDelegate -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DStyledItemDelegate ---- -class_name: NotesDelegate -source_file: reader/sidebar/NotesDelegate.h -base_classes: -- DStyledItemDelegate -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ReadImageTask -source_file: reader/sidebar/ReaderImageThreadPoolManager.cpp -base_classes: -- QRunnable -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ReaderImageThreadPoolManager -source_file: reader/sidebar/ReaderImageThreadPoolManager.cpp -base_classes: -- QThreadPool -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Holder -source_file: reader/sidebar/ReaderImageThreadPoolManager.cpp -base_classes: -- HolderBase -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: Holder -source_file: reader/sidebar/ReaderImageThreadPoolManager.cpp -base_classes: -- HolderBase -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ReadImageTask -source_file: reader/sidebar/ReaderImageThreadPoolManager.h -base_classes: -- QRunnable -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ReaderImageThreadPoolManager -source_file: reader/sidebar/ReaderImageThreadPoolManager.h -base_classes: -- QThreadPool -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SearchResDelegate -source_file: reader/sidebar/SearchResDelegate.cpp -base_classes: -- DStyledItemDelegate -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DStyledItemDelegate ---- -class_name: SearchResDelegate -source_file: reader/sidebar/SearchResDelegate.h -base_classes: -- DStyledItemDelegate -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SideBarImageListView -source_file: reader/sidebar/SideBarImageListview.h -base_classes: -- DListView -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SideBarImageViewModel -source_file: reader/sidebar/SideBarImageViewModel.cpp -base_classes: -- QAbstractListModel -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SideBarImageViewModel -source_file: reader/sidebar/SideBarImageViewModel.h -base_classes: -- QAbstractListModel -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ThumbnailDelegate -source_file: reader/sidebar/ThumbnailDelegate.cpp -base_classes: -- DStyledItemDelegate -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DStyledItemDelegate ---- -class_name: ThumbnailDelegate -source_file: reader/sidebar/ThumbnailDelegate.h -base_classes: -- DStyledItemDelegate -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DocSheet -source_file: reader/uiframe/DocSheet.cpp -base_classes: -- Dtk::Widget::DSplitter -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: LoadingWidget -source_file: reader/uiframe/DocSheet.cpp -base_classes: -- QWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DocSheet -source_file: reader/uiframe/DocSheet.h -base_classes: -- Dtk::Widget::DSplitter -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: LoadingWidget -source_file: reader/uiframe/DocSheet.h -base_classes: -- QWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: DocTabBar -source_file: reader/uiframe/DocTabBar.cpp -base_classes: -- DTabBar -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DTabBar ---- -class_name: DocTabBar -source_file: reader/uiframe/DocTabBar.h -base_classes: -- DTabBar -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SheetRenderer -source_file: reader/uiframe/SheetRenderer.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SheetRenderer -source_file: reader/uiframe/SheetRenderer.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TitleMenu -source_file: reader/uiframe/TitleMenu.cpp -base_classes: -- DMenu -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TitleMenu -source_file: reader/uiframe/TitleMenu.h -base_classes: -- DMenu -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: AttrScrollWidget -source_file: reader/widgets/AttrScrollWidget.cpp -base_classes: -- Dtk::Widget::DFrame -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: -- DFrame ---- -class_name: AttrScrollWidget -source_file: reader/widgets/AttrScrollWidget.h -base_classes: -- Dtk::Widget::DFrame -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BaseWidget -source_file: reader/widgets/BaseWidget.cpp -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: BaseWidget -source_file: reader/widgets/BaseWidget.h -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ColorWidgetAction -source_file: reader/widgets/ColorWidgetAction.cpp -base_classes: -- QWidgetAction -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ColorWidgetAction -source_file: reader/widgets/ColorWidgetAction.h -base_classes: -- QWidgetAction -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: EncryptionPage -source_file: reader/widgets/EncryptionPage.h -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: FileAttrWidget -source_file: reader/widgets/FileAttrWidget.cpp -base_classes: -- DAbstractDialog -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DAbstractDialog ---- -class_name: ImageWidget -source_file: reader/widgets/FileAttrWidget.cpp -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: FileAttrWidget -source_file: reader/widgets/FileAttrWidget.h -base_classes: -- DAbstractDialog -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: FindWidget -source_file: reader/widgets/FindWidget.cpp -base_classes: -- DFloatingWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DFloatingWidget ---- -class_name: FindWidget -source_file: reader/widgets/FindWidget.h -base_classes: -- DFloatingWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: HandleMenu -source_file: reader/widgets/HandleMenu.h -base_classes: -- DMenu -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PagingWidget -source_file: reader/widgets/PagingWidget.h -base_classes: -- BaseWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ProgressDialog -source_file: reader/widgets/ProgressDialog.cpp -base_classes: -- Dtk::Widget::DDialog -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: -- DDialog ---- -class_name: ProgressDialog -source_file: reader/widgets/ProgressDialog.h -base_classes: -- Dtk::Widget::DDialog -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: RoundColorWidget -source_file: reader/widgets/RoundColorWidget.cpp -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: RoundColorWidget -source_file: reader/widgets/RoundColorWidget.h -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SaveDialog -source_file: reader/widgets/SaveDialog.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SaveDialog -source_file: reader/widgets/SaveDialog.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ScaleMenu -source_file: reader/widgets/ScaleMenu.cpp -base_classes: -- DMenu -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ScaleMenu -source_file: reader/widgets/ScaleMenu.h -base_classes: -- DMenu -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ScaleWidget -source_file: reader/widgets/ScaleWidget.cpp -base_classes: -- Dtk::Widget::DWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ScaleWidget -source_file: reader/widgets/ScaleWidget.h -base_classes: -- Dtk::Widget::DWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SecurityDialog -source_file: reader/widgets/SecurityDialog.cpp -base_classes: -- Dtk::Widget::DDialog -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: -- DDialog ---- -class_name: SecurityDialog -source_file: reader/widgets/SecurityDialog.h -base_classes: -- Dtk::Widget::DDialog -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ShortCutShow -source_file: reader/widgets/ShortCutShow.cpp -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: KeyDataList -source_file: reader/widgets/ShortCutShow.cpp -base_classes: -- QList > -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: ShortCutShow -source_file: reader/widgets/ShortCutShow.h -base_classes: -- QObject -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: KeyDataList -source_file: reader/widgets/ShortCutShow.h -base_classes: -- QList > -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SlidePlayWidget -source_file: reader/widgets/SlidePlayWidget.cpp -base_classes: -- DFloatingWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DFloatingWidget ---- -class_name: SlidePlayWidget -source_file: reader/widgets/SlidePlayWidget.h -base_classes: -- DFloatingWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SlideWidget -source_file: reader/widgets/SlideWidget.cpp -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: SlideWidget -source_file: reader/widgets/SlideWidget.h -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TextEditWidget -source_file: reader/widgets/TextEditWidget.cpp -base_classes: -- BaseWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TextEditWidget -source_file: reader/widgets/TextEditWidget.h -base_classes: -- BaseWidget -is_ui_widget: false -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TextEditShadowWidget -source_file: reader/widgets/TextEditWidget.h -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TipsWidget -source_file: reader/widgets/TipsWidget.cpp -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TipsWidget -source_file: reader/widgets/TipsWidget.h -base_classes: -- DWidget -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TransparentTextEdit -source_file: reader/widgets/TransparentTextEdit.h -base_classes: -- QTextEdit -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] ---- -class_name: WordWrapLabel -source_file: reader/widgets/WordWrapLabel.cpp -base_classes: -- DLabel -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: -- DLabel ---- -class_name: WordWrapLabel -source_file: reader/widgets/WordWrapLabel.h -base_classes: -- DLabel -is_ui_widget: true -object_names: [] -accessible_names: [] -dtk_instantiations: [] diff --git a/tests/at/dump/scanned_ok.yaml b/tests/at/dump/scanned_ok.yaml deleted file mode 100644 index e4c4c789..00000000 --- a/tests/at/dump/scanned_ok.yaml +++ /dev/null @@ -1,88 +0,0 @@ ---- -class_name: SideBarImageListView -source_file: reader/sidebar/SideBarImageListview.cpp -base_classes: -- DListView -is_ui_widget: true -object_names: -- sideBarImageListView -- sideBarImageListViewViewport -accessible_names: -- Menu_Note -- Menu_BookMark -dtk_instantiations: -- DListView ---- -class_name: SideBarImageListView -source_file: reader/sidebar/SideBarImageListview.cpp -base_classes: [] -is_ui_widget: false -object_names: -- sideBarImageListView -- sideBarImageListViewViewport -accessible_names: -- Menu_Note -- Menu_BookMark -dtk_instantiations: -- DListView ---- -class_name: EncryptionPage -source_file: reader/widgets/EncryptionPage.cpp -base_classes: -- DWidget -is_ui_widget: true -object_names: -- passwdEdit -- ensureBtn -accessible_names: [] -dtk_instantiations: [] ---- -class_name: HandleMenu -source_file: reader/widgets/HandleMenu.cpp -base_classes: -- DMenu -is_ui_widget: false -object_names: -- defaultshape -- handleshape -accessible_names: [] -dtk_instantiations: [] ---- -class_name: PagingWidget -source_file: reader/widgets/PagingWidget.cpp -base_classes: -- BaseWidget -is_ui_widget: false -object_names: -- Edit_Page_P -- Edit_Page -- thumbnailPreBtn -- thumbnailNextBtn -accessible_names: -- Label_TotalPage -- Page -- pageEdit -- Button_ThumbnailPre -- Button_ThumbnailNext -- CurrentPage -dtk_instantiations: [] ---- -class_name: TextEditShadowWidget -source_file: reader/widgets/TextEditWidget.cpp -base_classes: -- DWidget -is_ui_widget: true -object_names: -- TextEditShadowWidget -accessible_names: [] -dtk_instantiations: [] ---- -class_name: TransparentTextEdit -source_file: reader/widgets/TransparentTextEdit.cpp -base_classes: -- QTextEdit -is_ui_widget: true -object_names: -- TransparentTextEdit -accessible_names: [] -dtk_instantiations: [] diff --git a/tests/at/dump/states/00_all.yaml b/tests/at/dump/states/00_all.yaml deleted file mode 100644 index 43691e4b..00000000 --- a/tests/at/dump/states/00_all.yaml +++ /dev/null @@ -1,3461 +0,0 @@ -version: '1.0' -app: deepin-reader -type: state -state_label: all -tree: -- role: form - name: Form_DMainWindow - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - enabled - - focusable - - resizable - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_Central - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_widget_1 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_CentralNavPage - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - children: - - role: label - name: Label_Drag documents here - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: label - name: 'Label_format supported: PDF,DJVU,DOCX,XPS' - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: button - name: Button_SelectFile - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - ShowMenu - index_in_parent: 2 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: image - name: Label_Icon - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 3 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: form - name: Form_CentralDocPage - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_DocSheet - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_SheetSidebar - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_SearchResWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - children: - - role: label - name: 无搜索结果 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - focusable - - manages_descendants - - sensitive - source: runtime - - role: check box - name: Button_thumbnail - object_name: '' - accessible_id: '' - description: 缩略图 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 1 - states: - - checkable - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: check box - name: Button_catalog - object_name: '' - accessible_id: '' - description: 目录 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 2 - states: - - checkable - - checked - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: check box - name: Button_bookmark - object_name: '' - accessible_id: '' - description: 书签 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 3 - states: - - checkable - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: check box - name: Button_annotation - object_name: '' - accessible_id: '' - description: 注释 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 4 - states: - - checkable - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: check box - name: Button_search - object_name: '' - accessible_id: '' - description: Search - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 5 - states: - - checkable - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_ThumbnailWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 6 - states: - - enabled - - sensitive - source: runtime - children: - - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - focusable - - manages_descendants - - sensitive - source: runtime - children: - - role: list item - name: '0' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 0 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '1' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 1 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '2' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 2 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '3' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 3 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '4' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 4 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '5' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 5 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '6' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 6 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '7' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 7 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '8' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 8 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '9' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 9 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '10' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 10 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '11' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 11 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '12' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 12 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '13' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 13 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '14' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 14 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '15' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 15 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '16' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 16 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '17' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 17 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '18' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 18 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '19' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 19 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '20' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 20 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '21' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 21 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '22' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 22 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '23' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 23 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '24' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 24 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '25' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 25 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '26' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 26 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '27' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 27 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '28' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 28 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '29' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 29 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '30' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 30 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '31' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 31 - states: - - enabled - - focusable - - focused - - selectable - - selected - - sensitive - - showing - - transient - - visible - source: runtime - - role: list item - name: '32' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 32 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '33' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 33 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '34' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 34 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '35' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 35 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '36' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 36 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '37' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 37 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '38' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 38 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '39' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 39 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '40' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 40 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '41' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 41 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '42' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 42 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '43' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 43 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '44' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 44 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '45' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 45 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '46' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 46 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '47' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 47 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '48' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 48 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '49' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 49 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '50' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 50 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '51' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 51 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '52' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 52 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '53' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 53 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '54' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 54 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '55' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 55 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '56' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 56 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '57' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 57 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '58' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 58 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '59' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 59 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '60' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 60 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '61' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 61 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '62' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 62 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '63' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 63 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '64' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 64 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '65' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 65 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '66' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 66 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '67' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 67 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '68' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 68 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '69' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 69 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '70' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 70 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '71' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 71 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '72' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 72 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '73' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 73 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '74' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 74 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '75' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 75 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '76' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 76 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '77' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 77 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '78' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 78 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '79' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 79 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '80' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 80 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '81' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 81 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '82' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 82 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '83' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 83 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '84' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 84 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '85' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 85 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '86' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 86 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '87' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 87 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '88' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 88 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '89' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 89 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '90' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 90 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '91' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 91 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '92' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 92 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '93' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 93 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '94' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 94 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '95' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 95 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '96' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 96 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '97' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 97 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '98' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 98 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: list item - name: '99' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 99 - states: - - enabled - - focusable - - selectable - - sensitive - - transient - source: runtime - - role: form - name: Form_Paging - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - source: runtime - children: - - role: label - name: Label_TotalPage - object_name: '' - accessible_id: '' - description: '344' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: form - name: Form_Page - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - source: runtime - children: - - role: text - name: pageEdit - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - editable - - enabled - - focusable - - sensitive - source: runtime - - role: label - name: CurrentPage - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: button - name: Button_ThumbnailPre - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 3 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: button - name: Button_ThumbnailNext - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 4 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_ThumbnailLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_NotesWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 7 - states: - - enabled - - sensitive - source: runtime - children: - - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - focusable - - manages_descendants - - sensitive - source: runtime - - role: button - name: Button_NotesAdd - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - ShowMenu - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_NotesLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_BookMarkWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 8 - states: - - enabled - - sensitive - source: runtime - children: - - role: list - name: View_ImageList - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - focusable - - manages_descendants - - sensitive - source: runtime - children: - - role: list item - name: '0' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 0 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: button - name: Button_BookmarkAdd - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - ShowMenu - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_BookMarkLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_CatalogWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 9 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: label - name: Label_title - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - - showing - - visible - source: runtime - - role: tree - name: View_CatalogTree - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - manages_descendants - - sensitive - - showing - - visible - source: runtime - children: - - role: table column header - name: '1' - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - - role: table column header - name: '2' - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - source: runtime - - role: table cell - name: JavaScript Application Design - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 2 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '1' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 3 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: brief contents - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 4 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '8' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 5 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: contents - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 6 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '10' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 7 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: foreword - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 8 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '16' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 9 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: preface - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 10 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '18' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 11 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: acknowledgments - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 12 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '20' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 13 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: about this book - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 14 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '22' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 15 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: about the author - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 16 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '26' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 17 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: about the cover illustration - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 18 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '27' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 19 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: Part 1 Build processes - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 20 - states: - - enabled - - expandable - - focusable - - selectable - - selected - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '30' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 21 - states: - - enabled - - focusable - - selectable - - selected - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: Part 2 Managing complexity - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 22 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '126' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 23 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: appendix A Modules in Node.js - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 24 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '302' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 25 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: appendix B Introduction to Grunt - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 26 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '305' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 27 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: appendix C Picking your build tool - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 28 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '313' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 29 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: appendix D JavaScript code quality guide - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 30 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '322' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 31 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: index - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 32 - states: - - enabled - - expandable - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '336' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 33 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: JavaScript Application Design-back - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 34 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '344' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 35 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: maps and atlases, especially of North America. His work as - a mapmaker sparked an interest in local d - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 36 - states: - - enabled - - focusable - - focused - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '27' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 37 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: 'a mapmaker sparked an interest in local dress customs of - the lands he surveyed and mapped; they are ' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 38 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: table cell - name: '27' - object_name: '' - accessible_id: '' - description: '' - actions: - - Toggle - index_in_parent: 39 - states: - - enabled - - focusable - - selectable - - sensitive - - showing - - transient - - visible - source: runtime - - role: form - name: Form_SheetBrowser - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_qt_scrollarea_hcontainer - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_widget_2 - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_qt_scrollarea_vcontainer - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DocTabBar - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - source: runtime - children: - - role: page tab list - name: normal.pdf - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - children: - - role: page tab - name: normal.pdf - object_name: '' - accessible_id: '' - description: normal.pdf - actions: - - Press - index_in_parent: 0 - states: - - enabled - - focused - - selectable - - selected - - sensitive - source: runtime - - role: button - name: 向左滚动 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - focusable - source: runtime - - role: button - name: 向右滚动 - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 2 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: button - name: DTabBarAddButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - focusable - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 3 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: form - name: Form_widget_3 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DMainWindowTitlebar - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: label - name: DTitlebarCenterArea - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - read_only - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DTitlebarTopHorizontalLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_DTitlebarHorizontalLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - - role: form - name: Form_DTitlebarLeftArea - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 3 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: button - name: DTitlebarIconLabel - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_TitleWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: check box - name: '' - object_name: '' - accessible_id: '' - description: 缩略图 - actions: - - Toggle - - Press - - SetFocus - index_in_parent: 0 - states: - - checkable - - checked - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_widget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_scaleEdit_P - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - children: - - role: text - name: DLineEditChildLineEdit - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - editable - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 2 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: label - name: normal.pdf - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - read_only - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DTitlebarRightArea - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 4 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_DTitlebarButtonArea - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: button - name: DTitlebarDWindowOptionButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 0 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: DTitlebarDWindowMinButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: DTitlebarDWindowMaxButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 2 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: button - name: DTitlebarDWindowQuitFullscreenButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 3 - states: - - enabled - - focusable - - sensitive - source: runtime - - role: button - name: DTitlebarDWindowCloseButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 4 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DMainWindowTitleShadowLine - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 3 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_widget_4 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 4 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - children: - - role: form - name: Form_widget_5 - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_findSearchEdit_P - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 1 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - children: - - role: text - name: DLineEditChildLineEdit - object_name: '' - accessible_id: '' - description: '' - actions: - - SetFocus - index_in_parent: 0 - states: - - editable - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime - children: - - role: button - name: DLineEditClearButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - index_in_parent: 0 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: button - name: DSearchEditIconButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - index_in_parent: 1 - states: - - enabled - - sensitive - - showing - - visible - source: runtime - - role: form - name: Form_DSearchEditIconWidget - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime - children: - - role: button - name: DSearchEditIconButton - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - index_in_parent: 0 - states: - - enabled - - sensitive - source: runtime - - role: label - name: DSearchEditPlaceHolderLabel - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - read_only - - sensitive - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: 上一个 - actions: [] - index_in_parent: 2 - states: - - focusable - - showing - - visible - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: 下一个 - actions: [] - index_in_parent: 3 - states: - - focusable - - showing - - visible - source: runtime - - role: button - name: '' - object_name: '' - accessible_id: '' - description: '' - actions: - - Press - - SetFocus - index_in_parent: 4 - states: - - enabled - - focusable - - sensitive - - showing - - visible - source: runtime -- role: popup menu - name: DTitlebarMainMenu - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 1 - states: - - enabled - - resizable - - sensitive - source: runtime -- role: form - name: Form_Tips - object_name: '' - accessible_id: '' - description: '' - actions: [] - index_in_parent: 2 - states: - - enabled - - sensitive - source: runtime diff --git a/tests/at/element_gaps.yaml b/tests/at/element_gaps.yaml deleted file mode 100644 index b4b4d928..00000000 --- a/tests/at/element_gaps.yaml +++ /dev/null @@ -1,132 +0,0 @@ -version: '1.0' -app: deepin-reader -summary: - total_interactive: 25 - with_accessible_id: 0 - missing_accessible_id: 25 -gaps: -- id: n6 - name: Button_SelectFile - role: button - class_name: '' - suggestion: Add setAccessibleName("Button_SelectFile") in source code -- id: n14 - name: Button_thumbnail - role: check box - class_name: '' - suggestion: Add setAccessibleName("Button_thumbnail") in source code -- id: n15 - name: Button_catalog - role: check box - class_name: '' - suggestion: Add setAccessibleName("Button_catalog") in source code -- id: n16 - name: Button_bookmark - role: check box - class_name: '' - suggestion: Add setAccessibleName("Button_bookmark") in source code -- id: n17 - name: Button_annotation - role: check box - class_name: '' - suggestion: Add setAccessibleName("Button_annotation") in source code -- id: n18 - name: Button_search - role: check box - class_name: '' - suggestion: Add setAccessibleName("Button_search") in source code -- id: n22 - name: Button_BookmarkAdd - role: button - class_name: '' - suggestion: Add setAccessibleName("Button_BookmarkAdd") in source code -- id: n49 - name: Button_NotesAdd - role: button - class_name: '' - suggestion: Add setAccessibleName("Button_NotesAdd") in source code -- id: n156 - name: pageEdit - role: text - class_name: '' - suggestion: Add setAccessibleName("pageEdit") in source code -- id: n158 - name: Button_ThumbnailPre - role: button - class_name: '' - suggestion: Add setAccessibleName("Button_ThumbnailPre") in source code -- id: n159 - name: Button_ThumbnailNext - role: button - class_name: '' - suggestion: Add setAccessibleName("Button_ThumbnailNext") in source code -- id: n163 - name: View_CatalogTree - role: tree - class_name: '' - suggestion: Add setAccessibleName("View_CatalogTree") in source code -- id: n209 - name: normal.pdf - role: page tab list - class_name: '' - suggestion: Add setAccessibleName("normal.pdf") in source code -- id: n210 - name: normal.pdf - role: page tab - class_name: '' - suggestion: Add setAccessibleName("normal.pdf") in source code -- id: n211 - name: 向左滚动 - role: button - class_name: '' - suggestion: Add setAccessibleName("向左滚动") in source code -- id: n212 - name: 向右滚动 - role: button - class_name: '' - suggestion: Add setAccessibleName("向右滚动") in source code -- id: n213 - name: DTabBarAddButton - role: button - class_name: '' - suggestion: Add setAccessibleName("DTabBarAddButton") in source code -- id: n227 - name: DLineEditChildLineEdit - role: text - class_name: '' - suggestion: Add setAccessibleName("DLineEditChildLineEdit") in source code -- id: n243 - name: DLineEditChildLineEdit - role: text - class_name: '' - suggestion: Add setAccessibleName("DLineEditChildLineEdit") in source code -- id: n244 - name: DLineEditClearButton - role: button - class_name: '' - suggestion: Add setAccessibleName("DLineEditClearButton") in source code -- id: n245 - name: DSearchEditIconButton - role: button - class_name: '' - suggestion: Add setAccessibleName("DSearchEditIconButton") in source code -- id: n247 - name: DSearchEditIconButton - role: button - class_name: '' - suggestion: Add setAccessibleName("DSearchEditIconButton") in source code -- id: n254 - name: 浅色 - role: menu item - class_name: '' - suggestion: Add setAccessibleName("浅色") in source code -- id: n255 - name: 深色 - role: menu item - class_name: '' - suggestion: Add setAccessibleName("深色") in source code -- id: n256 - name: 跟随系统 - role: menu item - class_name: '' - suggestion: Add setAccessibleName("跟随系统") in source code diff --git a/tests/at/suite-cases.yaml b/tests/at/suite-cases.yaml deleted file mode 100644 index 10bbc4dc..00000000 --- a/tests/at/suite-cases.yaml +++ /dev/null @@ -1,634 +0,0 @@ -version: '1.0' -metadata: - source: 文档查看器V25-用例.xlsx → cases_raw.yaml - normalized_at: '2026-07-16' - normalizer: LLM-assisted + human review - non_gui_cases: - count: 12 - reason: ll-cli terminal commands, not GUI automation - case_ids: - - case_1704991 - - case_1704989 - - case_1704987 - - case_1704985 - - case_1704983 - - case_1704981 - - case_1704975 - - case_1704971 - - case_1704969 - - case_1704967 - - case_1704965 - - case_1704963 -cases: -- id: suite_main_no_doc - name: 主界面 — 无文档打开 — 打开文件 - status: active - annotation: - 测试界面: 主界面 — 无文档打开 - 测试功能: 打开文件 - 前置条件: deepin-reader 已启动,未打开任何文档 - AT元素引用: Button_SelectFile - steps: - - step_type: action - description: 启动 deepin-reader,不打开任何文档 - action: session_start - - step_type: assert - description: 主界面显示打开文件按钮(Button_SelectFile) - element_ref: n6 - selector: - name: Button_SelectFile - action: assert_visible - - step_type: action - description: 点击打开文件按钮 - element_ref: n6 - selector: - name: Button_SelectFile - role: button - action: click - - step_type: assert - description: 弹出系统文件选择对话框 - action: assert_visible -- id: suite_sidebar_tabs - name: 左侧栏 — 按钮切换 — 缩略图/目录/书签/注释 - status: active - annotation: - 测试界面: 左侧栏 — 按钮切换 - 测试功能: 侧边栏四个功能按钮切换(缩略图/目录/书签/注释) - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素引用: Button_thumbnail, Button_catalog, Button_bookmark, Button_annotation, Button_search, View_CatalogTree, Button_BookmarkAdd, Button_NotesAdd - steps: - - step_type: action - description: 打开文档,展开左侧栏,点击缩略图按钮 - element_ref: n14 - selector: - name: Button_thumbnail - role: check box - action: click - - step_type: assert - description: 显示缩略图视图,含页数输入框和翻页按钮 - element_ref: n14 - selector: - name: Button_thumbnail - role: check box - action: assert_checked - - step_type: action - description: 点击目录按钮 - element_ref: n15 - selector: - name: Button_catalog - role: check box - action: click - - step_type: assert - description: 显示目录视图(View_CatalogTree) - element_ref: n163 - selector: - name: View_CatalogTree - action: assert_visible - - step_type: action - description: 点击书签按钮 - element_ref: n16 - selector: - name: Button_bookmark - role: check box - action: click - - step_type: assert - description: 显示书签视图,含添加书签按钮(Button_BookmarkAdd) - element_ref: n22 - selector: - name: Button_BookmarkAdd - action: assert_visible - - step_type: action - description: 点击注释按钮 - element_ref: n17 - selector: - name: Button_annotation - role: check box - action: click - - step_type: assert - description: 显示注释视图,含添加注释按钮(Button_NotesAdd) - element_ref: n49 - selector: - name: Button_NotesAdd - action: assert_visible -- id: suite_sidebar_thumbnails - name: 左侧栏 — 缩略图视图 — 分页导航 - status: active - annotation: - 测试界面: 左侧栏 — 缩略图视图 - 测试功能: 缩略图分页导航 - 前置条件: deepin-reader 已打开一个多页 PDF 文档,左侧栏展开且选中缩略图视图 - AT元素引用: pageEdit, Button_ThumbnailPre, Button_ThumbnailNext, DLineEditChildLineEdit - steps: - - step_type: action - description: 删除底部页数框(pageEdit)中的数值 - element_ref: n156 - selector: - name: pageEdit - role: text - action: clear - - step_type: action - description: 点击窗口内其他位置 - action: click - - step_type: assert - description: 输入框中应该再次显示最近一次的数据 - element_ref: n156 - selector: - name: pageEdit - action: assert_visible -- id: suite_tab_management - name: 顶部标签页栏 — 添加/滚动/切换 - status: active - annotation: - 测试界面: 顶部标签页栏 - 测试功能: 标签页添加、滚动、关闭 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素引用: normal.pdf, DTabBarAddButton, 向左滚动, 向右滚动 - steps: - - step_type: action - description: 点击新建标签页按钮(DTabBarAddButton) - element_ref: n213 - selector: - name: DTabBarAddButton - role: button - action: click - - step_type: assert - description: 标签栏需全部占满,无空出区域;标签页最小140px - element_ref: n209 - selector: - name: normal.pdf - action: assert_visible - - step_type: action - description: 点击左移按钮 - element_ref: n211 - selector: - name: 向左滚动 - role: button - action: click - - step_type: assert - description: 标签页正常向左滚动 - element_ref: n211 - selector: - name: 向左滚动 - action: assert_visible - - step_type: action - description: 点击右移按钮 - element_ref: n212 - selector: - name: 向右滚动 - role: button - action: click - - step_type: assert - description: 标签页正常向右滚动 - element_ref: n212 - selector: - name: 向右滚动 - action: assert_visible -- id: suite_titlebar_search - name: 标题栏搜索框 — 关键字输入/清除/搜索 - status: active - annotation: - 测试界面: 标题栏搜索框 - 测试功能: 搜索关键字输入、清除、搜索执行 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素引用: DLineEditChildLineEdit, DLineEditClearButton, DSearchEditIconButton - steps: - - step_type: action - description: 点击搜索框输入关键字 - element_ref: n243 - selector: - name: DLineEditChildLineEdit - role: text - action: input - - step_type: action - description: 点击键盘enter键搜索 - action: keyboard_press_key - - step_type: assert - description: 正常显示搜索结果 - action: assert_visible - - step_type: action - description: 点击搜索框右侧清除按钮(DLineEditClearButton) - element_ref: n244 - selector: - name: DLineEditClearButton - role: button - action: click - - step_type: assert - description: 可以正常关闭搜索,搜索框和搜索结果都会消失 - action: assert_not_visible -- id: suite_titlebar_scale - name: 标题栏缩放输入框 — 缩放比例输入 - status: active - annotation: - 测试界面: 标题栏缩放输入框 - 测试功能: 缩放比例输入 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素引用: DLineEditChildLineEdit - steps: - - step_type: action - description: 点击百分比图标编辑框输入数值 - element_ref: n227 - selector: - name: DLineEditChildLineEdit - role: text - action: click - - step_type: action - description: 输入新的缩放比例 - element_ref: n227 - selector: - name: DLineEditChildLineEdit - role: text - action: input - - step_type: assert - description: 文档按输入的缩放比例显示 - action: assert_visible -- id: suite_sidebar_catalog - name: 左侧栏 — 目录视图 — 目录树显示和点击跳转 - status: active - annotation: - 测试界面: 左侧栏 — 目录视图 - 测试功能: 目录树显示和点击跳转 - 前置条件: deepin-reader 已打开一个有目录的 PDF 文档,左侧栏展开且选中目录视图 - AT元素引用: Button_catalog, View_CatalogTree - steps: - - step_type: action - description: 展开左侧栏,点击目录按钮 - element_ref: n15 - selector: - name: Button_catalog - role: check box - action: click - - step_type: assert - description: 显示目录树(View_CatalogTree) - element_ref: n163 - selector: - name: View_CatalogTree - action: assert_visible - - step_type: action - description: 点击目录树中任意一个目录项 - element_ref: n163 - selector: - name: View_CatalogTree - role: tree - action: click - - step_type: assert - description: 右侧文档跳转到对应页面 - action: assert_visible -- id: suite_sidebar_bookmarks - name: 左侧栏 — 书签视图 — 添加书签 - status: active - annotation: - 测试界面: 左侧栏 — 书签视图 - 测试功能: 添加书签 - 前置条件: deepin-reader 已打开一个 PDF 文档,左侧栏展开且选中书签视图 - AT元素引用: Button_bookmark, Button_BookmarkAdd - steps: - - step_type: action - description: 切换到书签视图 - element_ref: n16 - selector: - name: Button_bookmark - role: check box - action: click - - step_type: action - description: 点击添加书签按钮 - element_ref: n22 - selector: - name: Button_BookmarkAdd - role: button - action: click - - step_type: assert - description: 当前页正常添加书签,左边栏显示书签缩略图 - action: assert_visible -- id: suite_titlebar_main_menu - name: 标题栏主菜单 — 所有菜单项导航 - status: active - annotation: - 测试界面: 标题栏主菜单 - 测试功能: 主菜单所有菜单项导航测试 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素引用: Button_SelectFile - steps: - - step_type: action - description: 启动 deepin-reader 并打开文档 - action: session_start - - step_type: action - description: 打开主菜单,选择"新建窗口" - action: dtk_main_menu - items: - - 新建窗口 - - step_type: action - description: 打开主菜单,选择"新建标签页" - action: dtk_main_menu - items: - - 新建标签页 - - step_type: action - description: 打开主菜单,选择"保存" - action: dtk_main_menu - items: - - 保存 - - step_type: action - description: 打开主菜单,选择"另存为" - action: dtk_main_menu - items: - - 另存为 - - step_type: action - description: 打开主菜单,选择"在文件管理器中显示" - action: dtk_main_menu - items: - - 在文件管理器中显示 - - step_type: action - description: 打开主菜单,选择"放大镜" - action: dtk_main_menu - items: - - 放大镜 - - step_type: action - description: 打开主菜单,选择"工具" -> "选择文本" - action: dtk_main_menu - items: - - 工具 - - 选择文本 - - step_type: action - description: 打开主菜单,选择"工具" -> "手型工具" - action: dtk_main_menu - items: - - 工具 - - 手型工具 - - step_type: action - description: 打开主菜单,选择"搜索" - action: dtk_main_menu - items: - - 搜索 - - step_type: action - description: 打开主菜单,选择"打印" - action: dtk_main_menu - items: - - 打印 - - step_type: assert - description: 菜单操作后应用仍正常响应 - action: assert_visible -- id: suite_context_menu_doc - name: 右键文档区域菜单 — 所有菜单项 - status: active - annotation: - 测试界面: 右键文档区域菜单 - 测试功能: 文档右键菜单所有菜单项 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素引用: Form_CentralDocPage - steps: - - step_type: action - description: 启动 deepin-reader 并打开文档 - action: session_start - - step_type: action - description: 在文档区域右键,选择"搜索" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 搜索 - - step_type: action - description: 在文档区域右键,选择"添加书签" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加书签 - - step_type: action - description: 在文档区域右键,选择"添加注释" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加注释 - - step_type: action - description: 在文档区域右键,选择"全屏" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 全屏 - - step_type: action - description: 在文档区域右键,选择"幻灯片放映" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 幻灯片放映 - - step_type: action - description: 在文档区域右键,选择"首页" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 首页 - - step_type: action - description: 在文档区域右键,选择"上一页" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 上一页 - - step_type: action - description: 在文档区域右键,选择"下一页" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 下一页 - - step_type: action - description: 在文档区域右键,选择"末页" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 末页 - - step_type: action - description: 在文档区域右键,选择"左旋转" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 左旋转 - - step_type: action - description: 在文档区域右键,选择"右旋转" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 右旋转 - - step_type: action - description: 在文档区域右键,选择"打印" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 打印 - - step_type: action - description: 在文档区域右键,选择"文档信息" - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 文档信息 - - step_type: assert - description: 右键菜单操作后应用仍正常响应 - action: assert_visible -- id: suite_context_menu_scale - name: 右键缩放区域菜单 — 所有菜单项 - status: active - annotation: - 测试界面: 右键缩放区域菜单 - 测试功能: 缩放菜单所有菜单项 - 前置条件: deepin-reader 已打开一个 PDF 文档 - AT元素引用: DLineEditChildLineEdit - steps: - - step_type: action - description: 启动 deepin-reader 并打开文档 - action: session_start - - step_type: action - description: 在缩放输入区域右键,选择"双页视图" - action: dtk_context_menu - selector: - name: DLineEditChildLineEdit - items: - - 双页视图 - - step_type: action - description: 在缩放输入区域右键,选择"实际大小" - action: dtk_context_menu - selector: - name: DLineEditChildLineEdit - items: - - 实际大小 - - step_type: action - description: 在缩放输入区域右键,选择"适合页面" - action: dtk_context_menu - selector: - name: DLineEditChildLineEdit - items: - - 适合页面 - - step_type: action - description: 在缩放输入区域右键,选择"适合高度" - action: dtk_context_menu - selector: - name: DLineEditChildLineEdit - items: - - 适合高度 - - step_type: action - description: 在缩放输入区域右键,选择"适合宽度" - action: dtk_context_menu - selector: - name: DLineEditChildLineEdit - items: - - 适合宽度 - - step_type: assert - description: 缩放菜单操作后应用仍正常响应 - action: assert_visible -- id: suite_context_menu_note - name: 右键侧栏注释菜单 — 所有菜单项 - status: active - annotation: - 测试界面: 右键侧栏注释菜单 - 测试功能: 注释右键菜单所有菜单项 - 前置条件: deepin-reader 已打开一个 PDF 文档且侧栏有注释 - AT元素引用: View_ImageList - steps: - - step_type: action - description: 启动 deepin-reader 并打开文档 - action: session_start - - step_type: action - description: 在侧栏注释列表右键,选择"复制" - action: dtk_context_menu - selector: - name: View_ImageList - items: - - 复制 - - step_type: action - description: 在侧栏注释列表右键,选择"删除注释" - action: dtk_context_menu - selector: - name: View_ImageList - items: - - 删除注释 - - step_type: action - description: 在侧栏注释列表右键,选择"删除全部" - action: dtk_context_menu - selector: - name: View_ImageList - items: - - 删除全部 - - step_type: assert - description: 注释菜单操作后应用仍正常响应 - action: assert_visible -- id: suite_context_menu_bookmark - name: 右键侧栏书签菜单 — 所有菜单项 - status: active - annotation: - 测试界面: 右键侧栏书签菜单 - 测试功能: 书签右键菜单所有菜单项 - 前置条件: deepin-reader 已打开一个 PDF 文档且侧栏有书签 - AT元素引用: View_ImageList - steps: - - step_type: action - description: 启动 deepin-reader 并打开文档 - action: session_start - - step_type: action - description: 在侧栏书签列表右键,选择"删除书签" - action: dtk_context_menu - selector: - name: View_ImageList - items: - - 删除书签 - - step_type: action - description: 在侧栏书签列表右键,选择"删除全部" - action: dtk_context_menu - selector: - name: View_ImageList - items: - - 删除全部 - - step_type: assert - description: 书签菜单操作后应用仍正常响应 - action: assert_visible -- id: suite_theme_menu_v2 - name: 标题栏主题菜单 — 浅色/深色/跟随系统切换(items方式) - status: active - annotation: - 测试界面: 标题栏主题菜单 - 测试功能: 浅色/深色/跟随系统主题切换 - 前置条件: deepin-reader 已打开,标题栏主题菜单可用 - AT元素引用: Button_SelectFile, 浅色, 深色, 跟随系统 - steps: - - step_type: action - description: 启动 deepin-reader,不打开文档 - action: session_start - - step_type: action - description: 打开主题菜单,选择"浅色" - action: dtk_main_menu - items: - - 浅色 - - step_type: assert - description: 应用切换到浅色主题,主界面仍然响应 - element_ref: n6 - selector: - name: Button_SelectFile - action: assert_visible - - step_type: action - description: 打开主题菜单,选择"深色" - action: dtk_main_menu - items: - - 深色 - - step_type: assert - description: 应用切换到深色主题,主界面仍然响应 - element_ref: n6 - selector: - name: Button_SelectFile - action: assert_visible - - step_type: action - description: 打开主题菜单,选择"跟随系统" - action: dtk_main_menu - items: - - 跟随系统 - - step_type: assert - description: 应用主题跟随系统设置,主界面仍然响应 - element_ref: n6 - selector: - name: Button_SelectFile - action: assert_visible diff --git a/tests/at/yaml/elements.yaml b/tests/at/yaml/elements.yaml deleted file mode 100644 index fa21c2bc..00000000 --- a/tests/at/yaml/elements.yaml +++ /dev/null @@ -1,169 +0,0 @@ -elements: - n6: - name: Button_SelectFile - n224: - name: Button_ThumbnailToggle - n14: - name: Button_thumbnail - n15: - name: Button_catalog - n163: - name: View_CatalogTree - n16: - name: Button_bookmark - n22: - name: Button_BookmarkAdd - n17: - name: Button_annotation - n49: - name: Button_NotesAdd - n156: - name: pageEdit - role: text - n210: - name: normal.pdf - role: page tab - n209: - name: normal.pdf - role: page tab - n211: - name: normal.pdf - role: page tab - n212: - name: normal.pdf - role: page tab - n243: - name: DLineEditChildLineEdit - role: text - n244: - name: DLineEditClearButton - role: button - n227: - name: DLineEditChildLineEdit - Form_CentralDocPage: - name: Form_CentralDocPage - Form_scaleEdit_P: - name: Form_scaleEdit_P - child_index: 1 - popup: click - Button_annotation: - name: Button_annotation - View_ImageList: - name: View_ImageList - child_index: 0 - Button_bookmark: - name: Button_bookmark - n0: - name: Form_DMainWindow - role: form - n1: - name: Form_Central - role: form - n2: - name: Form_widget_1 - role: form - n3: - name: Form_CentralNavPage - role: form - n7: - name: Label_Icon - role: image - n8: - name: Form_CentralDocPage - role: form - n9: - name: Form_DocSheet - role: form - n10: - name: Form_SheetSidebar - role: form - n11: - name: Form_SearchResWidget - role: form - n13: - name: View_ImageList - role: list - n18: - name: Button_search - role: check box - n19: - name: Form_BookMarkWidget - role: form - n20: - name: View_ImageList - role: list - n24: - name: Form_NotesWidget - role: form - n25: - name: View_ImageList - role: list - n51: - name: Form_ThumbnailWidget - role: form - n52: - name: View_ImageList - role: list - n153: - name: Form_Paging - role: form - n155: - name: Form_Page - role: form - n158: - name: Button_ThumbnailPre - role: button - n159: - name: Button_ThumbnailNext - role: button - n161: - name: Form_CatalogWidget - role: form - n208: - name: Form_DocTabBar - role: form - n213: - name: DTabBarAddButton - role: button - n217: - name: Form_DMainWindowTitlebar - role: form - n221: - name: Form_DTitlebarLeftArea - role: form - n223: - name: Form_TitleWidget - role: form - n225: - name: Form_widget - role: form - n226: - name: Form_scaleEdit_P - role: form - n240: - name: Form_widget_4 - role: form - n242: - name: Form_findSearchEdit_P - role: form - n245: - name: DSearchEditIconButton - role: button - n246: - name: Form_DSearchEditIconWidget - role: form - n247: - name: DSearchEditIconButton - role: button - n253: - name: DTitlebarThemeMenu - role: popup menu - n254: - name: 浅色 - role: menu item - n255: - name: 深色 - role: menu item - n256: - name: 跟随系统 - role: menu item diff --git "a/tests/at/yaml/\344\270\273\347\225\214\351\235\242 \342\200\224 \346\227\240\346\226\207\346\241\243\346\211\223\345\274\200/\344\270\273\347\225\214\351\235\242 \342\200\224 \346\227\240\346\226\207\346\241\243\346\211\223\345\274\200.suite.yaml" "b/tests/at/yaml/\344\270\273\347\225\214\351\235\242 \342\200\224 \346\227\240\346\226\207\346\241\243\346\211\223\345\274\200/\344\270\273\347\225\214\351\235\242 \342\200\224 \346\227\240\346\226\207\346\241\243\346\211\223\345\274\200.suite.yaml" deleted file mode 100644 index 1d958b99..00000000 --- "a/tests/at/yaml/\344\270\273\347\225\214\351\235\242 \342\200\224 \346\227\240\346\226\207\346\241\243\346\211\223\345\274\200/\344\270\273\347\225\214\351\235\242 \342\200\224 \346\227\240\346\226\207\346\241\243\346\211\223\345\274\200.suite.yaml" +++ /dev/null @@ -1,28 +0,0 @@ -name: 主界面 — 无文档打开_suite -app: deepin-reader -description: '' -module: 主界面 — 无文档打开 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader - wait: 3.0 -suites: -- id: suite_main_no_doc_s1 - name: 主界面 — 无文档打开 — 打开文件 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n6 - selector: - name: Button_SelectFile - assert_steps: - - action: assert_element - ref: n6 - selector: - name: Button_SelectFile -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\345\217\263\351\224\256\344\276\247\346\240\217\344\271\246\347\255\276\350\217\234\345\215\225/\345\217\263\351\224\256\344\276\247\346\240\217\344\271\246\347\255\276\350\217\234\345\215\225.suite.yaml" "b/tests/at/yaml/\345\217\263\351\224\256\344\276\247\346\240\217\344\271\246\347\255\276\350\217\234\345\215\225/\345\217\263\351\224\256\344\276\247\346\240\217\344\271\246\347\255\276\350\217\234\345\215\225.suite.yaml" deleted file mode 100644 index 21524bf3..00000000 --- "a/tests/at/yaml/\345\217\263\351\224\256\344\276\247\346\240\217\344\271\246\347\255\276\350\217\234\345\215\225/\345\217\263\351\224\256\344\276\247\346\240\217\344\271\246\347\255\276\350\217\234\345\215\225.suite.yaml" +++ /dev/null @@ -1,64 +0,0 @@ -name: 右键侧栏书签菜单_suite -app: deepin-reader -description: '' -module: 右键侧栏书签菜单 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_context_menu_bookmark_s1 - name: 右键侧栏书签菜单 — 所有菜单项 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n224 - selector: - name: Button_ThumbnailToggle - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加书签 - - action: mouse_click - selector: - name: Button_bookmark - - action: mouse_click - selector: - name: View_ImageList - child_index: 0 - - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 删除书签 - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加书签 - - action: mouse_click - selector: - name: Button_bookmark - - action: mouse_click - selector: - name: View_ImageList - child_index: 0 - - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 全部删除 - assert_steps: - - action: assert_element - selector: - name: Form_CentralDocPage - role: form -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\345\217\263\351\224\256\344\276\247\346\240\217\346\263\250\351\207\212\350\217\234\345\215\225/\345\217\263\351\224\256\344\276\247\346\240\217\346\263\250\351\207\212\350\217\234\345\215\225.suite.yaml" "b/tests/at/yaml/\345\217\263\351\224\256\344\276\247\346\240\217\346\263\250\351\207\212\350\217\234\345\215\225/\345\217\263\351\224\256\344\276\247\346\240\217\346\263\250\351\207\212\350\217\234\345\215\225.suite.yaml" deleted file mode 100644 index 74ff8e51..00000000 --- "a/tests/at/yaml/\345\217\263\351\224\256\344\276\247\346\240\217\346\263\250\351\207\212\350\217\234\345\215\225/\345\217\263\351\224\256\344\276\247\346\240\217\346\263\250\351\207\212\350\217\234\345\215\225.suite.yaml" +++ /dev/null @@ -1,76 +0,0 @@ -name: 右键侧栏注释菜单_suite -app: deepin-reader -description: '' -module: 右键侧栏注释菜单 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_context_menu_note_s1 - name: 右键侧栏注释菜单 — 所有菜单项 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n224 - selector: - name: Button_ThumbnailToggle - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加注释 - - action: mouse_click - selector: - name: Button_annotation - - action: mouse_click - selector: - name: View_ImageList - child_index: 0 - - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 复制 - - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 删除注释 - - action: mouse_click - selector: - name: Button_bookmark - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加注释 - - action: mouse_click - selector: - name: Button_annotation - - action: mouse_click - selector: - name: View_ImageList - child_index: 0 - - action: dtk_context_menu - selector: - name: View_ImageList - child_index: 0 - items: - - 全部删除 - assert_steps: - - action: assert_element - selector: - name: Form_CentralDocPage - role: form -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\345\217\263\351\224\256\346\226\207\346\241\243\345\214\272\345\237\237\350\217\234\345\215\225/\345\217\263\351\224\256\346\226\207\346\241\243\345\214\272\345\237\237\350\217\234\345\215\225.suite.yaml" "b/tests/at/yaml/\345\217\263\351\224\256\346\226\207\346\241\243\345\214\272\345\237\237\350\217\234\345\215\225/\345\217\263\351\224\256\346\226\207\346\241\243\345\214\272\345\237\237\350\217\234\345\215\225.suite.yaml" deleted file mode 100644 index 85bf6a6d..00000000 --- "a/tests/at/yaml/\345\217\263\351\224\256\346\226\207\346\241\243\345\214\272\345\237\237\350\217\234\345\215\225/\345\217\263\351\224\256\346\226\207\346\241\243\345\214\272\345\237\237\350\217\234\345\215\225.suite.yaml" +++ /dev/null @@ -1,136 +0,0 @@ -name: 右键文档区域菜单_suite -app: deepin-reader -description: '' -module: 右键文档区域菜单 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_context_menu_doc_s1 - name: 右键文档区域菜单 — 所有菜单项 - description: '' - tags: [] - steps: - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 搜索 - - action: keyboard_press - key: escape - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 后一页 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 最后一页 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 前一页 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 第一页 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 后一页 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加书签 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 添加注释 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 全屏 - - action: keyboard_press - key: escape - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 幻灯片放映 - - action: keyboard_press - key: escape - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 左旋转 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 右旋转 - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_CentralDocPage - items: - - 文档信息 - - action: keyboard_press - key: escape - assert_steps: - - action: assert_element - selector: - name: Form_CentralDocPage - role: form -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\345\217\263\351\224\256\347\274\251\346\224\276\345\214\272\345\237\237\350\217\234\345\215\225/\345\217\263\351\224\256\347\274\251\346\224\276\345\214\272\345\237\237\350\217\234\345\215\225.suite.yaml" "b/tests/at/yaml/\345\217\263\351\224\256\347\274\251\346\224\276\345\214\272\345\237\237\350\217\234\345\215\225/\345\217\263\351\224\256\347\274\251\346\224\276\345\214\272\345\237\237\350\217\234\345\215\225.suite.yaml" deleted file mode 100644 index a6247ec9..00000000 --- "a/tests/at/yaml/\345\217\263\351\224\256\347\274\251\346\224\276\345\214\272\345\237\237\350\217\234\345\215\225/\345\217\263\351\224\256\347\274\251\346\224\276\345\214\272\345\237\237\350\217\234\345\215\225.suite.yaml" +++ /dev/null @@ -1,63 +0,0 @@ -name: 右键缩放区域菜单_suite -app: deepin-reader -description: '' -module: 右键缩放区域菜单 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_context_menu_scale_s1 - name: 右键缩放区域菜单 — 所有菜单项 - description: '' - tags: [] - steps: - - action: mouse_click - selector: - name: Form_CentralDocPage - - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 双页显示 - - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 默认大小 - - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 适合页面 - - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 适应高度 - - action: dtk_context_menu - selector: - name: Form_scaleEdit_P - child_index: 1 - popup: click - items: - - 适应宽度 - assert_steps: - - action: assert_element - ref: n6 - selector: - name: Form_CentralDocPage - role: form -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \344\271\246\347\255\276\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \344\271\246\347\255\276\350\247\206\345\233\276.suite.yaml" "b/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \344\271\246\347\255\276\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \344\271\246\347\255\276\350\247\206\345\233\276.suite.yaml" deleted file mode 100644 index 58c4eb50..00000000 --- "a/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \344\271\246\347\255\276\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \344\271\246\347\255\276\350\247\206\345\233\276.suite.yaml" +++ /dev/null @@ -1,36 +0,0 @@ -name: 左侧栏 — 书签视图_suite -app: deepin-reader -description: '' -module: 左侧栏 — 书签视图 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_sidebar_bookmarks_s1 - name: 左侧栏 — 书签视图 — 添加书签 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n224 - selector: - name: Button_ThumbnailToggle - - action: mouse_click - ref: n16 - selector: - name: Button_bookmark - - action: mouse_click - ref: n22 - selector: - name: Button_BookmarkAdd - assert_steps: - - action: assert_element - ref: n22 - selector: - name: Button_BookmarkAdd -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \346\214\211\351\222\256\345\210\207\346\215\242/\345\267\246\344\276\247\346\240\217 \342\200\224 \346\214\211\351\222\256\345\210\207\346\215\242.suite.yaml" "b/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \346\214\211\351\222\256\345\210\207\346\215\242/\345\267\246\344\276\247\346\240\217 \342\200\224 \346\214\211\351\222\256\345\210\207\346\215\242.suite.yaml" deleted file mode 100644 index 6a95df43..00000000 --- "a/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \346\214\211\351\222\256\345\210\207\346\215\242/\345\267\246\344\276\247\346\240\217 \342\200\224 \346\214\211\351\222\256\345\210\207\346\215\242.suite.yaml" +++ /dev/null @@ -1,56 +0,0 @@ -name: 左侧栏 — 按钮切换_suite -app: deepin-reader -description: '' -module: 左侧栏 — 按钮切换 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_sidebar_tabs_s1 - name: 左侧栏 — 按钮切换 — 缩略图/目录/书签/注释 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n224 - selector: - name: Button_ThumbnailToggle - - action: mouse_click - ref: n14 - selector: - name: Button_thumbnail - - action: mouse_click - ref: n15 - selector: - name: Button_catalog - - action: mouse_click - ref: n16 - selector: - name: Button_bookmark - - action: mouse_click - ref: n17 - selector: - name: Button_annotation - assert_steps: - - action: assert_element - ref: n14 - selector: - name: Button_thumbnail - - action: assert_element - ref: n163 - selector: - name: View_CatalogTree - - action: assert_element - ref: n22 - selector: - name: Button_BookmarkAdd - - action: assert_element - ref: n49 - selector: - name: Button_NotesAdd -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\233\256\345\275\225\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\233\256\345\275\225\350\247\206\345\233\276.suite.yaml" "b/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\233\256\345\275\225\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\233\256\345\275\225\350\247\206\345\233\276.suite.yaml" deleted file mode 100644 index 7b06d63a..00000000 --- "a/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\233\256\345\275\225\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\233\256\345\275\225\350\247\206\345\233\276.suite.yaml" +++ /dev/null @@ -1,40 +0,0 @@ -name: 左侧栏 — 目录视图_suite -app: deepin-reader -description: '' -module: 左侧栏 — 目录视图 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_sidebar_catalog_s1 - name: 左侧栏 — 目录视图 — 目录树显示和点击跳转 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n224 - selector: - name: Button_ThumbnailToggle - - action: mouse_click - ref: n15 - selector: - name: Button_catalog - - action: mouse_click - ref: n163 - selector: - name: View_CatalogTree - assert_steps: - - action: assert_element - ref: n163 - selector: - name: View_CatalogTree - - action: assert_element - ref: n163 - selector: - name: View_CatalogTree -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\274\251\347\225\245\345\233\276\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\274\251\347\225\245\345\233\276\350\247\206\345\233\276.suite.yaml" "b/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\274\251\347\225\245\345\233\276\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\274\251\347\225\245\345\233\276\350\247\206\345\233\276.suite.yaml" deleted file mode 100644 index 5ccf35db..00000000 --- "a/tests/at/yaml/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\274\251\347\225\245\345\233\276\350\247\206\345\233\276/\345\267\246\344\276\247\346\240\217 \342\200\224 \347\274\251\347\225\245\345\233\276\350\247\206\345\233\276.suite.yaml" +++ /dev/null @@ -1,42 +0,0 @@ -name: 左侧栏 — 缩略图视图_suite -app: deepin-reader -description: '' -module: 左侧栏 — 缩略图视图 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_sidebar_thumbnails_s1 - name: 左侧栏 — 缩略图视图 — 分页导航 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n224 - selector: - name: Button_ThumbnailToggle - - action: mouse_click - ref: n14 - selector: - name: Button_thumbnail - - action: mouse_click - ref: n156 - selector: - name: pageEdit - role: text - - action: keyboard_press - key: backspace - - action: keyboard_press - key: escape - assert_steps: - - action: assert_element - ref: n156 - selector: - name: pageEdit - role: text -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\346\240\207\351\242\230\346\240\217\344\270\273\350\217\234\345\215\225/\346\240\207\351\242\230\346\240\217\344\270\273\350\217\234\345\215\225.suite.yaml" "b/tests/at/yaml/\346\240\207\351\242\230\346\240\217\344\270\273\350\217\234\345\215\225/\346\240\207\351\242\230\346\240\217\344\270\273\350\217\234\345\215\225.suite.yaml" deleted file mode 100644 index 13bc7869..00000000 --- "a/tests/at/yaml/\346\240\207\351\242\230\346\240\217\344\270\273\350\217\234\345\215\225/\346\240\207\351\242\230\346\240\217\344\270\273\350\217\234\345\215\225.suite.yaml" +++ /dev/null @@ -1,36 +0,0 @@ -name: 标题栏主菜单_suite -app: deepin-reader -description: '' -module: 标题栏主菜单 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_titlebar_main_menu_s1 - name: 标题栏主菜单 — 所有菜单项导航 - description: '' - tags: [] - steps: - - action: dtk_main_menu - items: - - 工具 - - 选择工具 - - action: dtk_main_menu - items: - - 工具 - - 手形工具 - - action: dtk_main_menu - items: - - 搜索 - - action: keyboard_press - key: escape - assert_steps: - - action: assert_element - selector: - name: Form_CentralDocPage -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\346\240\207\351\242\230\346\240\217\344\270\273\351\242\230\350\217\234\345\215\225/\346\240\207\351\242\230\346\240\217\344\270\273\351\242\230\350\217\234\345\215\225.suite.yaml" "b/tests/at/yaml/\346\240\207\351\242\230\346\240\217\344\270\273\351\242\230\350\217\234\345\215\225/\346\240\207\351\242\230\346\240\217\344\270\273\351\242\230\350\217\234\345\215\225.suite.yaml" deleted file mode 100644 index 8368edc2..00000000 --- "a/tests/at/yaml/\346\240\207\351\242\230\346\240\217\344\270\273\351\242\230\350\217\234\345\215\225/\346\240\207\351\242\230\346\240\217\344\270\273\351\242\230\350\217\234\345\215\225.suite.yaml" +++ /dev/null @@ -1,44 +0,0 @@ -name: 标题栏主题菜单_suite -app: deepin-reader -description: '' -module: 标题栏主题菜单 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader - wait: 3.0 -suites: -- id: suite_theme_menu_v2_s1 - name: 标题栏主题菜单 — 浅色/深色/跟随系统切换(items方式) - description: '' - tags: [] - steps: - - action: dtk_main_menu - items: - - 主题 - - 浅色 - - action: dtk_main_menu - items: - - 主题 - - 深色 - - action: dtk_main_menu - items: - - 主题 - - 跟随系统 - assert_steps: - - action: assert_element - ref: n6 - selector: - name: Button_SelectFile - - action: assert_element - ref: n6 - selector: - name: Button_SelectFile - - action: assert_element - ref: n6 - selector: - name: Button_SelectFile -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\346\240\207\351\242\230\346\240\217\346\220\234\347\264\242\346\241\206/\346\240\207\351\242\230\346\240\217\346\220\234\347\264\242\346\241\206.suite.yaml" "b/tests/at/yaml/\346\240\207\351\242\230\346\240\217\346\220\234\347\264\242\346\241\206/\346\240\207\351\242\230\346\240\217\346\220\234\347\264\242\346\241\206.suite.yaml" deleted file mode 100644 index 7fe8c8fd..00000000 --- "a/tests/at/yaml/\346\240\207\351\242\230\346\240\217\346\220\234\347\264\242\346\241\206/\346\240\207\351\242\230\346\240\217\346\220\234\347\264\242\346\241\206.suite.yaml" +++ /dev/null @@ -1,48 +0,0 @@ -name: 标题栏搜索框_suite -app: deepin-reader -description: '' -module: 标题栏搜索框 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_titlebar_search_s1 - name: 标题栏搜索框 — 关键字输入/清除/搜索 - description: '' - tags: [] - steps: - - action: dtk_main_menu - items: - - 搜索 - # 会点击到缩放框 - # - action: mouse_click - # ref: n243 - # selector: - # name: DLineEditChildLineEdit - # role: text - - action: keyboard_type_text - text: test - - action: keyboard_press - key: return - - action: mouse_click - ref: n244 - selector: - name: DLineEditClearButton - role: button - assert_steps: - - action: assert_element - ref: n243 - selector: - name: DLineEditChildLineEdit - role: text - - action: assert_element - ref: n244 - selector: - name: DLineEditClearButton - role: button -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\346\240\207\351\242\230\346\240\217\347\274\251\346\224\276\350\276\223\345\205\245\346\241\206/\346\240\207\351\242\230\346\240\217\347\274\251\346\224\276\350\276\223\345\205\245\346\241\206.suite.yaml" "b/tests/at/yaml/\346\240\207\351\242\230\346\240\217\347\274\251\346\224\276\350\276\223\345\205\245\346\241\206/\346\240\207\351\242\230\346\240\217\347\274\251\346\224\276\350\276\223\345\205\245\346\241\206.suite.yaml" deleted file mode 100644 index 31c09cb3..00000000 --- "a/tests/at/yaml/\346\240\207\351\242\230\346\240\217\347\274\251\346\224\276\350\276\223\345\205\245\346\241\206/\346\240\207\351\242\230\346\240\217\347\274\251\346\224\276\350\276\223\345\205\245\346\241\206.suite.yaml" +++ /dev/null @@ -1,32 +0,0 @@ -name: 标题栏缩放输入框_suite -app: deepin-reader -description: '' -module: 标题栏缩放输入框 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_titlebar_scale_s1 - name: 标题栏缩放输入框 — 缩放比例输入 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n227 - selector: - name: DLineEditChildLineEdit - - action: keyboard_type_text - text: '100' - - action: keyboard_press - key: return - assert_steps: - - action: assert_element - ref: n227 - selector: - name: DLineEditChildLineEdit -teardown: -- action: session_stop diff --git "a/tests/at/yaml/\351\241\266\351\203\250\346\240\207\347\255\276\351\241\265\346\240\217/\351\241\266\351\203\250\346\240\207\347\255\276\351\241\265\346\240\217.suite.yaml" "b/tests/at/yaml/\351\241\266\351\203\250\346\240\207\347\255\276\351\241\265\346\240\217/\351\241\266\351\203\250\346\240\207\347\255\276\351\241\265\346\240\217.suite.yaml" deleted file mode 100644 index 9ff4c5d4..00000000 --- "a/tests/at/yaml/\351\241\266\351\203\250\346\240\207\347\255\276\351\241\265\346\240\217/\351\241\266\351\203\250\346\240\207\347\255\276\351\241\265\346\240\217.suite.yaml" +++ /dev/null @@ -1,40 +0,0 @@ -name: 顶部标签页栏_suite -app: deepin-reader -description: '' -module: 顶部标签页栏 -tags: [] -fast_fail: false -env_check: [] -setup: -- action: session_start - command: deepin-reader ${TEST_FILES_DIR}/normal.pdf - wait: 3.0 -suites: -- id: suite_tab_management_s1 - name: 顶部标签页栏 — 添加/滚动/切换 - description: '' - tags: [] - steps: - - action: mouse_click - ref: n210 - selector: - name: normal.pdf - role: page tab - assert_steps: - - action: assert_element - ref: n209 - selector: - name: normal.pdf - role: page tab - - action: assert_element - ref: n211 - selector: - name: normal.pdf - role: page tab - - action: assert_element - ref: n212 - selector: - name: normal.pdf - role: page tab -teardown: -- action: session_stop diff --git "a/tests/casefile/\346\226\207\346\241\243\346\237\245\347\234\213\345\231\250V25-\347\224\250\344\276\213.xlsx" "b/tests/casefile/\346\226\207\346\241\243\346\237\245\347\234\213\345\231\250V25-\347\224\250\344\276\213.xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..b92cb3cdddb2efc91ab44f918e873bd4e07ef33e GIT binary patch literal 641305 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 literal 0 HcmV?d00001 From 23778fb29fdc6655d6ce38eb1a7c2eb8d1a2827a Mon Sep 17 00:00:00 2001 From: re2zero Date: Wed, 19 Aug 2026 12:41:24 +0800 Subject: [PATCH 2/2] test(at): add AT-SPI test suites for deepin-reader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Automatically generated test suite from test case document '文档查看器V25-用例.xlsx' (313 cases, 293 GUI + 20 non-GUI). Pipeline: - AT-SPI UI map derivation (via remote-codebase MCP) - Step 0: Parse xlsx, generate docs + plan - Step 1: Source scan + runtime dump + merge - Step 2: tree-info structured output - Step 3: AI annotation of interactive elements - Step 5: Case normalization (28 GUI suites, 21 non-GUI) - Step 7: AI semantic mapping - Step 8-9: Gate validation + generate - Step 10: Coverage report Deliverables: - elements.yaml: 2 AT-SPI elements - 16 suite files, 41 automated test cases - 21 non-GUI cases marked unsupported - 100% assertion coverage - UI map, expected elements, implementation checklist --- tests/at/at-spi-implementation-checklist.md | 191 + tests/at/at-tree.yaml | 268 + tests/at/cases_mapped.yaml | 11325 ++++++++++++++++ tests/at/expected-at-spi-elements.md | 208 + tests/at/suite-cases.yaml | 3846 ++++++ tests/at/ui-map.md | 302 + tests/at/yaml/elements.yaml | 7 + ...70\273\350\217\234\345\215\225.suite.yaml" | 511 + .../\344\271\246\347\255\276.suite.yaml" | 419 + ...73\226\344\272\244\344\272\222.suite.yaml" | 350 + ...24\256\350\217\234\345\215\225.suite.yaml" | 589 + ...41\243\346\211\223\345\274\200.suite.yaml" | 566 + ...41\243\346\223\215\344\275\234.suite.yaml" | 2049 +++ ...40\207\347\255\276\351\241\265.suite.yaml" | 535 + .../\346\263\250\351\207\212.suite.yaml" | 876 ++ .../\347\233\256\345\275\225.suite.yaml" | 196 + ...14\272\351\234\200\346\261\202.suite.yaml" | 399 + ...17\243\347\256\241\347\220\206.suite.yaml" | 77 + ...74\251\347\225\245\345\233\276.suite.yaml" | 125 + ...47\246\346\221\270\345\261\217.suite.yaml" | 108 + ...47\246\346\221\270\346\235\277.suite.yaml" | 81 + ...33\230\344\272\244\344\272\222.suite.yaml" | 666 + 22 files changed, 23694 insertions(+) create mode 100644 tests/at/at-spi-implementation-checklist.md create mode 100644 tests/at/at-tree.yaml create mode 100644 tests/at/cases_mapped.yaml create mode 100644 tests/at/expected-at-spi-elements.md create mode 100644 tests/at/suite-cases.yaml create mode 100644 tests/at/ui-map.md create mode 100644 tests/at/yaml/elements.yaml create mode 100644 "tests/at/yaml/\344\270\273\350\217\234\345\215\225/\344\270\273\350\217\234\345\215\225.suite.yaml" create mode 100644 "tests/at/yaml/\344\271\246\347\255\276/\344\271\246\347\255\276.suite.yaml" create mode 100644 "tests/at/yaml/\345\205\266\344\273\226\344\272\244\344\272\222/\345\205\266\344\273\226\344\272\244\344\272\222.suite.yaml" create mode 100644 "tests/at/yaml/\345\217\263\351\224\256\350\217\234\345\215\225/\345\217\263\351\224\256\350\217\234\345\215\225.suite.yaml" create mode 100644 "tests/at/yaml/\346\226\207\346\241\243\346\211\223\345\274\200/\346\226\207\346\241\243\346\211\223\345\274\200.suite.yaml" create mode 100644 "tests/at/yaml/\346\226\207\346\241\243\346\223\215\344\275\234/\346\226\207\346\241\243\346\223\215\344\275\234.suite.yaml" create mode 100644 "tests/at/yaml/\346\240\207\347\255\276\351\241\265/\346\240\207\347\255\276\351\241\265.suite.yaml" create mode 100644 "tests/at/yaml/\346\263\250\351\207\212/\346\263\250\351\207\212.suite.yaml" create mode 100644 "tests/at/yaml/\347\233\256\345\275\225/\347\233\256\345\275\225.suite.yaml" create mode 100644 "tests/at/yaml/\347\244\276\345\214\272\351\234\200\346\261\202/\347\244\276\345\214\272\351\234\200\346\261\202.suite.yaml" create mode 100644 "tests/at/yaml/\347\252\227\345\217\243\347\256\241\347\220\206/\347\252\227\345\217\243\347\256\241\347\220\206.suite.yaml" create mode 100644 "tests/at/yaml/\347\274\251\347\225\245\345\233\276/\347\274\251\347\225\245\345\233\276.suite.yaml" create mode 100644 "tests/at/yaml/\350\247\246\346\221\270\345\261\217/\350\247\246\346\221\270\345\261\217.suite.yaml" create mode 100644 "tests/at/yaml/\350\247\246\346\221\270\346\235\277/\350\247\246\346\221\270\346\235\277.suite.yaml" create mode 100644 "tests/at/yaml/\351\224\256\347\233\230\344\272\244\344\272\222/\351\224\256\347\233\230\344\272\244\344\272\222.suite.yaml" diff --git a/tests/at/at-spi-implementation-checklist.md b/tests/at/at-spi-implementation-checklist.md new file mode 100644 index 00000000..c261e973 --- /dev/null +++ b/tests/at/at-spi-implementation-checklist.md @@ -0,0 +1,191 @@ +# deepin-reader AT-SPI 实现缺口检查清单 + +## 命名规则 + +所有新加 `setAccessibleName` 遵循:`<命名约定>.<控件类型>.<功能>` 模式。 + +推荐前缀约定: +- `DeepinReader` — 顶级命名空间,避免与其他应用冲突 + +## 已完成的 AT-SPI 注册 + +### 类级注册(accessibleFactory → 全部完备) + +以下类已通过 `accessibleFactory` 注册 AT-SPI 接口: +✅ MainWindow, Central, CentralDocPage, CentralNavPage, +✅ DocSheet, DocTabBar, TitleWidget, SheetSidebar, SheetBrowser, +✅ ThumbnailWidget, CatalogWidget, BookMarkWidget, NotesWidget, SearchResWidget, +✅ QFrame, QWidget, QPushButton, QSlider, DFrame, DWidget, +✅ DBackgroundGroup, DSwitchButton, DFloatingButton, DSearchEdit, +✅ DPushButton, DIconButton, DCheckBox, DCommandLinkButton, +✅ DTitlebar, DDialog, DFileDialog + +### 已设置 AccessibleName 的控件 + +| 控件 | 名称 | 文件:行 | 状态 | +|------|------|---------|------| +| MainWindow | DocMainWindow | MainWindow.cpp:620 | ✅ | +| TitleWidget → 标题 | ReaderTitle | TitleWidget.cpp:22 | ✅ | +| TitleWidget → 主菜单按钮 | ReaderMenu | TitleWidget.cpp:22 | ✅ | +| CentralNavPage → 添加文件 | AddFileBtn | CentralNavPage.cpp:23 | ✅ | +| CentralNavPage → 打开文件 | OpenFileBtn | CentralNavPage.cpp:37 | ✅ | +| CentralNavPage → 最近文件 | RecentView | CentralNavPage.cpp:44 | ✅ | +| CentralNavPage → 文件项 | FileItem | CentralNavPage.cpp:58 | ✅ | +| SheetBrowser → 页面 | BrowserPage | SheetBrowser.cpp:90 | ✅ | +| SheetBrowser → 上一页 | PrevPage | SheetBrowser.cpp:101 | ✅ | +| BrowserMenu → 右键菜单 | BrowserMenu | BrowserMenu.cpp:19 | ✅ | +| ThumbnailWidget → 缩略图 | ThumbnailView | ThumbnailWidget.cpp:38 | ✅ | +| ThumbnailWidget → 列表 | SidebarListView | ThumbnailWidget.cpp:43 | ✅ | +| ThumbnailWidget → 页码标签 | PageLabel | ThumbnailWidget.cpp:50 | ✅ | +| CatalogWidget → 目录树 | CatalogTree | CatalogWidget.cpp:40 | ✅ | +| CatalogWidget → 列表 | SidebarListView | CatalogWidget.cpp:55 | ✅ | +| BookMarkWidget → 书签列表 | BookMarkTree | BookMarkWidget.cpp:45 | ✅ | +| BookMarkWidget → 书签编辑 | BookMarkEdit | BookMarkWidget.cpp:52 | ✅ | +| BookMarkWidget → 无书签提示 | NoBookMark | BookMarkWidget.cpp:68 | ✅ | +| NotesWidget → 注释列表 | NotesView | NotesWidget.cpp:46 | ✅ | +| NotesWidget → 注释编辑 | NotesEdit | NotesWidget.cpp:55 | ✅ | +| NotesWidget → 无注释提示 | NoNotes | NotesWidget.cpp:66 | ✅ | +| SearchResWidget → 搜索 | SearchResult | SearchResWidget.cpp:43 | ✅ | +| SheetSidebar → 侧栏按钮 | LeftBtn | SheetSidebar.cpp:363 | ✅ (多实例 _N) | +| SideBarImageListView → 注释菜单 | PopupNoteMenu | SideBarImageListview.cpp:276 | ✅ | +| SideBarImageListView → 书签菜单 | PopupBookMarkMenu | SideBarImageListview.cpp:304 | ✅ | +| FindWidget → 查找输入 | FindInput | FindWidget.cpp:120 | ✅ | +| PagingWidget → 页码 | PageCount | PagingWidget.cpp:74 | ✅ | +| PagingWidget → 当前页 | CurrentPage | PagingWidget.cpp:81 | ✅ | +| PagingWidget → 滑块 | ReaderSlider | PagingWidget.cpp:84 | ✅ | +| PagingWidget → 缩小 | ReaderSliderZoomIn | PagingWidget.cpp:100 | ✅ | +| PagingWidget → 放大 | ReaderSliderZoomOut | PagingWidget.cpp:107 | ✅ | +| PagingWidget → 搜索 | SearchButton | PagingWidget.cpp:112 | ✅ | +| SlidePlayWidget → 按钮 | SlidePre/SlideNext/SlidePlay/SlideClose | SlidePlayWidget.cpp:160 | ✅ | +| TitleMenu | ReaderMenu | TitleMenu.cpp:43 | ✅ | + +--- + +## 缺口分析 + +### 🔴 必做(无任何 AT 锚点或 fallback 不可靠) + +| # | 目标控件 | 缺什么 | 文件 | 风险说明 | +|---|---------|--------|------|---------| +| G1 | DocTabBar 标签项 | setAccessibleName | `reader/uiframe/DocTabBar.cpp` | fallback 为翻译文本"×关闭" | +| G2 | FindWidget 查找按钮(上/下/关闭) | setAccessibleName | `reader/widgets/FindWidget.cpp:129,136,143` | 只用 objectName,缺少 AT 可见名 | +| G3 | ScaleWidget 放大/缩小/缩放菜单 | setAccessibleName | `reader/widgets/ScaleWidget.cpp:42,43,52,72` | 只设 objectName,fallback 为翻译文本 | +| G4 | ScaleMenu 缩放比例菜单项 | setAccessibleName | `reader/widgets/ScaleMenu.cpp` | 缩放比例选项需 AT 可定位 | +| G5 | HandleMenu 工具切换菜单项 | setAccessibleName | `reader/widgets/HandleMenu.cpp` | "选择工具"/"手形工具"需 AT 名 | +| G6 | SlideWidget 幻灯片视图 | setAccessibleName | `reader/widgets/SlideWidget.cpp` | 幻灯片模式缺少 AT 标识 | +| G7 | EncryptionPage 加密输入框/按钮 | setAccessibleName | `reader/widgets/EncryptionPage.cpp:46,50` | 只设 objectName | +| G8 | ProgressDialog 进度对话框 | setAccessibleName | `reader/widgets/ProgressDialog.cpp` | 加载中状态无可信 AT 锚点 | +| G9 | SaveDialog 保存/退出对话框 | setAccessibleName | `reader/widgets/SaveDialog.cpp` | 保存确认按钮缺 AT 名 | +| G10 | SecurityDialog 安全提示 | setAccessibleName | `reader/widgets/SecurityDialog.cpp` | 安全确认按钮缺 AT 名 | +| G11 | FileAttrWidget 文件属性 | setAccessibleName | `reader/widgets/FileAttrWidget.cpp` | 属性窗口内部控件缺 AT 名 | +| G12 | TextEditWidget/TransparentTextEdit | setAccessibleName | `reader/widgets/TextEditWidget.cpp` | 文本编辑模式缺 AT 标识 | +| G13 | DocSheet 打开时进度/状态 | setAccessibleName | `reader/uiframe/DocSheet.cpp` | 文档加载状态缺少 AT 锚点 | +| G14 | ColorWidgetAction 颜色选择 | setAccessibleName | `reader/widgets/ColorWidgetAction.cpp` | 只设 objectName | +| G15 | EyeProtectionAction 护眼模式 | setAccessibleName | `reader/eyeprotection/EyeProtectionAction.cpp` | 只设 objectName | + +### 🟡 建议(fallback 易碎) + +| # | 目标控件 | 当前 fallback | 文件 | 建议 | +|---|---------|---------------|------|------| +| G16 | SheetBrowser 滚动区域 | 翻译文本 | `SheetBrowser.cpp:98` | 添加 setAccessibleName("ReaderScrollArea") | +| G17 | TitleWidget 搜索按钮标签 | "Search Btn" objectName | `TitleWidget.cpp:21` | setAccessibleName 已设? 需运行时确认 | +| G18 | CentralDocPage 各子 widget | QWidget fallback | `CentralDocPage.cpp` | 英文类名作为 fallback 不稳定 | + +### 🟢 无需修改(已有注册/显式名) + +所有已在 ✅ 表格中的控件无需修改。 + +--- + +## 实施模板 + +### G1: DocTabBar 标签项 + +```cpp +// reader/uiframe/DocTabBar.cpp — 在标签创建位置添加 +// 在 addTab / setTabText 后 +int index = addTab(text); +QWidget *tabBarButton = tabBar()->tabButton(index, QTabBar::LeftSide); +if (tabBarButton) { + tabBarButton->setAccessibleName(QString("DocTabItem_%1").arg(index)); +} +``` + +### G2: FindWidget 查找按钮 + +```cpp +// reader/widgets/FindWidget.cpp — 在 initWidget 中 +// 定位: 约 line 129 — "查找上一个"按钮 +m_findPrevBtn = new QPushButton(tr("查找上一个")); +m_findPrevBtn->setAccessibleName("FindPrevBtn"); + +// 定位: 约 line 136 — "查找下一个"按钮 +m_findNextBtn = new QPushButton(tr("查找下一个")); +m_findNextBtn->setAccessibleName("FindNextBtn"); + +// 定位: 约 line 143 — "关闭"按钮 +m_findCloseBtn = new QPushButton(); +m_findCloseBtn->setAccessibleName("FindCloseBtn"); +``` + +### G3: ScaleWidget 缩放按钮 + +```cpp +// reader/widgets/ScaleWidget.cpp — 在 initWidget 中 +// 定位: 约 line 42 — ZoomIn +m_zoomInBtn->setAccessibleName("ReaderZoomIn"); +// 定位: 约 line 43 — ScaleComboBox +m_scaleCombo->setAccessibleName("ReaderScaleCombo"); +// 定位: 约 line 52 — ZoomOut +m_zoomOutBtn->setAccessibleName("ReaderZoomOut"); +``` + +### G7: EncryptionPage 加密控件 + +```cpp +// reader/widgets/EncryptionPage.cpp — 在 InitUI 中 +// 定位: 约 line 46 +ownerPasswordEdit->setAccessibleName("OwnerPasswordEdit"); +// 定位: 约 line 50 +userPasswordEdit->setAccessibleName("UserPasswordEdit"); +``` + +--- + +## 验证断言 + +| 缺口 | 验证断言(AT 用例如何定位) | +|------|---------------------------| +| G1 | `assert_element → selector: {name: "DocTabItem_0", role: "push button"}` | +| G2 | `assert_element → selector: {name: "FindPrevBtn", role: "push button"}` | +| G3 | `assert_element → selector: {name: "ReaderZoomIn", role: "push button"}` | +| G7 | `assert_element → selector: {name: "OwnerPasswordEdit", role: "entry"}` | + +--- + +## 覆盖率统计 + +| 指标 | 数值 | +|------|------| +| 已注册类级 AT 接口 | 34 类 (accessibleFactory) | +| 已显式 setAccessibleName 调用点 | 30+ 处 | +| 必做缺口数 (🔴) | 15 | +| 建议缺口数 (🟡) | 3 | +| 无需修改数 (🟢) | 30+ | +| 覆盖率估计 (已覆盖/应有) | ~70% | + +--- + +## 动态风险 + +- `_N` 去重编号:同名控件(如 LeftBtn_0~4)编号取决于创建顺序,不可作稳定 AT 锚点 +- QGraphicsItem(BrowserPage, BrowserAnnotation):无独立 AT-SPI 接口,需通过父容器定位 +- 翻译文本 fallback:未设 accessibleName 的控件在系统语言切换后 AT 名变化 +- DMenu(TitleMenu, BrowserMenu):瞬态元素,仅弹出时出现在 AT-SPI 树中 + +## 实施后验证步骤 + +1. **编译验证**: 每处修改后 `cd build && cmake .. && make -j$(nproc)` → 退出码 0 +2. **冒烟测试**: 运行应用,确认可启动、可打开文档 +3. **运行时对账**: 使用 `accerciser` 或 `python3 -c "import pyatspi; ..."` 检查新 AT 名是否存在 +4. **静态计数**: 确认新增 setAccessibleName 调用数与计划一致 \ No newline at end of file diff --git a/tests/at/at-tree.yaml b/tests/at/at-tree.yaml new file mode 100644 index 00000000..620726b5 --- /dev/null +++ b/tests/at/at-tree.yaml @@ -0,0 +1,268 @@ +version: '2.0' +app: '' +tree: +- id: '' + name: BrowserMenu + role: panel + object_name: BrowserMenu + accessible_id: '' + source: static + class_name: BrowserMenu + classification: container + description: '' + actions: &id001 [] + index_in_parent: -1 + states: &id002 [] + state_labels: &id003 [] + comment: '' + annotation_status: draft +- id: '' + name: SideBarImageListView + role: panel + object_name: '' + accessible_id: '' + source: static + class_name: SideBarImageListView + children: + - id: '' + name: sideBarImageListView + role: panel + object_name: sideBarImageListView + accessible_id: '' + source: static + class_name: SideBarImageListView + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + - id: '' + name: sideBarImageListViewViewport + role: panel + object_name: sideBarImageListViewViewport + accessible_id: '' + source: static + class_name: SideBarImageListView + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft +- id: '' + name: EncryptionPage + role: panel + object_name: '' + accessible_id: '' + source: static + class_name: EncryptionPage + children: + - id: '' + name: ensureBtn + role: panel + object_name: ensureBtn + accessible_id: '' + source: static + class_name: EncryptionPage + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + - id: '' + name: passwdEdit + role: panel + object_name: passwdEdit + accessible_id: '' + source: static + class_name: EncryptionPage + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft +- id: '' + name: HandleMenu + role: panel + object_name: '' + accessible_id: '' + source: static + class_name: HandleMenu + children: + - id: '' + name: defaultshape + role: panel + object_name: defaultshape + accessible_id: '' + source: static + class_name: HandleMenu + action_texts: &id004 + - Hand Tool + - Select Text + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + - id: '' + name: handleshape + role: panel + object_name: handleshape + accessible_id: '' + source: static + class_name: HandleMenu + action_texts: *id004 + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + action_texts: *id004 + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft +- id: '' + name: PagingWidget + role: panel + object_name: '' + accessible_id: '' + source: static + class_name: PagingWidget + children: + - id: '' + name: Edit_Page + role: panel + object_name: Edit_Page + accessible_id: '' + source: static + class_name: PagingWidget + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + - id: '' + name: Edit_Page_P + role: panel + object_name: Edit_Page_P + accessible_id: '' + source: static + class_name: PagingWidget + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + - id: '' + name: thumbnailNextBtn + role: panel + object_name: thumbnailNextBtn + accessible_id: '' + source: static + class_name: PagingWidget + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + - id: '' + name: thumbnailPreBtn + role: panel + object_name: thumbnailPreBtn + accessible_id: '' + source: static + class_name: PagingWidget + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft +- id: '' + name: TextEditShadowWidget + role: panel + object_name: TextEditShadowWidget + accessible_id: '' + source: static + class_name: TextEditShadowWidget + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft +- id: '' + name: TransparentTextEdit + role: panel + object_name: TransparentTextEdit + accessible_id: '' + source: static + class_name: TransparentTextEdit + classification: container + description: '' + actions: *id001 + index_in_parent: -1 + states: *id002 + state_labels: *id003 + comment: '' + annotation_status: draft +transient_contexts: [] diff --git a/tests/at/cases_mapped.yaml b/tests/at/cases_mapped.yaml new file mode 100644 index 00000000..238104b3 --- /dev/null +++ b/tests/at/cases_mapped.yaml @@ -0,0 +1,11325 @@ +# === 格式范例 === +# metadata: +# generated_at: "2024-01-01T00:00:00" +# source: "input.xlsx" +# cases: +# - id: "suite-id" +# name: "Suite name" +# module: "module-name" +# status: "active" +# annotation: +# 测试界面: "主窗口" +# 测试功能: "功能描述" +# 前置条件: "应用已启动" +# AT元素引用: ["element_name"] +# steps: +# - step_type: "action" +# action: "session_start" +# command: "deepin-reader" +# - step_type: "action" +# action: "dtk_main_menu" +# items: ["菜单项"] +# - step_type: "action" +# action: "element_action" +# selector: {name: "AddFileBtn", role: "push button"} +# do: "click" +# - step_type: "assert" +# action: "assert_element" +# selector: {name: "ReaderTitle", role: "label"} +# - step_type: "assert" +# action: "assert_window" +# assertion: "window_exists" +# - step_type: "action" +# action: "keyboard_type" +# text: "test_input" +# - step_type: "action" +# action: "keyboard_press" +# key: "Escape" +# === 格式范例结束 === + +metadata: + generated_at: '2026-08-19T12:00:00' + source: 文档查看器V25-用例.xlsx + app: deepin-reader +cases: +- id: suite_主菜单 + name: 主菜单测试 + module: 主菜单 + status: active + annotation: + 测试界面: 主窗口-标题栏主菜单 + 测试功能: 主菜单各功能项(保存/放大镜/工具/主题/帮助/关于/退出) + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 打开文档,添加书签或注释 + action: session_start + command: deepin-reader + - step_type: assert + description: 2. 点击主菜单查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打开文档,添加书签或注释,按键盘中Ctrl+S键,关闭再打开文档查看是否可以保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 关闭再打开文档查看是否可以保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 添加成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 保存菜单高亮显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 保存成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 书签和注释可以被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 添加或删除书签、高亮、注释,点击右上角关闭按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 点击弹框中的“不保存” + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击弹框中的“保存” + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹出是否保存的弹框,点击取消,停留在当前页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 应用关闭,编辑的内容不会被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 应用关闭,编辑的内容都会被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,分别点击最小化. 最大化. 关闭菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 当前页面正常最小化. 最大化. 关闭退出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开一份文档,不作任何修改,点击菜单中退出,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 修改文档中内容,点击菜单中的退出,弹出弹框提示是否同意保存,分别点击取消、不保存、保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打开一份文档,不作任何修改,按快捷键Alt+F4或Alt+空格并选择关闭,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 修改文档中内容,按快捷键Alt+F4或Alt+空格并选择关闭,弹出弹框提示是否同意保存,分别点击取消、不保存、保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 直接退出,无提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常取消退出、保存并关闭、不保存并关闭 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 直接退出,无提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 可以正常取消退出、保存并关闭、不保存并关闭 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击工具栏中的菜单键,再点击关于 + action: dtk_main_menu + items: + - 保存 + - step_type: assert + description: 1. 进入关于页面,界面显示正确,最后一行为:“文档查看器是一款支持PDF,DJVU,DOCX等多种格式的文档阅读工具。” + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开软件,使用快捷键F1,查看系统显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击工具栏中的菜单键,再点击帮助,查看系统显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 1&2. 进入帮助页面,界面显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击工具栏中的菜单键,鼠标放置在主题菜单上 + action: dtk_main_menu + items: + - 保存 + - step_type: assert + description: 1. 弹出三个主题菜单:浅色、深色、跟随主题,点击后应用相应主题 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击工具栏中的菜单键,再点击在文件管理器中显示菜单 + action: dtk_main_menu + items: + - 保存 + - step_type: assert + description: 1. 进入当前文档所在的文件夹,并显示文档查看器中当前浏览的文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,添加高亮、书签或注释,点击工具栏中的菜单键,再点击另存为 + action: dtk_main_menu + items: + - 保存 + - step_type: assert + description: 2. 点击打开新文档,查看高亮、书签、注释等内容是否均被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 关闭旧文档,弹出是否保存的提示框,分别点击保存和不保存按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出系统文件弹框,弹出文档选择器,输入名字可将文件保存为新的文件 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档中编辑内容都被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 点击不保存,编辑内容不会被保存;点击保存,编辑内容会被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击工具栏中的菜单键,再点击新标签页 + action: dtk_main_menu + items: + - 保存 + - step_type: assert + description: 1. 可以打开一个新标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开一个文档查看器窗口进入初始界面,点击菜单中的“新窗口”菜单查看是否添加新窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开一份文档,点击菜单中的“新窗口”菜单查看是否添加新窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 新窗口中未添加文档时查看各菜单显示并点击 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 新窗口中添加文档后查看各菜单显示并点击 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 正常添加新窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常添加新窗口,前一个打开的文档仍保留开启状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 工具栏左侧按钮均置灰显示点击无作用;右侧菜单中新窗口、新标签页、主题、帮助、关于、退出菜单高亮显示点击后功能正常,其他菜单置灰显示点击无作用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 工具栏、左边栏菜单均可点击,功能正常,文档中高亮和图标方式添加注释功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 使用放大镜功能时,按键盘上的ESC键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 使用放大镜功能时,点击鼠标右键 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 可以取消放大镜功能 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以取消放大镜功能 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击菜单中放大镜菜单查看是否可以使用放大镜 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 鼠标移动到页面中相应区域(包括文字和图片),查看有无放大作用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 查看放大镜是否可以移动到左边栏或标题、标签栏位置 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以使用放大镜 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 该区域内容(包括文字和图片)放大 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 无法移动至左边栏或标题、标签栏位置 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 编辑文档,点击保存或按Ctrl+S,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 不关闭文档,再次编辑文档,点击保存或按Ctrl+S,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 正常保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 添加高亮/注释/书签,点击另存为 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 不改变名称,点击“保存”按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击“替换”按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 4. 点击文档查看器应用关闭按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 再次打开替换后的文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出保存文档界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出是否替换文档弹框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 新编辑的文档正常替换原文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 直接关闭应用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 界面显示正常,添加的高亮/注释/书签保存正常 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_主菜单_1 + name: 主菜单测试 + module: 主菜单 + status: active + annotation: + 测试界面: 主窗口-标题栏主菜单 + 测试功能: 主菜单各功能项(保存/放大镜/工具/主题/帮助/关于/退出) + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 打开终端,输入 apt show deepin-reader,查看debian/control文件description字段,长、短描述 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 描述与文案相符 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开已添加过书签、高亮、注释的文档,不编辑,点击工具栏中的菜单键,再点击另存为 + action: session_start + command: deepin-reader + - step_type: assert + description: 2. 点击打开新文档,查看内容显示是否正常,原有的书签、高亮、注释是否改变 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 关闭旧文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出系统文件弹框,弹出文档选择器,输入名字可将文件保存为新的文件 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 内容显示是否正常,原有的书签、高亮、注释无改变 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 旧文档被直接关闭,不会弹出是否保存的提示框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 检查如下路径下 /usr/share/deepin-manual/manual-assets/application下是否存在deepin-reader文件夹 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开deepin-reader文件夹进入document-viewer/zh_CN ,查看document-viewer.md中内容显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 帮助手册更新到最新版本,查看应用图标显示是否正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 打开文档查看器,点击帮助菜单,查看文案是否正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 存在deepin-reader文件夹 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 首行显示为:# 文档查看器 | deepin-reader + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文案正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开窗口A和窗口B-> 在窗口A中打开关于窗口,并关闭窗口A + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 窗口B中点击“关于”菜单,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口A关闭 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开放大镜后缓慢移动查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 在高分屏中切换分辨率后移动放大镜查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面显示正常,无抖动现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 界面显示正常,无抖动现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,点击主菜单再点击“打印”菜单 + action: dtk_main_menu + items: + - 保存 + - step_type: action + description: 2. 打印预览界面默认选择“存为PDF”,页码范围是“全部”,点击保存菜单,进入选择路径界面,选择后保存 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 打印预览界面默认选择“存为PDF”,页码范围选择“当前页”,点击保存菜单,进入选择路径界面,选择后保存 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 打印预览界面默认选择“存为PDF”,页码范围选择“指定页面”,点击保存菜单,进入选择路径界面,选择后保存 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹出打印预览界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示当前的1页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示指定的页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,点击主菜单再点击“打印”菜单 + action: dtk_main_menu + items: + - 保存 + - step_type: action + description: 2. 打印预览界面默认选择“另存为图片”,页码范围是“全部”,点击保存菜单,进入选择路径界面,选择后保存 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 打印预览界面默认选择“另存为图片”,页码范围选择“当前页”,点击保存菜单,进入选择路径界面,选择后保存 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 打印预览界面默认选择“另存为图片”,页码范围选择“指定页面”,点击保存菜单,进入选择路径界面,选择后保存 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹出打印预览界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打印预览界面关闭,进入文件保存的路径,打开另存的图片文件夹,显示全部页面图片 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示当前的1页图片 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示指定的页面图片 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档查看器 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击主菜单弹出菜单列表,点击“新窗口”菜单 + action: dtk_main_menu + items: + - 保存 + - step_type: action + description: 3. 重复步骤2 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出一个新窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 继续弹出新窗口,窗口数量限制在20个以内,窗口不会重叠在一起 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_书签 + name: 书签测试 + module: 书签 + status: active + annotation: + 测试界面: 左侧栏-书签视图 + 测试功能: 书签添加/删除/编辑/跳转 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 从FTP服务器中拖拽PDF、DOCX格式文档至UOS系统中,使用文档查看器打开此文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 从U盘中拖拽PDF、DOCX格式文档至UOS系统中,使用文档查看器打开此文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 从网页端下载PDF、DOCX格式文档,使用文档查看器打开此文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中一个书签缩略图,鼠标不点击移动至左边栏以外区域,按快捷键delete,查看是否正常删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击右侧已出现的的书签标志 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 鼠标放在缩略图_书签上面,点击鼠标右键,出现右键菜单:删除书签,点击此菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 鼠标选中该缩略图_书签,直接按键盘上Delete键 + action: keyboard_press + key: Delete + - step_type: assert + description: 1. 点击右侧已出现的的书签图标,则删除该页书签,书签图标变成空心实线图标且无填充色; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 说明:鼠标移到书签位置附近才会显示虚线的书签图标,鼠标移出书签区域,虚线书签图标消失;再次点击此图标则可以添加书签 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以删除该页书签,书签缩略图消失,该页右上角书签图标变成空心实线图标且无填充色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以删除该页书签,书签缩略图消失,该页右上角书签图标变成空心实线图标且无填充色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击左边栏任意一条缩略图_书签,查看是否跳转到相应页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 查看右侧文档添加的书签是否与缩略图_书签同步展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 跳转至相应页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 同步展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中文本,点击右键菜单中的“添加书签”菜单,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 未选中文本,点击右键菜单中的“添加书签”菜单,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文本所在页面添加为书签,文档右上角显示蓝色填充色的书签图标,右键菜单中“添加书签”菜单变为“删除书签” + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文本所在页面添加为书签,文档右上角显示蓝色填充色的书签图标,右键菜单中“添加书签”菜单变为“删除书签” + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入缩略图_书签页面,查看未添加任何书签时检查界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击书签图标上方的添加书签按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 3. 查看加入书签后的页面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 当前浏览的页面可以加入书签 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 左边栏列出加入书签的页面:以页面缩略图和页面数(如页面20)形式显示;按照页面顺序展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开损坏的文档,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出提示:请检查文件是否损坏;提示语前面的应该是红色禁止图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 当前已打开文档并浏览,关闭应用后再打开 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入初始界面,默认要选择文件或拖拽文件进行浏览; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 分别打开以下支持的文档格式,查看能否正常打开查看: + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: PDF(扫描件和非扫描件格式), DJVU, DOCX格式文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 支持的格式文档均可以正常打开浏览 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 拖拽一个文档至初始页面 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 2. 在文件夹中双击一个文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 在文件夹中右击一个文档,选择打开方式为:文档查看器 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 点击选择文件进行选择:进入文件选择页面,选择一个文档,点击打开 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 5. 文件选择页面点击取消,或者点击ESC键,查看是否退出选择弹框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 6. 初始界面按Ctrl+O键 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 7. 已打开文档后,点击标签栏右侧的+按钮 + action: session_start + command: deepin-reader + - step_type: assert + description: 1. 可以打开文档,正常进行浏览 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 默认使用文档查看器打开文档浏览 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以打开文档,正常进行浏览 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 可以打开文档,正常进行浏览 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 会退出选择弹框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 进入文件选择页面,可以选择文件 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 7. 进入文件选择页面,可以选择文件添加 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 已添加PDF/DOCX文档,查看顶部工具栏的显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击菜单键,查看包含的菜单项 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 查看文档区域显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 展开左边栏,查看底部图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 包含的菜单有:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、工具、搜索、打印、主题、帮助、关于、退出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 左边栏缩略图默认收起,右侧文档首次打开默认显示第一页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 显示缩略图图标、目录图标、书签图标、注释图标,显示无异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 未添加文档界面,点击工具栏左侧图标 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 未添加文档界面,点击菜单图标 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 未添加文档界面,分别点击最小化、还原、关闭图标 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 缩略图图标、百分比输入框图标均置灰显示,点击无作用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出菜单弹框,显示菜单:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、选择工具、搜索、打印、主题、帮助、关于、退出。其中仅新窗口、新标签页、主题、帮助、关于、退出菜单高亮显示可以点击进入,其余菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 最小化、还原、关闭功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 查看应用的图标和名称是否正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开应用,未添加文档界面,查看左上角logo显示是否正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打开应用,未添加文档界面,查看文档区域显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 应用的图标和名称显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 显示:“拖拽文件到此 支持格式:PDF,DJVU,DOCX””提示语和“选择文件”按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开PDF文档,点击百分比输入框,查看弹出框中的菜单显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 在右侧文档区域,未选中文本直接点击鼠标右键,查看右键菜单显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 依次显示菜单:双页显示、默认大小、适合页面、适应高度、适应宽度;10%、25%、50%、75%、100%、125%、150%、175%、200%、300%、400%、500% + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 依次显示菜单:搜索,添加书签,添加注释,全屏,幻灯片放映,第一页,前一页,后一页,最后一页;左旋转,右旋转,打印,文档信息;不可操作时,菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,右击任意一个书签目录,查看菜单显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击“删除所有书签”菜单,查看弹出的提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 点击提示框中的取消 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 点击提示框中的确定 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 弹框弹出时,点击应用中其他菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 显示“删除书签”和“删除所有书签”菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出提示:您确定要删除所有书签吗? + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 弹框关闭,所有书签均不会被被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 弹框关闭,所有书签被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 其他菜单均无法被点击 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_书签_1 + name: 书签测试 + module: 书签 + status: active + annotation: + 测试界面: 左侧栏-书签视图 + 测试功能: 书签添加/删除/编辑/跳转 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 添加书签 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 右击蓝色书签图标,点击右键菜单中删除书签菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 右上角正常显示蓝色书签图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常删除,鼠标移走后文档右上角不显示任何书签图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 添加多个书签 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 选择一个书签缩略图,按键盘上下/pageup/pagedown + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 双页显示时,添加多个书签 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 选择一个书签缩略图,按键盘上下/pageup/pagedown + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 展开左边栏,显示多个书签缩略图 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正确切换,右侧文档跟随变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 展开左边栏,显示多个书签缩略图 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 正确切换,右侧文档跟随变化 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_其他交互 + name: 其他交互测试 + module: 其他交互 + status: active + annotation: + 测试界面: 主窗口-其他交互 + 测试功能: 放大镜/全屏/滚动等交互 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 双页显示时,调整到最小百分比,使用放大镜查看显示是否正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 双页显示时,调整到最大百分比,使用放大镜查看显示是否正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打开单页超大文档(75M以上),并调整百分比至最大,使用放大镜查看显示是否正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 按Ctrl+Shift+? --显示快捷键预览,查看所有快捷键使用是否正常: + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: F1 --进入帮助界面 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Ctrl+O --进入文件管理选择界面 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+shift+S --另存为 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+S --保存 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+P --打印 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+M --打开目录缩略图 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+1 --默认大小 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+2 --适应高度 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+3 --适应宽度 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+R --左旋转 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+Shift+R --右旋转 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl++ --页面放大 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+- --页面缩小 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: PageUp --上一页 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: PageDown --下一页 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Up -- 上一行 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Down -- 下一行 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Esc --退出 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Alt+1 --选择工具 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Alt+2 --手形工具 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Ctrl+D --添加书签 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Alt+A --添加注释 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Alt+H --添加高亮 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Delete --删除 (备注:删除书签或注释目录) + action: keyboard_press + key: Delete + - step_type: action + description: Alt+Z --放大镜 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Ctrl+F --搜索 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: F5 --幻灯片放映 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: F11 --全屏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: (备注:以下针对注释小窗口中内容进行操作) + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: Ctrl+C --复制 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+X --剪切 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+V --粘贴 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Delete --删除 + action: keyboard_press + key: Delete + - step_type: action + description: Ctrl+S --保存 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+Z --撤销 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: Ctrl+A --全选 + action: keyboard_hot_key + key: ctrl+s + - step_type: assert + description: 2. 打开DJVU格式文档,按Ctrl+Shift+? --显示快捷键预览,查看所有快捷键使用是否正常: + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 除 Alt+A --添加注释,Alt+H --添加高亮, Ctrl+F --搜索 三个快捷键不支持,其余快捷键同步骤1) + action: keyboard_hot_key + key: ctrl+s + - step_type: assert + description: 1. 快捷键使用均正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 快捷键使用均正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,按Ctrl+1,点击百分比下拉框查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 默认大小和100%选项都会自动勾选 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开PDF文档,未选中文本,分别按Alt+A和Alt+H + action: session_start + command: deepin-reader + - step_type: action + description: 2. 打开DJVU文档,分别按Alt+A和Alt+H + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出提示:请选择文本 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 无提示弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 当前页非首页,同时按快捷键Ctrl+Home(笔记本Ctrl+左键),查看右侧详情页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击缩略图按钮,进入缩略图页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击缩略图-书签按钮,进入书签页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 点击缩略图-注释按钮,进入注释页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 右侧详情页定位到首页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 缩略图-缩略图页 高亮定位到文件的首页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 缩略图-书签页 跟随高亮定位到文件的首页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 缩略图-注释 没有高亮定位到任何页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 当前页非尾页,同时按快捷键Ctrl+End(笔记本Ctrl+右键),查看右侧详情页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击缩略图按钮,进入缩略图页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击缩略图-书签按钮,进入书签页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 点击缩略图-注释按钮,进入注释页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 右侧详情页定位到末尾 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 缩略图-缩略图页 高亮定位到文件的末尾 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 缩略图-书签页 跟随高亮定位到文件的末尾 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 缩略图-注释 没有高亮定位到任何页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 当前页非首页,同时按快捷键Ctrl+Home,查看右侧详情页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击缩略图按钮,进入缩略图页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击缩略图-书签按钮,进入书签页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 点击缩略图-注释按钮,进入注释页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 右侧详情页定位到首页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 缩略图-缩略图页 高亮定位到文件的首页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 缩略图-书签页 没有高亮定位到任何页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 缩略图-注释 没有高亮定位到任何页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 启动【文档查看器】检查以下控件: + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: ①标题栏侧边栏按钮 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: ②查找界面的向上及向下查找 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: ③侧边栏界面的翻页按钮 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: ④侧边栏宽度 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: ⑤侧边栏tab按钮大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: ⑥添加书签、添加注释按钮高度 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: ⑦页码背景高度 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: ⑧退出全屏图标大小适配 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 进行涉及紧凑模式调整的控件点击和跳转 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 3. 切换应用主题后,查看步骤一控件 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 控件呈现紧凑模式 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 调整后的控件点击响应正常,页面切换流畅 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 主题切换后,紧凑模式控件显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_右键菜单 + name: 右键菜单测试 + module: 右键菜单 + status: active + annotation: + 测试界面: 主窗口-文档区域右键菜单 + 测试功能: 右键菜单各功能项(复制/全选/书签/缩放) + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击第一页 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击前一页 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 3. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击后一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击最后一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 页面跳转正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 页面跳转正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 页面跳转正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 页面跳转正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 未选中文本,点击鼠标右键,查看右键菜单显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击搜索菜单,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 点击添加书签,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 点击添加注释,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 点击全屏,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 点击幻灯片放映,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 7. 点击第一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 8. 点击前一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 9. 点击后一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 10. 点击最后一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 11. 点击左旋转,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 12. 点击右旋转,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 13. 点击打印,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 14. 点击文档信息,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示:搜索、添加书签、添加注释、全屏、幻灯片放映、第一页、前一页、后一页、最后一页、左旋转、右旋转、打印、文档信息 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出搜索弹框,可以正常进行搜索 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 当前页面正常添加后书签,右上角显示书签图标,左边栏显示书签缩略图 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 弹出注释小窗口,可以正常添加注释,左边栏和右侧文档中注释显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 进入全屏显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 正常播放幻灯片 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 7. 跳转至第一页,如当前文档已在第一页,则“第一页”菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 8. 跳转至前一页,如当前文档已在第一页,则“前一页”菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 9. 跳转至后一页,如当前文档已在最后一页,则“后一页”菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 10. 跳转至最后一页,如当前文档已在最后一页,则“最后一页”菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 11. 文档正常左旋转,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 12. 文档正常右旋转,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 13. 跳转到打印预览界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 14. 显示文档信息界面,界面显示无异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中已添加高亮注释的文本,右击弹出右键菜单,点击复制菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 2. 分别点击高亮、8种高亮图标、取消高亮、添加注释、添加书签,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 选中已添加高亮的文本(未加注释),右击弹出右键菜单,点击复制菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 4. 分别点击高亮、8种高亮图标、取消高亮、添加注释、添加书签,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以复制选中的文本(注释内容无法复制) + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 各菜单正常可用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以复制选中的文本 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 各菜单正常可用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击右键菜单中“幻灯片放映” + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 分别点击ESC键、鼠标右键、控制按钮中的x键 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 3. 分别在浅色和深色主题下,查看和长按控制按钮,查看UI是否与设计图一致 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 打开文档,按快捷键Crtl+H,查看是否进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入幻灯片放映 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 退出幻灯片放映 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 与设计图显示一致 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 进入幻灯片放映,放映到最后一页后,继续循环至第一页播放 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 已连接打印机,点击右键菜单中的打印 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 选择打印机打印 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 跳转到打印预览界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可正常打印纸张;打印预览和实际打印界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 未连接打印机,点击主菜单中的打印菜单 + action: dtk_main_menu + items: + - 保存 + - step_type: action + description: 2. 选择打印到文件(PDF) + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 跳转到打印预览界面, + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打印正常,打印文档可以保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中一段未高亮文本,点击右键菜单中复制菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 选中一段未高亮文本,按键盘中的Ctrl+C键,打开新的文本按键盘中的Ctrl+V键 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 3. 选中一段未高亮文本,点击右键菜单中高亮菜单和8种颜色图标 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 4. 选中一段未高亮文本,点击右键菜单中添加注释菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 5. 选中一段未高亮文本,点击右键菜单中添加书签菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 可以复制选中的文本 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以复制选中的文本 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以增加高亮和切换颜色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 在文本右下角打开注释窗口,可以编辑注释,关闭后注释添加完成,文本自动高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 当前页面添加为书签 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中页面中一段未高亮文本,查看右键菜单包含的菜单项 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 右键菜单包含的选项为:复制、高亮、8种高亮颜色、取消高亮、添加注释、添加书签;其中“取消高亮”置灰显示,其他菜单高亮可选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 分别点击右键菜单中添加书签,添加注释,第一页,上一页,下一页,最后一页菜单,查看是否正确跳转 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 页面正确跳转 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中一段文本,翻页后回到原位置查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中文本不会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中一段文本,右击文本 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 鼠标分别放置在任意一个菜单 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 右侧主视图区域,右击弹出右键菜单,鼠标放置在任意菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 4. 鼠标放置在百分比下拉框菜单任意位置 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 点击菜单键,鼠标放置在任意菜单位置 + action: dtk_main_menu + items: + - 保存 + - step_type: assert + description: 1. 弹出右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常高亮显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 正常高亮显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 正常高亮显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 正常高亮显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开PDF文档,选中一段文本,鼠标在选中区域右击 + action: session_start + command: deepin-reader + - step_type: action + description: 2. 打开PDF文档,选中一段文本,鼠标在非选中区域右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 弹出高亮相关的右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出进行上下页跳转相关的右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 未选中文本,点击鼠标右键,查看右键菜单显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击添加书签,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 点击全屏,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 点击幻灯片放映,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 点击第一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 点击前一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 7. 点击后一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 8. 点击最后一页,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 9. 点击左旋转,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 10. 点击右旋转,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 11. 点击打印,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 12. 点击文档信息,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示:添加书签、全屏、幻灯片放映、第一页、前一页、后一页、最后一页、左旋转、右旋转、打印、文档信息 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 当前页面正常添加后书签,右上角显示书签图标,左边栏显示书签缩略图 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 进入全屏显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 正常播放幻灯片 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 跳转至第一页,如当前文档已在第一页,则“第一页”菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 跳转至前一页,如当前文档已在第一页,则“前一页”菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 7. 跳转至后一页,如当前文档已在最后一页,则“后一页”菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 8. 跳转至最后一页,如当前文档已在最后一页,则“最后一页”菜单置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 9. 文档正常左旋转,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 10. 文档正常右旋转,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 11. 跳转到打印预览界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 12. 显示文档信息界面,界面显示无异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,点击最大化 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 右击主视图界面弹出右键菜单,点击幻灯片播放菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 3. 点击底部按钮的X键,或键盘ESC键 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 4. 打开文档,查看默认状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 右击主视图界面弹出右键菜单,点击幻灯片播放菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 6. 点击底部按钮的X键,或键盘ESC键 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 应用最大化显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 退出幻灯片播放,应用窗口保持最大化显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 窗口为默认大小 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 进入幻灯片播放 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 退出幻灯片播放,应用窗口保持默认大小 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开横向显示的PDF格式文档(可以通过ppt转化) + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击打印,进入打印预览界面,查看预览图片的显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 打开普通纵向显示的PDF格式文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 点击打印,进入打印预览界面,查看预览图片的显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面内容显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常横向显示,不会被纵向拉伸 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 界面内容显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档打开 + name: 文档打开测试 + module: 文档打开 + status: active + annotation: + 测试界面: 文件操作-文档打开 + 测试功能: 各类文档格式打开/拖拽打开 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 打开文档,分别查看右侧和底部进度条显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换至深色,打开文档,分别查看右侧和底部进度条显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示清晰,无异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 显示清晰,无异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 重命名文档,在名称中按tab键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 重命名文档,在名称中按enter键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 重命名文档,在名称中按空格键,再打开此文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 重命名文档,在名称中输入特殊字符、标点符号(%# ,。等),再打开此文档 + action: keyboard_type + text: test_input + - step_type: assert + description: 1. 按tab键不起作用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 按enter键不起作用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 仅打开一个文档查看器窗口,打开文档,点击最小化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 双击另一份文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 最小化至任务栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 窗口重新在桌面打开,另一份文档打开显示在同一个窗口中 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,默认百分比100%,快速滑动页面,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开文档,调整百分比为10%,快速滑动页面,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面显示正常,不会出现加载时长过长现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 界面显示正常,不会出现加载时长过长现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中多个PDF格式文档,右键菜单选择打开 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 选中多个DJVU格式文档,右键菜单选择打开 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 3. 选中多个DOCX格式文档,右键菜单选择打开 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 正常打开所有选择的文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常打开所有选择的文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 正常打开所有选择的文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,按Ctrl+鼠标滚轮,上滑 + action: session_start + command: deepin-reader + - step_type: action + description: 2. 打开文档,按Ctrl+鼠标滚轮,下滑 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 3. 打开文档,按Ctrl+“+”, + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 4. 打开文档,按Ctrl+“-”, + action: keyboard_hot_key + key: ctrl+s + - step_type: assert + description: 1. 文档正常进行放大,放大过程流畅,无闪烁 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档正常进行缩小,缩小过程流畅,无闪烁 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档正常进行放大,放大过程流畅,无闪烁 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文档正常进行缩小,缩小过程流畅,无闪烁 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,鼠标滚轮滑动,查看显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 打开文档,拖拽右侧和底部滚动条 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: assert + description: 1. 页面翻页流畅,无闪烁 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 页面翻页流畅,无闪烁 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,双页显示,拖拽窗口,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开文档,适应高度,拖拽窗口,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打开文档,适应宽度,拖拽窗口,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 打开文档,左旋转,拖拽窗口,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 打开文档,右旋转,拖拽窗口,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面显示顺畅,无闪烁、重影现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 界面显示顺畅,无闪烁、重影现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 界面显示顺畅,无闪烁、重影现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 界面显示顺畅,无闪烁、重影现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 界面显示顺畅,无闪烁、重影现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,分别从上下左右、四个边角拖动改变窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 打开文档,双页显示,分别从上下左右、四个边角拖动改变窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 打开文档,适应高度,分别从上下左右、四个边角拖动改变窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 打开文档,适应宽度,分别从上下左右、四个边角拖动改变窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口变化正常,界面显示正常,不会出现闪烁等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 窗口变化正常,界面显示正常,不会出现闪烁等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 窗口变化正常,界面显示正常,不会出现闪烁等异常;页面始终适应高度显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 窗口变化正常,界面显示正常,不会出现闪烁等异常;页面始终适应宽度显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 已添加文档,查看顶部工具栏的显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击菜单键,查看包含的菜单项 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 查看文档区域显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 展开左边栏,查看底部图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 包含的菜单有:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、工具、打印、主题、帮助、关于、退出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 左边栏缩略图默认收起,右侧文档首次打开默认显示第一页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 显示缩略图图标和书签图标,显示无异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 在文件夹中双击一个docx文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 在文件夹中右击一个docx文档,选择打开方式为:文档查看器 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 拖拽一个docx文档至初始页面 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 4. 打开应用,点击“选择文件”进行选择:进入文件选择页面,选择一个docx文档,点击打开 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 初始界面按Ctrl+O键,选择一个docx文档打开 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 6. 打开应用,点击菜单列表中的“新标签页”菜单,选择一个docx文档打开 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 7. 已打开文档后,点击标签栏右侧的+菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '2.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '3.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '4.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '5.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '6.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '7.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 1.选中多个docx文档,右键菜单选择打开 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 正常打开所有选择的文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 初始界面按Ctrl+O键 + action: keyboard_hot_key + key: ctrl+s + - step_type: assert + description: 2. 文件选择页面点击取消,或者点击ESC键,查看是否退出文件选择界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出文件选择界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 退出文件选择界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开应用,选中三种格式文档(docx、pdf、djvu)拖拽至窗口中,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 打开应用,点击“选择文件”进行选择:进入文件选择页面,选中三种格式文档(docx、pdf、djvu)打开 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 初始界面按Ctrl+O键,进入文件选择页面,选中三种格式文档(docx、pdf、djvu)打开 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 4. 打开应用,点击菜单列表中的“新标签页”菜单,选中三种格式文档(docx、pdf、djvu)打开 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 已打开文档后,点击标签栏右侧的+菜单,三种格式文档(docx、pdf、djvu)打开 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开docx文档,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.0' + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档打开_1 + name: 文档打开测试 + module: 文档打开 + status: active + annotation: + 测试界面: 文件操作-文档打开 + 测试功能: 各类文档格式打开/拖拽打开 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 在文档查看器应用中打开一份docx文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 文档未编辑,点击工具栏关闭按钮或“退出”菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 文档编辑后,点击工具栏关闭按钮或“退出”菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 检查所有保存的文档,编辑内容都正确保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 是否保存弹框的文案改为“是否保存对文档xxx的编辑” + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '3.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 单个窗口中打开三份docx文档,全部未编辑,点击工具栏中的关闭,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口直接关闭,无提示弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开docx文档,文档未编辑,按快捷键Ctrl+S + action: session_start + command: deepin-reader + - step_type: action + description: 2. 打开docx文档,文档编辑后,按快捷键Ctrl+S + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 3. 打开docx文档,文档编辑后,按快捷键Ctrl+Shift+S + action: keyboard_hot_key + key: ctrl+s + - step_type: assert + description: 1. 无提示语弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出另存为界面,可以修改文件名进行另存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 弹出另存为界面,可以修改文件名进行另存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开一份docx文档,编辑后不保存,重启电脑 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 打开一份docx文档,编辑后不保存,注销电脑 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 打开一份docx文档,编辑后不保存,关机 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“重启”继续重启编辑内容不会被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“注销”PC会注销,编辑内容不会被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“关机”PC 会关机,编辑内容不会被保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,重启电脑 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,关机 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,注销 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 无“文档未保存”的提示弹出,直接进入重启;再次开机,另存后的pdf文档中编辑内容不会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 无“文档未保存”的提示弹出,直接关机。再次开机,另存后的pdf文档中编辑内容不会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 无“文档未保存”的提示弹出,直接注销。再次开机,另存后的pdf文档中编辑内容不会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,编辑后关闭,查看提示语显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出是否保存弹框,提示语为 是否保存对“xxx”的编辑 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入设置添加新的用户 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换至新的用户,检查文档查看器版本和基本功能 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 版本正确,基本功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 刷机后首次双击PDF格式文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 刷机后首次双击DJVU格式文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 刷机后首次双击DOCX格式文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开。 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 展开左边栏,删除底部页数框中的数值,再点击窗口内外其他位置 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 删除百分比数值框中的数值,再点击窗口内外其他位置 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 输入框中应该再次显示最近一次的数据 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 输入框中应该再次显示最近一次的数据 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,查看默认百分比显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 切换到双页显示 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 再切到单页显示 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 单页显示时打开左边栏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 双页页显示时打开左边栏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 默认显示单页,100%比例 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 页面适配,无截断显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 页面适配,无截断显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 页面适配,无截断显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 页面适配,无截断显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 输入关键字并搜索 + action: keyboard_type + text: test_input + - step_type: action + description: 2. 按键盘Backspace键删除关键字,重新输入其他关键字并搜索 + action: keyboard_type + text: test_input + - step_type: action + description: 3. 点击搜索框中的上下键切换 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 左边栏弹出搜索结果缩略图,文档中关键字被选中 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 左边栏正常显示新的搜索结果缩略图,不会叠加显示,右侧文档中显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 左边栏和右侧文档中显示均正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击搜索框最右侧X,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常关闭搜索,搜索框和搜索结果都会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击关键字右侧的X,查看显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 全选关键字,按delete键,或者按backspace删除关键字,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 搜索框中的关键字被删除,关键字旁边的X消失,搜索结果被关闭,搜索弹框不会关闭,可以继续输入关键字 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 只有关键字被删除,界面无变化,搜索结果不会被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 搜索弹框中未输入任何内容,点击键盘Enter键,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面无任何改变 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 在搜索框输入关键字搜索,且文档中无此关键字,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 左边栏显示“无搜索结果”,右侧文档无变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击左边栏任意一个搜索结果缩略图,查看页面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 左边栏页面超过一页时,滑动滑鼠,查看页面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击的搜索结果缩略图显示选中状态,右侧文档跳转到相应页面,页面中所有关键字保持高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 页面正常滑动显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击搜索框手动输入关键字,点击键盘enter键搜索,查看搜索结果显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击上一个按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击下一个按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 正常显示搜索结果 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常切换关键字,选中的关键字自动添加绿色高亮效果 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 正常切换关键字,选中的关键字自动添加绿色高亮效果 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 在主菜单中选择搜索,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 右击未选中文本或空白区域,弹出右键菜单项,选择搜索,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出搜索弹框,搜索框中显示搜索字样、搜索框右侧显示上一个、下一个按钮、关闭图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出搜索弹框,搜索框中显示搜索字样、搜索框右侧显示上一个、下一个按钮、关闭图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 跨页选中文本添加高亮 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 右击高亮文本选择“取消高亮” + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 可以正常添加跨页高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 仅可取消当前页高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文本已高亮显示,重叠选中另一段文本,右击未高亮区域添加颜色,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 出现两段重叠颜色,重叠部分为混合色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中/不选中已高亮的文本,点击右键菜单中“取消高亮”菜单,查看是否可以取消高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常取消高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中文本,右击选择一种高亮颜色(如:蓝色) + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 2. 不关闭应用,右击另一段高亮文本,右击弹出右键菜单查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 选中文本,右击选择一种高亮颜色(如:蓝色) + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 4. 不关闭应用,选择另一段未高亮文本,右击弹出右键菜单查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文本添加蓝色高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 右键菜单中蓝色图标仍为选中状态,点击“高亮”菜单,文本切换为蓝色高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文本添加蓝色高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 右键菜单中蓝色图标仍为选中状态,点击“高亮”菜单,文本添加蓝色高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中已高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标进行切换,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 不选中已高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标进行切换,查看是否可以切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 选中一段未高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标添加高亮,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 再次右击这段文本,选择其他颜色进行切换,查看是否切换成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 每点击一种颜色,会叠加成混合色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常切换高亮颜色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以正常添加高亮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 可以正常切换高亮颜色 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_1 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 添加高亮后,查看“高亮”菜单和“取消高亮”菜单显示,查看颜色圈图标是否可以继续点击切换颜色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. “高亮”菜单置灰,“取消高亮”菜单可点击,颜色圈图标可继续点击切换颜色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中一段未高亮文字,查看取消高亮菜单是否置灰 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击右键菜单中的高亮菜单添加 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 取消高亮菜单置灰 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以添加高亮,添加的高亮颜色为当前颜色圈图标选中的颜色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 首次打开文档,选中多行文本右击,查看默认选中的颜色圈图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换颜色后,选中多行文本右击,关闭文档再打开,查看默认的颜色图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 默认选中橘黄色图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 默认选中橘黄色图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击选择图标,在下拉框中选择手型图标 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 鼠标移动到左边栏和右侧文档并点击 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 3. 长按鼠标,查看能否拖动页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 工具栏显示手型工具图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 鼠标移动到左边栏仍显示选择样式,点击可选择任意缩略图和按钮;鼠标移动到右侧文档显示为手型样式,无法选择文本;鼠标移动到链接内容仍显示为手型样式,点击无法进入相应链接 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以拖动页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文档打开后,查看默认使用的工具 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 鼠标移动到左边栏和右侧文档并点击 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 3. 长按鼠标,查看能否拖动页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 默认使用选择工具,工具栏显示选择工具图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 鼠标移动到非可选文档处仍显示选择样式,点击可选择任意缩略图和按钮;鼠标移动到右侧文档变成竖形选择文本图标,可以选择文本;鼠标移动到链接内容显示为手型样式,点击进入相应链接 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 无法拖动页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击下拉框,选择百分比选项 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 点击+、-按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 文档行相应百分比大小调整 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 缩放比例调整为列表中相邻比例选项进行调整 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击编辑框,输入10%-500%范围内任意百分比值(可以输小数点,小数点保留2位),按enter键,查看文档显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击+、-按钮, + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 文档进行相应百分比大小调整,按enter键后输入框中内容无截断显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 缩放比例调整为列表中最靠近该比例的比例选项进行调整 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 查看工具栏中的百分比图标显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击编辑框中的下拉按钮,查看显示的百分比选项 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示带有下拉按钮的编辑框,编辑框左右两侧显示+-按钮;显示效果与设计图一致 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击下拉框显示12个百分比选项:10%、25%、50%、75%、100%、125%、150%、175%、200%、300%、400%、500%;显示效果与设计图一致 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 调整文档百分比大小,按ctrl1查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl1查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl2或适应高度菜单查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl3或适应宽度菜单查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 分别按ctrl1、ctrl2、ctrl3 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文档显示为100%大小 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档显示为100%大小,双页显示/左旋转/右旋转状态不会变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档高度全部显示在当前页面,双页显示/左旋转/右旋转状态不会变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文档宽度全部显示在当前页面,双页显示/左旋转/右旋转状态不会变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 文档在实际大小、适应高度、适应宽度菜状态之间正常切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 百分比与比例选择列表中不匹配(大多数情况),点击+、-按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 百分比与比例选择列表中匹配(少部分情况),点击+、-按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 缩放比例调整为列表中最靠近该比例的比例选项进行调整 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 缩放比例调整为列表中相邻比例选项进行调整 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 文档已调整为适合宽度状态,选择适合高度或按快捷键Ctrl2 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 文档已调整为适合宽度状态,在工具栏缩放比例图标中选择一个比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 文档已调整为适合宽度状态,在工具栏缩放比例图标中手动编辑一个比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 文档已调整为适合宽度状态,按快捷键Ctrl1 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入适合高度状态,适合宽度被取消勾选,文档百分比显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档显示选择的比例,适合宽度取消勾选 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档显示编辑的比例,适合宽度取消勾选 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文档恢复默认大小,适合宽度取消勾选 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 文档已调整为适合高度状态,选择适合宽度或按快捷键Ctrl3 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 文档已调整为适合高度状态,在工具栏缩放比例图标中选择一个比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 文档已调整为适合高度状态,在工具栏缩放比例图标中手动编辑一个比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 文档已调整为适合高度状态,按快捷键Ctrl1 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入适合宽度状态,适合高度被勾选 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档显示选择的比例,适合高度取消勾选 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档显示编辑的比例,适合高度取消勾选 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文档恢复默认大小,适合高度取消勾选 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开一份PDF文档,未展开左边栏,关闭应用再打开 + action: session_start + command: deepin-reader + - step_type: action + description: 2. 打开一份PDF文档,展开左边栏,关闭应用再打开 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 打开一份PDF文档,浏览文档,如当前页数为:5,关闭应用再打开 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 左边栏保持隐藏状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 左边栏保持展开状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 页面仍停留在页数5 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口中只有一个标签页,分别点击调整百分比/双页视图/适应宽度/适应高度/左旋转/右旋转,关闭应用再进入查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 窗口中有多个标签页,分别点击调整百分比/双页视图/适应宽度/适应高度/左旋转/右旋转,关闭应用再进入查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 窗口中只有一个标签页,分别点击调整百分比/双页视图/适合宽度/适合高度/左旋转/右旋转,关闭标签页,不关闭应用,再次打开文档查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 窗口中有多标签页,分别点击调整百分比/双页视图/适合宽度/适合高度/左旋转/右旋转,关闭标签页,不关闭应用,再次打开文档查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 保持退出之前的状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 保持退出之前的状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 保持退出之前的状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 保持退出之前的状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文档单页显示时,改变工具栏百分比大小,查看文档内容变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档单页显示时,使用Ctrl+滚轮或Ctrl++/Ctrl--改变文档大小,查看工具栏百分比数值变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档双页显示时,改变工具栏百分比大小,查看文档内容变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文档双页显示时,使用Ctrl+滚轮或Ctrl++/Ctrl--改变文档大小,查看工具栏百分比数值变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文档内容大小同步变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 工具栏百分比数值同步变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档内容大小同步变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 工具栏百分比数值同步变化 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_2 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 默认文档比例进入双页显示,再切换大小窗口和窗口比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 调整适合宽度,再切换大小窗口和窗口比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 调整适合高度,再切换大小窗口和窗口比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 左旋转,再切换大小窗口和窗口比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 右旋转,再切换大小窗口和窗口比例 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 保持双页显示,文档百分比显示正常,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 保持适合宽度,文档百分比显示正常,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 保持适合高度,文档百分比显示正常,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 保持左旋转,文档百分比显示正常,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 保持右旋转,文档百分比显示正常,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选择任意百分比(如:35%),再切换窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击适合宽度,再切换窗口大小 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击适合高度,再切换窗口大小 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 选择任意百分比(如:35%),左旋转,且未选择适合高度/适合宽度,再切换窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 选择任意百分比(如:35%),右旋转,且未选择适合高度/适合宽度,再切换窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 6. 选择任意百分比(如:35%),左旋转,且选择适合高度/适合宽度,再切换窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 7. 选择任意百分比(如:35%),右旋转,且选择适合高度/适合宽度,再切换窗口大小 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 百分比大小不会改变,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 保持适合宽度,文档百分比相应改变,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 保持适合高度,文档百分比相应改变,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 百分比大小不会改变,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 百分比大小不会改变,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 保持适合高/宽度,文档百分比相应改变,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 7. 保持适合高/宽度,文档百分比相应改变,不会出现闪退等异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 首次打开文档,查看文档默认显示效果 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击双页显示 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击适合宽度 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 点击适合高度 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 点击左旋转 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 6. 点击右旋转 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 默认为单页,适合页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入双页显示模式 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 页面宽度在视窗内全部显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 页面高度在视窗内全部显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 仅当前页面正常进行左旋转,左边栏和工具栏不会翻转,旋转效果顺畅 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 仅当前页面正常进行右旋转,左边栏和工具栏不会翻转,旋转效果顺畅 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,鼠标不点击,任意移动,按键盘上下键或pageup/pagedown + action: session_start + command: deepin-reader + - step_type: action + description: 2. 点击工具栏任意菜单(除去百分比菜单)后,按键盘上下键或pageup/pagedown + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击百分比或页数输入框后,按键盘上下键或pageup/pagedown + action: keyboard_type + text: test_input + - step_type: action + description: 4. 展开左边栏,鼠标点击左边栏区域后任意移动,按键盘上下键或pageup/pagedown + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 鼠标点击右侧文档区域后任意移动,按键盘上下键或pageup/pagedown + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 6. 鼠标点击窗口外桌面区域,,按键盘上下键或pageup/pagedown + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 焦点默认在文档中,文档正常逐行翻页/逐页翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 焦点仍然默认在文档中,文档正常逐行翻页/逐页翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 焦点在输入框,文档不会进行翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 焦点在左侧,缩略图进行翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 焦点在右侧,文档进行翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 焦点在桌面中,选中桌面应用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中一个书签/注释缩略图,鼠标任意移动后,按键盘delete键 + action: keyboard_press + key: Delete + - step_type: action + description: 2. 选中一个书签/注释缩略图,鼠标点击右侧文档区域后,按键盘delete键 + action: keyboard_press + key: Delete + - step_type: action + description: 3. 选中一个书签/注释缩略图,点击百分比或页数输入框,按键盘delete键 + action: keyboard_press + key: Delete + - step_type: assert + description: 1. 正常删除书签/注释缩略图 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 无法删除签/注释缩略图 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 无法删除签/注释缩略图 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击适合高度/适合宽度/调整百分比,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 添加书签和注释 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 隐藏侧边栏时,进入全屏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 展开侧边栏时,进入全屏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 侧边栏和标题栏自动隐藏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 侧边栏和标题栏自动隐藏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏,鼠标移到窗口顶端,查看是否在1秒内呼唤出工具栏; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 鼠标移出标题栏区域,查看是否在1秒内隐藏出工具栏; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 1秒内可以呼唤出工具栏; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 1秒内自动隐藏工具栏; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 全屏前打开了左侧栏再进入全屏,鼠标移动到窗口侧边 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 鼠标移出侧边栏区域 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 1秒钟呼唤出侧边栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 1秒钟自动隐藏侧边栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 全屏前隐藏了左侧栏再进入全屏,鼠标移动到窗口侧边 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 鼠标移出侧边栏区域 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 1秒内呼唤出侧边栏; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 1秒内自动隐藏侧边栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 全屏后唤出工具栏,未唤出侧边栏时,点击缩略图图标 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 全屏后唤出工具栏和侧边栏时,点击缩略图图标 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 缩略图图标高亮显示,鼠标移动到左侧栏不会隐藏左侧栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 缩略图图标高亮显示,鼠标移动到左侧栏不会隐藏左侧栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,不选中文本右击,弹出右键菜单,点击全屏菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 打开文档,按F11键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 1&2.进入全屏界面,隐藏“标题栏”和“侧边栏” + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,鼠标移到窗口顶端 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 鼠标移出标题栏区域 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 1秒钟内呼唤出工具栏,当存在两个标签页时,工具栏和标签栏同时被唤出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 1秒钟内自动隐藏工具栏和标签栏; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,展开侧边栏,点击全屏菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 鼠标移动到窗口侧边 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 鼠标移出侧边栏区域 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏界面,侧边栏隐藏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 1秒内呼唤出侧边栏,“侧边栏”按钮为非选中状态,底部选中的按钮与全屏前一致 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 自动隐藏侧边栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏显示,唤出工具栏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击工具栏中的“侧边栏”按钮,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 再次点击“侧边栏”按钮,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 工具栏正常唤出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. “侧边栏”按钮高亮显示,左侧栏固定显示,鼠标移出左侧栏不会隐藏左侧栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 左侧栏被隐藏 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_3 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 进入全屏显示,先唤出侧边栏,再将鼠标移至左侧栏顶端区域 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击工具栏中的“侧边栏”按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 3. 再次点击“侧边栏”按钮,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 侧边栏和工具栏同时唤出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. “侧边栏”按钮高亮显示,左侧栏固定显示,鼠标移出左侧栏不会隐藏左侧栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 左侧栏被隐藏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏,打开多个标签页,鼠标移至页面顶端查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 关闭仅剩余一个标签页,鼠标移至页面顶端查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示工具栏和标签栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 仅显示工具栏,标题显示在工具栏中间 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,点击右上角菜单按钮 + action: dtk_main_menu + items: + - 保存 + - step_type: action + description: 2. 进入全屏,点击右上角退出全屏按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 进入全屏,点击右上角关闭按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹出菜单弹框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 退出全屏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 关闭文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,点击工具栏右侧退出全屏菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 进入全屏,点击键盘esc按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 进入全屏,按快捷键F1 1 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 进入全屏,右击文档弹出右键菜单,点击“退出全屏” + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 退出全屏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 退出全屏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 退出全屏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 退出全屏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏翻页(如:第5页),左侧栏选中第5页文档缩略图,退出全屏查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 退出全屏显示后仍显示在第5页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏选中一个目录,退出全屏查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 退出全屏左侧栏仍选中此目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏添加书签,退出全屏后查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 书签页数和书签个数无变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏添加注释,退出全屏后查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 注释页数、个数、内容无变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏选择手型工具,退出全屏后查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 仍显示手型工具 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏搜索并弹出搜索结果,退出全屏查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 搜索结果仍显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 仅只打开一份文档,进入再退出全屏,查看标题栏的显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开多份文档,进入再退出全屏,查看标题栏的显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 标题栏的显示无变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 标题栏的显示无变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏调整视图(双页显示、适合页面、默认大小、适应宽度、适应高度、每个百分比),退出后查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 退出全屏视图状态无变化,百分比数值相应变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,未唤出左侧栏,点击双页显示(适应宽度默认勾选) + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 鼠标移出左侧栏再移入 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面正常双页显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 保持双页显示和适应宽度状态,百分比值改变 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,未唤出左侧栏,点击适应高度 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 鼠标移出左侧栏再移入 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示为适应高度状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档保持适应高度状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,未唤出左侧栏,点击适应宽度 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 鼠标移出左侧栏再移入 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示为适应宽度状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档保持适应宽度状态,百分比数值不改变 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_4 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 进入全屏,未唤出左侧栏,搜索关键字并弹出搜索结果 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 鼠标移出左侧栏再移入 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 搜索结果缩略图显示,关键字黄色高亮显示,选中的关键字为绿色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 搜索结果无变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适合页面 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 收起再展开左侧栏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面显示适合页面状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档保持适合页面状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适应高度 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 收起再展开左侧栏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示为适应高度状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档保持适应高度状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适应宽度 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 收起再展开左侧栏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示为适应宽度状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档保持适应宽度状态,百分比数值相应改变 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,搜索关键字,左侧弹出搜索结果 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 收起再展开左侧栏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 搜索结果缩略图显示,关键字黄色高亮显示,选中的关键字为绿色 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 搜索结果无变化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 进入全屏,未选中文本右击,查看右键菜单显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 全屏菜单变成“退出全屏” + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 进入全屏,点击右键菜单中的第一页菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 进入全屏,点击右键菜单中的前一页菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 3. 进入全屏,点击右键菜单中的后一页菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 4. 进入全屏,点击右键菜单中的最后一页菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 5. 进入全屏,点击右键菜单中的保存菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 6. 进入全屏,点击右键菜单中的另存为菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 7. 进入全屏,点击右键菜单中的打印菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 8. 进入全屏,点击右键菜单中的幻灯片放映菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 9. 进入全屏,点击右键菜单中的退出菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '2.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '3.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '4.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '5.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '6.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '7.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '8.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 9. 1~9.功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 搜索完成后,鼠标放置在左侧栏底部四个按钮之上 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 按钮置灰,不应该有hover效果 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 全屏显示界面打开放大镜 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 退出放大镜,不会退出全屏显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 搜索关键字,当搜索结果较多正在进行时,点新窗口菜单 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 搜索关键字,当搜索结果较多正在进行时,点新标签页菜单 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 搜索关键字,当搜索结果较多正在进行时,点保存菜单 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 搜索关键字,当搜索结果较多正在进行时,点另存为菜单,另存为新文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 搜索关键字,当搜索结果较多正在进行时,点击幻灯片放映菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 6. 搜索关键字,当搜索结果较多正在进行时,点击放大镜菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 7. 搜索关键字,当搜索结果较多正在进行时,点击在文件管理器中显示菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 8. 搜索关键字,当搜索结果较多正在进行时,点击在主题菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 9. 搜索关键字,当搜索结果较多正在进行时,点击在帮助菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 10. 搜索关键字,当搜索结果较多正在进行时,点击在关于菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 11. 搜索关键字,当搜索结果较多正在进行时,点击在退出菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 正常弹出新窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常弹出文件管理器选择界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 正常保存文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 可以另存成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 进入幻灯片放映界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 放大镜正常可以使用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 7. 可以打开所在文件夹 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 8. 正常切换主题 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 9. 进入帮助手册界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 10. 打开关于弹窗 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 11. 退出应用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 百分比调整到10%,分别点击双页显示、适合宽度、 适合高度、适合页面、 左旋转、 右旋转,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 百分比调整到500%,分别点击双页显示、适合宽度、 适合高度、适合页面、 左旋转、 右旋转,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,鼠标不点击,任意移动,按键盘上下键或pageup/pagedown + action: session_start + command: deepin-reader + - step_type: action + description: 2. 点击工具栏任意菜单(除去百分比菜单)后,按键盘上下键或pageup/pagedown + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击百分比或页数输入框后,按键盘上下键或pageup/pagedown + action: keyboard_type + text: test_input + - step_type: action + description: 4. 展开左边栏,鼠标点击左边栏区域后任意移动,按键盘上下键或pageup/pagedown + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 鼠标点击右侧文档区域后任意移动,按键盘上下键或pageup/pagedown + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 6. 鼠标点击窗口外桌面区域,,按键盘上下键或pageup/pagedown + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 焦点默认在文档中,文档正常逐行翻页/逐页翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 焦点转移到工具栏 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 焦点在输入框,文档不会进行翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 焦点在左侧,缩略图进行翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 焦点在右侧,文档进行翻页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 焦点在桌面中,选中桌面应用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开多份文档并进入全屏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 全屏界面添加新的文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 退出全屏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 全屏界面关闭部分文档,再退出全屏 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文档正常显示,不会丢失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档标题正常显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档正常显示,不会丢失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文档正常显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,打开搜索框,未输入关键词查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开文档,打开搜索框,输入关键词未按enter键,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打开文档,打开搜索框,输入关键词并按enter键,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 向上、向下切换按键置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 向上、向下切换按键置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 向上、向下切换按键高亮显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,在输入框中输入英文关键字,如:user,按键盘enter键,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击搜索框上一个、下一个按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 3. 打开文档,在输入框中输入中文关键字,如:系统,按键盘enter键,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 点击搜索框上一个、下一个按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 搜索结果高亮显示,左侧栏中搜索结果内容与个数显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 按整个单词跳转,而不是按单个字母跳转;点击“上一个” 、“下一个”按钮均可以起作用,跳转到最后一个关键字后循环切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 搜索结果高亮显示,左侧栏中搜索结果个数显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 按整个词语跳转,而不是按单个字跳转;点击“上一个” 、“下一个”按钮均可以起作用,跳转到最后一个关键字后循环切换 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_5 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 打开文档,点击最大化按钮 + action: session_start + command: deepin-reader + - step_type: action + description: 2. 点击右键菜单中的“全屏”菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 3. 右击主视图界面弹出右键菜单,点击“退出全屏”菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 4. 打开文档,显示为默认窗口大小,点击右键菜单中的“全屏”菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 5. 右击主视图界面弹出右键菜单,点击“退出全屏”菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 窗口最大化显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入全屏显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以退出全屏显示,窗口需保持最大化显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 进入全屏显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 可以退出全屏显示,窗口需保持默认大小显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,点击最大化显示 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 鼠标放置在屏幕顶端,按快捷键F11 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 打开文档,点击最大化显示 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 鼠标放置在屏幕左侧边缘,按快捷键F11 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文档最大化显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 工具栏自动弹出,按钮可点击,不会置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档最大化显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 左侧栏自动弹出,按钮可点击,不会置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开带有超链接文本的文档,鼠标(默认选择样式)放置在超链接文本之上,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 移走鼠标,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 鼠标显示为手形样式,显示超链接详情浮窗,浮窗立即显示无间隔时长,与UI图相符。浮窗内容无法点击 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 超链接详情浮窗和手形样式消失,鼠标恢复选择样式 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 鼠标放置在超链接文本之上,弹出手形样式和详情浮窗,点击超链接,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 安全提示弹框弹出后,点击关闭按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 安全提示弹框弹出后,点击“阻止”按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 安全提示弹框弹出后,点击“允许”按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹出安全提示弹框,弹框中显示关闭、“阻止”、“允许”按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 关闭弹窗,不做任何操作 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 关闭弹窗,不做任何操作 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 关闭弹窗,打开浏览器并跳转至该链接(网页的超链接会打开浏览器,email超链接会打开邮箱应用,多媒体超链接会打开相应的应用) + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 安全提示弹框弹出后,点击应用其他菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 点击均无作用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击超链接文本,点击安全提示弹框中的“允许”按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 再次点击此超链接 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 关闭弹窗,打开浏览器并跳转至该链接 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 继续弹出安全提示弹框,点击“允许”按钮,浏览器中重新打开另一个标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 备注:每次点击超链接都会弹出安全提示弹框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 切换至手形工具,放置在超链接文本之上 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 切换至手形工具,点击超链接文本 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 切换至手形工具,选中超链接文本或普通文本 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 切换至手形工具,右击超链接文本 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 会显示超链接浮窗 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出安全提示弹框,弹框中显示关闭、“阻止”、“允许”按钮,点击各按钮功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 无法选中超链接文本或普通文本 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 弹出搜索相关的右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 不选中,直接右击超链接文本 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 弹出包含搜索等的菜单的右键菜单,点击各菜单功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击超链接弹出安全提示弹框 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '2.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 在新标签页首次打开文档A + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文档A页面视图 默认为适合页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档A且调整页面视图为A(适合页面) + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 在新窗口打开文档B + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 调整页面视图成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 新打开的文档B页面视图为A(适合页面) + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口1查看文档C且调整页面视图C(200%),窗口2查看文档D且调整页面视图D(适应宽度) + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 两个窗口分别在新标签页打开文档A、文档B + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 调整页面视图成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档A页面视图为A(适合页面),文档B页面视图为B(25%) + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口1查看文档C且调整页面视图C(300%),窗口2查看文档D且调整页面视图D(75%) + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 分别在两个新窗口打开文档A、文档B + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 调整页面视图成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档A页面视图为A(双页显示、默认大小),文档B页面视图为B(双页显示、500%) + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_标签页 + name: 标签页测试 + module: 标签页 + status: active + annotation: + 测试界面: 主窗口-标签页栏 + 测试功能: 标签页新建/关闭/拖拽/排列 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 打开多个标签页,查看显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 已打开多个标签页,添加其他标签页 + action: session_start + command: deepin-reader + - step_type: action + description: 3. 点击左移右移按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 标签栏需全部占满,无空出区域;标签页最小140px;显示效果与设计图一致 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 新添加的标签页高亮显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 正常显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口中只有一个标签页,将标签页拖拽到其他应用(如:编辑器)的工具栏或正文区域,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 窗口中有多个标签页,将标签页拖拽到其他应用(如:编辑器)的工具栏区域,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 窗口中有多个标签页,将标签页拖拽到其他应用(如:编辑器)的正文区域,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 应该无法拖拽 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开一个新窗口以显示此标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 打开一个新窗口以显示此标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,添加多个标签页 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击标题栏的x,关闭所有标签页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 3. 关闭所有标签页后查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 正常添加 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常关闭,若有编辑内容会弹出是否保存的提示弹框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '3.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开多份文档文档,点击标签页右侧的+按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 退出选择界面,点击标签页中X进行关闭 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 打开多份文档文档,其中一份文档A编辑后,点击标签页中X + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 点击弹框中的保存 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 点击弹框中的不保存 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 进入文件选择界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常关闭 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 弹出是否保存的提示弹框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文档A关闭,再次打开文档A,编辑的内容正常保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 文档A关闭,再次打开文档A,编辑的内容未保存 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 单个窗口中只有一个标签页,拖拽标签页移出窗口,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 单个窗口中只有一个标签页,拖拽标签页移至所在窗口的正文区域,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 单个窗口中只有一个标签页,拖拽标签页移至所在窗口内标签栏或工具栏 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: assert + description: 1. 无法拖拽,无提示弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 无法拖拽,无提示弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 无法拖拽,无提示弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开多个标签页,点击视图调整中适合高度、适合宽度、双页、左旋转、右旋转菜单;调整百分 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 2. 点击切换另一个标签页,查看视图调整中菜单显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 页面正常进入相应状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 显示当前页的状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 未打开任何文档查看器窗口时,双击一份文档,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 已打开一个文档查看器窗口,双击另一份文档并查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 有多个窗口时,双击文档并查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 文档在一个新窗口中打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. .窗口中新增标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档展示在最早开启的窗口中 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 只打开一个窗口并添加文档A,双击/拖拽/点击添加标签页菜单方式打开再次添加文档A至此窗口 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 2. 打开多个窗口,文档A已在其中一个窗口打开,双击/拖拽/点击添加标签页菜单方式打开再次拖拽文档A至任意窗口,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 无法添加相同文档,激活当前页,无提示弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 无法添加相同文档,激活当前页,无提示弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开多个窗口,每个窗口中分别有多个标签页 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 将一个窗口标签页拖拽到另外一个窗口中任意位置 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: assert + description: 3. .当窗口A中只有一个标签页,将此标签页拖拽至其他窗口,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 标签页可以正常在不同窗口之间拖拽移动,拖拽过程中鼠标显示绿色可拖拽标志 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 窗口A自动关闭退出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 拖拽标签页移至另一个窗口中标签栏和文档区域,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 拖拽标签页至另一个窗口中工具栏区域或移出当前窗口,查看是否创建一个新的窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 标签页合并至另一个窗口中,拖拽过程中鼠标显示绿色可拖拽标志;拖动过程中界面显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正常创建一个新的窗口,拖拽过程中鼠标显示绿色可拖拽标志 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 在不同标签页中进行搜索 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 切换产生搜索结果的标签页 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 点击当前页搜索框中的关闭按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 每个标签页分别显示搜索结果, + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 每个标签页的搜索结果和搜索弹框正常显示不会被关闭 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 仅当前页搜索结果被正常关闭,其他标签页搜索弹框和搜索结果仍正常显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 窗口中打开多个标签页直到超过标签栏范围,窗口界面显示 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击左翻按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击右翻按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 4. 选择首个标签页或左侧无隐藏文件时,查看左翻按钮是否置灰 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 选择最后一个标签页右侧无隐藏文件时,查看右翻按钮是否置灰 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 左翻箭头高亮显示,可以点击 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 左侧隐藏的文档左移 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 右侧隐藏的文档右移 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 左翻按钮置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 右翻按钮置灰显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 长按任意一个标签页拖拽,查看是否正常调整标签页排序 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 在标签栏滚动鼠标,查看是否可以滚动切换标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 点击切换标签页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 可以调整标签页排序 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以滚动切换标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 正常切换无异常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击多标签栏右侧“+”图标添加新标签页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 从文件管理器或桌面中拖拽其他文档至窗口中 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 3. 点击菜单中的“新标签页”菜单添加新标签页 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 双击另一份文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 右击另一份文档,选择文档查看器 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以在已打开的窗口中添加标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以在已打开的窗口中添加标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以在已打开的窗口中添加标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 可以在已打开的窗口中添加标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 可以在已打开的窗口中添加标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口中无标签页,打开文档查看器进入初始页面,从文件管理器或桌面拖拽多个文档添加 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 窗口中无标签页,点击菜单中的“新标签页”菜单,查看是否添加新标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 窗口中无标签页,双击另一份文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 窗口中无标签页,右击另一份文档,选择文档查看器 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以在已打开的窗口窗口中显示多个标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以在已打开的窗口添加标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以在已打开的窗口添加标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 可以在已打开的窗口添加标签页,文档显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_标签页_1 + name: 标签页测试 + module: 标签页 + status: active + annotation: + 测试界面: 主窗口-标签页栏 + 测试功能: 标签页新建/关闭/拖拽/排列 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 不同窗口间文档拖拽 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 2. 窗口中拖拽添加的文档,进行视图调整操作:双页显示、适应高度、适应宽度、左旋转、右旋转 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 3. 窗口中拖拽添加的文档,添加书签、高亮、注释 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 4. 窗口中拖拽添加的文档,进行翻页操作 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 5. 窗口中拖拽添加的文档,选择选择工具和手形工具拖拽文档 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 6. 窗口中拖拽添加的文档,点击菜单中选项:新窗口、新标签页、保存、另存为、打印、幻灯片放映、放大镜、文档信息、在文件管理器中显示、主题、帮助、关于、退出 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 正常拖拽 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档查看器后,点击“新窗口”菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 拖拽文档至新打开的窗口中 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: action + description: 3. 在新窗口中点击“选择文件”按钮打开文档 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 在新窗口中点击“新标签页”添加文档 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 关闭旧窗口,双击桌面或文件夹的一份文档 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开一个新的窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档在新窗口中正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 文档在新窗口中正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 文档在新窗口中正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 文档在新窗口中正常打开 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_注释 + name: 注释测试 + module: 注释 + status: active + annotation: + 测试界面: 左侧栏-注释视图 + 测试功能: 注释添加/删除/编辑/跳转 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 选中一个左侧栏的注释目录,鼠标不点击移动至左边栏以外区域,按快捷键delete,查看是否正常删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 文本已添加高亮注释,重叠选中另一段文本,右击未高亮区域添加注释, + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 文本已添加高亮注释,重叠选中另一段文本,右击高亮区域 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 出现两段重叠颜色,添加另一条注释 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 仅可修改原注释内容,无法添加注释 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 添加高亮注释或图标注释,保存关闭文档,再进行重命名,打开查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. UOS系统中,文档添加高亮注释或图标注释后,发送至另一台UOS电脑,使用文档查看器应用打开查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. UOS系统中文档查看器,添加高亮、高亮注释和图标注释并保存,再使用wps打开此文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. UOS系统中文档查看器,添加高亮、高亮注释和图标注释并保存,发送至Windows/苹果电脑中,打开此文档 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 添加的高亮或注释不会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 添加的高亮或注释不会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 添加的高亮或注释不会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 添加的高亮或注释不会消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 右击左侧栏的注释目录,查看弹出的右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击复制,查看是否可以复制该条注释内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示菜单:复制、删除注释、删除所有注释 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以复制该条注释内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击左边栏任意一个注释,查看是否跳转到该页相应注释内容处 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 正确跳转到该页相应注释内容处,注释目录与文档注释页面同步展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 不同页面添加注释 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 同一页面添加注释 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 按照页面顺序展示,页面靠前则该页面的注释目录靠前 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 同一页面按时间先后顺序显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 添加图标注释和高亮注释,查看左边栏注释目录显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.0' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 右击高亮注释文本,选择右键菜单中的取消高亮进行删除 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击高亮注释文本,弹出小窗口,删除窗口所有内容,点击窗口的x或窗口之外区域 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 右击缩略图_注释,选择删除菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 4. 单击缩略图_注释,按delete快捷键进行删除 + action: keyboard_press + key: Delete + - step_type: assert + description: 1. 可以正常删除注释,左边栏缩略图_注释同步被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常删除注释,左边栏缩略图_注释同步被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以正常删除注释,左边栏缩略图_注释同步被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 可以正常删除注释,左边栏缩略图_注释同步被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 右击注释小图标,选择右键菜单中的删除注释进行删除 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击注释小图标,弹出小窗口,删除窗口所有内容,点击窗口的x或窗口之外区域 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 右击缩略图_注释,选择删除菜单 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 4. 单击缩略图_注释,按delete快捷键进行删除 + action: keyboard_press + key: Delete + - step_type: assert + description: 1. 可以正常删除注释,左边栏缩略图_注释同步被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常删除注释,左边栏缩略图_注释同步被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以正常删除注释,左边栏缩略图_注释同步被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 可以正常删除注释,左边栏缩略图_注释同步被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 添加高亮注释后,查看左边栏是否对应添加注释目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 左边栏是否对应添加注释目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 鼠标悬停在高亮注释上,浮窗显示部分注释文案 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 滚动滑鼠或按键盘上下键查看是否可以滑动浮窗中内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 浮框显示部分注释文案 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 浮窗中内容无法滑动 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 右键点击高亮注释文本 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 选中高亮文本,点击右键菜单中复制 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 3. 直接右击高亮文本,点击菜单中复制 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 显示右键菜单:复制,高亮,取消高亮,添加注释,添加书签 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正确复制选中的文本 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 可以正确复制注释内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 单击高亮注释 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 编辑修改输入框中内容 + action: keyboard_type + text: test_input + - step_type: assert + description: 3. 鼠标左击或右击注释框外其他区域,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示注释输入框,输入光标显示在内容后方 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以修改 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 注释框关闭,注释编辑成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 编辑注释界面,鼠标滑动注释小窗口中内容 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以滑动 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 右击高亮注释,弹出右键菜单;鼠标左键点击其他区域 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 右击高亮注释,弹出右键菜单;鼠标右键点击其他区域 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 右键菜单框消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 右键菜单框消失 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_注释_1 + name: 注释测试 + module: 注释 + status: active + annotation: + 测试界面: 左侧栏-注释视图 + 测试功能: 注释添加/删除/编辑/跳转 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 选中一段文本并右击弹出右键菜单,点击“添加注释” + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 2. 注释输入窗口,输入内容,查看是否可以自动换行 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 注释输入窗口,查看是否支持滚动或按上下键、pageup、pagedown查看全部信息 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 当输入框内容输入超过1500字符(中文或英文)限制,查看是否弹出提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出注释小窗口,固定显示在点击位置 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以自动换行 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 支持滚动或按键查看全部信息 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 正确弹出提示:输入已达上限 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 每个注释小图标添加后,查看左边栏是否对应添加注释目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 左边栏对应添加注释目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 鼠标悬停在注释图标上,查看显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 滚动滑鼠或按键盘上下键查看是否可以滑动浮窗中内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 浮框显示部分注释文案 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 浮窗中内容无法滑动 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 右键点击已添加的注释小图标 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 2. 点击复制菜单并粘贴至txt等文档中,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 点击添加注释菜单,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 点击删除注释菜单,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 点击添加书签菜单,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示右键菜单:复制,删除注释,添加注释,添加书签 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 注释内容被正确复制 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 展开注释窗口,可以进行注释编辑 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 注释小图标被正确删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 当前页面正确添加为书签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 注释添加完成后,鼠标左键单击注释图标,查看显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 编辑注释内容 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 鼠标左击其他区域(非注释图标和注释框),查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 左击注释图标,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 编辑注释内容 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 鼠标右击其他区域(非注释图标和注释框),查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常修改 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 可以正常修改 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 右击注释图标,弹出右键菜单;鼠标左键点击其他区域 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 右击注释图标,弹出右键菜单;鼠标右键点击其他区域 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 右键菜单框消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 右键菜单框消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击“添加注释”,再点击文档界面,展开空白小窗口,不输入内容,直接点击右上角关闭图标或文档中其他位置 + action: keyboard_type + text: test_input + - step_type: assert + description: 1. 注释自动取消; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击“添加注释”,鼠标移至页面单击任意位置,查看弹出显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 注释输入窗口,输入内容,查看是否可以自动换行 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 注释输入窗口,查看是否支持滚动或按上下键、pageup、pagedown查看全部信息 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 当输入框内容输入超过1500字符(中文或英文)限制,查看是否弹出提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出注释小图标和小窗口,均固定显示在点击位置 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以自动换行 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 支持滚动或按键查看全部信息 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 正确弹出提示:输入已达上限 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中文本,右键点击在文字上,点击右键菜单的“添加注释”,查看是否弹出高亮注释窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出高亮注释窗口,可以添加高亮注释成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 未选中文本,点击左边栏添加注释按钮,点击页面区域任意位置,查看是否弹出图标注释窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 输入注释内容,点击窗口外其他区域 + action: keyboard_type + text: test_input + - step_type: assert + description: 3. 未选中文本,右键点击在非图标注释及非高亮注释的空白区域,点击右键菜单的“添加注释”,查看是否弹出图标注释窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 输入注释内容,点击窗口外其他区域 + action: keyboard_type + text: test_input + - step_type: assert + description: 1. 弹出图标注释窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 窗口关闭,图标注释正常显示,图标注释添加成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 弹出图标注释窗口 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 窗口关闭,图标注释正常显示,图标注释添加成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,添加一个书签,右击底部注释目录图标,查看菜单显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击“删除所有注释”菜单,查看弹出的提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 点击提示框中的取消 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 点击提示框中的确定 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 5. 弹框弹出时,点击应用中其他菜单 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 显示“删除注释”和“删除所有注释”菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出提示:您确定要删除所有注释吗? + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 弹框关闭,所有注释均不会被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 弹框关闭,所有注释被删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 其他菜单点击均无作用 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 鼠标左键单击注释图标,查看显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 编辑注释内容 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 鼠标左击其他区域(非注释图标和注释框),查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常修改 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 注释框消失,注释内容编辑成功,注释图标选中状态被取消 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 左击注释图标,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 编辑注释内容 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 鼠标右击其他区域(非注释图标和注释框),查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常修改 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 非选中图标状态,鼠标左键长按注释图标移动 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 移动到目标区域,松开鼠标 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 鼠标左键点击其他区域(非注释图标和注释框) + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 注释图标变成选中状态,可以移动 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 松开鼠标完成移动,注释图标显示为选中状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 取消注释图标选中状态; + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中图标状态,鼠标左键长按注释图标移动 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 移动到目标区域,松开鼠标 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 鼠标左键点击其他区域(非注释图标和注释框) + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 注释图标保持选中状态,可以移动 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 松开鼠标完成移动,注释图标显示为选中状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 注释图标选中状态吧被取消 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_注释_2 + name: 注释测试 + module: 注释 + status: active + annotation: + 测试界面: 左侧栏-注释视图 + 测试功能: 注释添加/删除/编辑/跳转 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 鼠标焦点在注释图标区域外,进行移动 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 无法移动注释图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 按住鼠标左键移动注释图标至其他页面 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 无法移动至其他页面,仅支持在当前页移动 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 右击注释图标,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 鼠标左键点击其他区域 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 右击注释图标弹出右键菜单,鼠标右键点击其他区域 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 弹出右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 右键菜单框消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 右键菜单框消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 弹出注释编辑窗口,输入内容 + action: keyboard_type + text: test_input + - step_type: action + description: 2. 按Ctrl+A快捷键 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 3. 按Ctrl+C快捷键 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 4. 按Ctrl+V快捷键 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 5. 按Ctrl+X快捷键 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 6. 按Ctrl+Z快捷键 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 7. 按Ctrl+S快捷键 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 8. 按delete快捷键 + action: keyboard_press + key: Delete + - step_type: assert + description: 1. 内容正常显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 全选内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 复制内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 粘贴内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 剪切内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 6. 撤销操作 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 7. 保存内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 8. 删除选中的内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 鼠标悬停在图标注释或高亮注释之上 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 按快捷键Windows+D进入桌面查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 鼠标悬停在图标注释或高亮注释之上 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 鼠标移出注释区域 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 注释浮窗显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 应用最小化,浮窗不会单独显示桌面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 注释浮窗显示注释浮窗显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 注释浮窗应该消失 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 添加多个注释 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 选择一个注释目录,按键盘上下键/pageup、pagedown,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 双页显示时,添加多个注释 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 选择一个注释目录,按键盘上下键/pageup、pagedown,查看 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 展开左边栏,显示多个注释目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换正常,右侧文档对应跳转 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 展开左边栏,显示多个注释目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 切换正常,右侧文档对应跳转 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开文档,分别添加高亮注释和图标注释,输入注释内容均达到上限1500字 + action: session_start + command: deepin-reader + - step_type: action + description: 2. 按快捷键Ctrl+S保存 + action: keyboard_hot_key + key: ctrl+s + - step_type: action + description: 3. 关闭文档,再打开 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 添加成功 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 弹出“保存成功”提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 高亮注释和图标注释显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_目录 + name: 目录测试 + module: 目录 + status: active + annotation: + 测试界面: 左侧栏-目录视图 + 测试功能: 文档目录显示与跳转 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 进入左边栏目录界面,点击选中目录索引,查看右侧文档显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入左边栏目录界面,按键盘上下键/pageup/pagedown切换目录选中,查看右侧文档页面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 改变右侧文档当前所在页数,查看左边栏目录显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 右侧文档跳转至当前所选目录索引页,且显示为第一行;左侧目录点击后正常高亮显示,不会出现高亮定位不准现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 右侧文档跳转至当前所选目录索引页,且显示为第一行;左侧目录点击后正常高亮显示,不会出现高亮定位不准现象 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 目录会对应高亮显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,查看目录默认展示方式 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 展开层级索引后关闭再打开文档,查看目录展示方式 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 默认展示为收起状态,展示一级目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 恢复默认状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 调整左边栏宽度,查看目录显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击收起及展开目录层级索引 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 目录显示内容相应调整,超出省略,不省略页数 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常收起及展开目录层级索引,最多显示三级 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击左边栏底部目录图标 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 2. 查看目录显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 左边栏显示文档目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '2.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开一份不可读取页数的文档,查看输入框一行的显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 输入框中输入页码(包括数字和字母),查看是否正常跳转 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 输入非有效内容,查看提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 点击页数右侧的上翻、下翻按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 显示为:输入框和文档总页数;文档翻页时页数显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 跳转至对应页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 提示“请输入有效页码” + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 点击上翻按钮,页数上翻;点击下翻按钮,页数下翻 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开一份可读取页数的文档,查看输入框一行的显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 输入框中输入页码(包括数字和字母),查看是否正常跳转 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 输入任意非有效内容,查看提示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 点击页数右侧的上翻、下翻按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 显示为:输入框、默认计算页数和文档总页数;文档翻页时页数显示正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 跳转至对应页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 提示“请输入有效页码” + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 点击上翻按钮,页数上翻;点击下翻按钮,页数下翻 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开有目录的文档,点击正文的目录 + action: session_start + command: deepin-reader + - step_type: action + description: 2. 文档左旋转,点击正文的目录 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 文档右旋转,点击正文的目录 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 文档旋转180度后,击右侧正文的目录 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 跳转至相应文档内容处 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 跳转至相应文档内容处 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 跳转至相应文档内容处 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 跳转至相应文档内容处 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_社区需求 + name: 社区需求测试 + module: 社区需求 + status: active + annotation: + 测试界面: 主窗口-社区需求 + 测试功能: 幻灯片/UI显示等社区需求 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 在任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放,播放内容不会进行拉伸,顶格展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 菜单栏显示 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放,播放内容不会进行拉伸,顶格展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 鼠标不在菜单栏上,3秒自动隐藏(鼠标在菜单栏上,一直显示不隐藏) + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 幻灯片默认暂停播放 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 鼠标左击点击幻灯片任意位置 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 切换到下一页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击方向键下键或者右键 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 4. 点击方向键上键或者左键 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 切换到下一页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 切换到上一页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击菜单键中播放按钮 + action: dtk_main_menu + items: + - 保存 + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 按钮状态变成暂停,幻灯片开始播放 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 手动点击到最后一页幻灯片 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. toast提示“已是最后一页”3秒消失,向后按钮置灰 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 播放到最后一页点击往下翻时 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. toast提示“已是第一页”3秒后小时,向后按钮置灰 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 自动播放时,播放到最后一页时,自动暂停 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 菜单键中暂停按钮变成播放按钮,再次点击播放从第一页开始播放 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 播放到最后一页滚轮向下滚动 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. toast提示“已是最后一页”3秒后小时,向后按钮置灰 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 播放到最后一页键盘点击下键或右键 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. toast提示“已是最后一页”3秒后小时,向后按钮置灰 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击自动播放按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 点击方向键下键或者右键 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 5. 点击方向键上键或者左键 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 幻灯片开始播放 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 切换到下一页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 切换到上一页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 点击幻灯片放映 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 3. 点击自动播放按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 4. 鼠标滚轮上下滚动 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹框展示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 进入幻灯片播放界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 幻灯片开始播放 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 切换到上一页/下一页 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_窗口管理 + name: 窗口管理测试 + module: 窗口管理 + status: active + annotation: + 测试界面: 主窗口-窗口管理 + 测试功能: 窗口大小变化/最小尺寸/显示模式 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 调整窗口大小,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 手动拖拽目录边框,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 左边栏区域和右侧文档区域始终保持约1:3的比例变化,左边栏文档、书签、注释、搜索结果缩略图大小跟随变化,左边栏宽度范围:266px~380px + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 左边栏文档、书签、注释、搜索结果缩略图大小跟随变化,左边栏宽度范围:266px~380px + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 检查窗口尺寸 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 打开新窗口,检查新窗口尺寸 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 检查各个子页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 应用窗口尺寸680*300 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 新窗口尺寸为默认尺寸 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 无遮挡、无压缩变形 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 窗口最大化之后再点击最小化按钮 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 窗口尺寸为最小窗口680*300 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 关闭后再次打开应用 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口尺寸为最小窗口680*300 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_缩略图 + name: 缩略图测试 + module: 缩略图 + status: active + annotation: + 测试界面: 左侧栏-缩略图视图 + 测试功能: 文档缩略图显示与切换 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 展开左边栏,查看左边栏界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 点击缩略图图标查看左边栏界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 点击目录图标查看左边栏界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 点击书签图标查看左边栏界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 点击注释图标查看左边栏界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 底部显示4个按钮:缩略图图标、目录图标、书签图标、注释图标;界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 显示页数输入框、总页数,上下翻页按钮;输入页数正确跳转,上下翻页正常;左边栏宽度范围在266px~380px之间,界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 显示目录界面,无目录文档则显示空白;界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 显示添加书签按钮,点击可将当前浏览页面添加书签;界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. .显示添加注释按钮,点击添加注释按钮再点击文档任意位置,可弹出添加注释小窗口界面;界面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 打开文档,查看文档缩略图默认显示内容 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档中添加高亮、书签、注释,查看左边栏文档缩略图中是否显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 删除高亮、书签、注释,查看左边栏文档缩略图中是否显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 显示所有页面缩略图 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 文档缩略图中正常显示高亮、书签图标、注释图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 删除的高亮、书签图标、注释图标,文档缩略图也会删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击左边栏任意一个文档缩略图标,查看右侧文档是否跳转到相应页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 左边栏页面超过一页时,滑动鼠标中间滑轮,查看页面是否正常滑动显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 右侧文档是否跳转到相应页面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 页面是否正常滑动显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 点击顶端工具栏中缩略图标,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 分别点击目录图标、书签图标和注释图标,查看界面显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 再次点击顶端工具栏中缩略图标 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 左边栏底部显示四个图标:缩略图图标、目录图标、书签图标和注释图标 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 左边栏显示相应缩略图页面,页面显示正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 会取消高亮,隐藏左边栏和缩略图内容 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_触摸屏 + name: 触摸屏测试 + module: 触摸屏 + status: active + annotation: + 测试界面: 主窗口-触摸屏交互 + 测试功能: 触摸屏手势操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 打开多份文档,单击工具栏菜单按钮 + action: session_start + command: deepin-reader + - step_type: assert + description: 1. 功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 展开左侧栏,单击选择书签、目录、缩略图、注释功能 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 展开左侧栏,单击选择任意缩略图 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常选择切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常选择切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 单击放大缩小下拉框,选中视图方式 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常选择切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 单击+按钮增加标签页 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击标签页切换显示 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 进入文件管理选择界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以切换显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 应用工具栏单指双击 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 再次双击 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口最大化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 恢复原来窗口大小 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 鼠标点击窗口的工具栏和左侧栏底部工具栏区域,不抬起手指,在屏幕上移动 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 可以移动窗口的位置 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 文件夹中有多份文档,单指拖拽批量文件到应用内 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: assert + description: 1. 应用中打开多个标签页 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 单指拖拽应用边角任意位置 + action: element_action + selector: + name: BrowserPage + role: panel + do: click + - step_type: assert + description: 1. 可拉伸窗口大小 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_触摸板 + name: 触摸板测试 + module: 触摸板 + status: active + annotation: + 测试界面: 主窗口-触摸板交互 + 测试功能: 触摸板手势操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 打开多份文档,单击工具栏菜单按钮 + action: session_start + command: deepin-reader + - step_type: assert + description: 1. 功能正常 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 展开左侧栏,单击选择书签、目录、缩略图、注释功能 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 展开左侧栏,单击选择任意缩略图 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常选择切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以正常选择切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 单击放大缩小下拉框,选中视图方式 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 可以正常选择切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 单击+按钮增加标签页 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 点击标签页切换显示 + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: assert + description: 1. 进入文件管理选择界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以切换显示 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 应用工具栏一指双击 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 再次双击 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 窗口最大化 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 恢复原来窗口大小 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_键盘交互 + name: 键盘交互测试 + module: 键盘交互 + status: active + annotation: + 测试界面: 主窗口-键盘交互 + 测试功能: Tab切换/快捷键操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 打开文档查看器进入首页界面,按tab键查看菜单按钮切换顺序 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 主菜单弹出后按enter或空格键和上下方向键 + action: dtk_main_menu + items: + - 保存 + - step_type: action + description: 4. 主菜单弹出后按左右方向键 + action: dtk_main_menu + items: + - 保存 + - step_type: action + description: 5. 主菜单弹出后按esc键交互操作 + action: dtk_main_menu + items: + - 保存 + - step_type: assert + description: 1. 依次选中主菜单、最小化、最大化、选择文件按钮,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 切换和执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 退出菜单,返回到主菜单按钮的选中 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开单个文档,未展开左侧栏,按tab键 + action: session_start + command: deepin-reader + - step_type: action + description: 2. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开单个文档,展开左侧栏,按tab键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开多个文档,未展开左侧栏,按tab键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开多个文档,展开左侧栏,按tab键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. tab键选中百分比输入框的下拉按钮,按enter或空格键 + action: keyboard_type + text: test_input + - step_type: action + description: 2. 按上下方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 下拉菜单界面弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 退出菜单,返回到百分比输入框的选中 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. tab键选中主菜单,按enter或空格键 + action: dtk_main_menu + items: + - 保存 + - step_type: action + description: 2. 按上下方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 按左右方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 下拉菜单界面弹出 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 退出菜单,返回到主菜单按钮的选中 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 右击主视图界面 + action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - step_type: action + description: 2. 按上下方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 按左右方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 退出菜单,返回到百分比输入框的选中 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 文档缩略图界面,按上下方向键或pageup、pagedown + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 目录界面,按上下方向键或pageup、pagedown + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 书签目录界面,按上下方向键或pageup、pagedown,delete键 + action: keyboard_press + key: Delete + - step_type: action + description: 4. 注释目录界面,按上下方向键或pageup、pagedown,delete键 + action: keyboard_press + key: Delete + - step_type: assert + description: 1. 正确切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 正确切换 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 正确切换,正常删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 正确切换,正常删除 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中文本,按Alt+M键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按上下方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 按左右方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 退出菜单,文本仍是选中状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中一个书签目录,按Alt+M键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按上下方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 按左右方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 退出菜单,书签目录仍是选中状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中一个注释目录,按Alt+M键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按上下方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 按左右方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 退出菜单,注释目录仍是选中状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 选中输入框内容,按Alt+M键 + action: keyboard_type + text: test_input + - step_type: action + description: 2. 按上下方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按enter或空格键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 按左右方向键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 5. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选择 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 5. 退出菜单,注释目录仍是选中状态 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击“删除全部书签” + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 对话框界面按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按回车键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出对话框界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以在对话框界面循环切换,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选中的按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 关闭对话框,焦点返回至选中的书签目录 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 点击“删除全部注释” + action: element_action + selector: + name: ReaderTitle + role: label + do: click + - step_type: action + description: 2. 对话框界面按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按回车键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 选中任意菜单时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出对话框界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以在对话框界面循环切换,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选中的按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 关闭对话框,焦点返回至选中的注释目录 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_键盘交互_1 + name: 键盘交互测试 + module: 键盘交互 + status: active + annotation: + 测试界面: 主窗口-键盘交互 + 测试功能: Tab切换/快捷键操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 编辑文档后关闭或退出 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 对话框界面按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按回车键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 选中任意按钮时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出是否保存对话框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以在对话框界面循环切换,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选中的按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 关闭对话框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 不改变文件名保存替换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 对话框界面按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 按回车键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 4. 选中任意按钮时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: '1.' + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 可以在对话框界面循环切换,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 执行选中的按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 4. 关闭对话框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 搜索框弹出,按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. focus每个按钮时分别按回车键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 正常切换,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选中的按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 文档信息界面弹出,按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按回车键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 选中任意按钮时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中关闭按钮,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选中的按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 退出文档信息界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 在文件管理器显示弹出,按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按回车键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 循环切换,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选中的按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 文档信息界面弹出,按tab键切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 2. 按回车键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: action + description: 3. 选中任意按钮时按esc键 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 选中关闭按钮,focus效果正确 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 执行选中的按钮 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 3. 退出关于界面 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 百分比框输入数值,按键盘enter键 + action: keyboard_type + text: test_input + - step_type: action + description: 2. 页码框输入数值,按键盘enter键 + action: keyboard_type + text: test_input + - step_type: assert + description: 1. 页面跳转,焦点仍然在百分比框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 页面跳转,焦点仍然在页码框 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: action + description: 1. 打开PDF文档,选中文本并右击 + action: session_start + command: deepin-reader + - step_type: action + description: 2. 按键盘上下键,焦点切换 + action: mouse_click + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 1. 弹出右键菜单 + action: assert_element + selector: + name: ReaderTitle + role: label + - step_type: assert + description: 2. 焦点在每个高亮菜单切换,置灰菜单直接跳过,不会出现焦点消失现象 + action: assert_element + selector: + name: ReaderTitle + role: label +- id: case_1704991 + name: 【玲珑】【文档查看器】卸载指定版本的玲珑应用 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】卸载指定版本的玲珑应用 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704989 + name: 【玲珑】【文档查看器】卸载玲珑应用 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】卸载玲珑应用 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704987 + name: 【玲珑】【文档查看器】查看玲珑应用包含的文件 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】查看玲珑应用包含的文件 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704985 + name: 【玲珑】【文档查看器】杀掉玲珑应用运行进程 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】杀掉玲珑应用运行进程 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704983 + name: 【玲珑】【文档查看器】检查玲珑应用运行情况 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】检查玲珑应用运行情况 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704981 + name: 【玲珑】【文档查看器】进入容器内部 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】进入容器内部 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704975 + name: 【玲珑】【文档查看器】玲珑应用,基本功能测试 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】玲珑应用,基本功能测试 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704971 + name: 【玲珑】【文档查看器】运行玲珑应用 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】运行玲珑应用 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704969 + name: 【玲珑】【文档查看器】安装玲珑应用指定版本 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】安装玲珑应用指定版本 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704967 + name: 【玲珑】【文档查看器】安装玲珑应用 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】安装玲珑应用 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704965 + name: 【玲珑】【文档查看器】仓库玲珑应用信息 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】仓库玲珑应用信息 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1704963 + name: 【玲珑】【文档查看器】查看玲珑应用信息 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 【玲珑】【文档查看器】查看玲珑应用信息 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1581003 + name: 打开大量窗口 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 打开大量窗口 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1580999 + name: 产生大量搜索结果无卡顿 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 产生大量搜索结果无卡顿 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1580997 + name: 批量添加注释 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 批量添加注释 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1580995 + name: 多平台测试 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 多平台测试 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1580981 + name: PDF文档中批量添加书签 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: PDF文档中批量添加书签 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1580965 + name: 撤销更改(68M文档)响应时间 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 撤销更改(68M文档)响应时间 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1580889 + name: 连续快速打开关闭单页大文档20次 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 连续快速打开关闭单页大文档20次 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1580755 + name: 切换系统语言后,检查翻译是否正确 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 切换系统语言后,检查翻译是否正确 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] +- id: case_1580491 + name: 打开PDF和DOCX大文档无异常 + status: unsupported + reason: CLI/终端命令或非GUI操作 + steps: + - step_type: action + description: 打开PDF和DOCX大文档无异常 + action: session_start + command: deepin-reader + module: 非GUI操作 + annotation: + 测试界面: 非GUI + 测试功能: 非GUI操作 + 前置条件: 无 + AT元素引用: [] diff --git a/tests/at/expected-at-spi-elements.md b/tests/at/expected-at-spi-elements.md new file mode 100644 index 00000000..19ae5aef --- /dev/null +++ b/tests/at/expected-at-spi-elements.md @@ -0,0 +1,208 @@ +# deepin-reader 预期 AT-SPI 元素清单 + +## 推导说明 + +- 命名推导基于 `getAccessibleName()` 规则(`reader/app/accessibledefine.h:22-90`) +- 前缀: `Form_` / `Button_` / `Label_` / `Editable_` / `Slider_` + `_` + accessibleName/fallback +- 同名控件自动加 `_N` 后缀 +- 瞬态元素(菜单、弹窗)标注 `[TRANSIENT]` +- 静态不可达元素标注 `[INFERENCE]` + +--- + +## 主窗口 (MainWindow) + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Form_DocMainWindow` | frame | 主窗口 | MainWindow::setAccessibleName("DocMainWindow") → Form + DocMainWindow | `MainWindow.cpp:620` | +| `Form_Central_0` | frame | 中央容器 | Central (class-based) → getAccessibleName fallback | Central.h | +| `Form_TitleWidget` | frame | 标题栏 | TitleWidget (class-based) | TitleWidget.h | +| `Form_CentralDocPage_0` | frame | 文档页堆栈 | CentralDocPage (class-based) | CentralDocPage.h | +| `Form_CentralNavPage_0` | frame | 导航页 | CentralNavPage (class-based) | CentralNavPage.h | +| `Form_ThumbnailWidget_0` | frame | 缩略图 | ThumbnailWidget (class-based) | ThumbnailWidget.h | + +### 标题栏 — TitleWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Label_ReaderTitle` | label | 窗口标题 | setAccessibleName("ReaderTitle") | `TitleWidget.cpp:22` | +| `Button_ReaderMenu` | push button | 主菜单按钮 | setAccessibleName("ReaderMenu") | `TitleWidget.cpp:22` → TitleMenu | +| `Label_Search Btn` | label | 主菜单按钮标题 | setObjectName("Search Btn") → default accessible | `TitleWidget.cpp:21` | + +### 主菜单 — TitleMenu `[TRANSIENT]` + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Button_ReaderMenu` | push button | 菜单入口 | setAccessibleName("ReaderMenu") | `TitleMenu.cpp:43` | +| 在文件管理器中显示 | menu item | 菜单项 | objectName: `QMenu` action text | TitleMenu.cpp | +| 放大镜 | menu item | 菜单项 | action text | TitleMenu.cpp | +| 工具 | menu item | 子菜单 | action text | TitleMenu.cpp | +| 主题 | menu item | 子菜单 | action text | TitleMenu.cpp | +| 帮助 | menu item | 菜单项 | action text | TitleMenu.cpp | +| 关于 | menu item | 菜单项 | action text | TitleMenu.cpp | +| 退出 | menu item | 菜单项 | action text | TitleMenu.cpp | + +### 导航页 — CentralNavPage + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Label_AddFileBtn` | label | 添加文件按钮 | setAccessibleName("AddFileBtn") | `CentralNavPage.cpp:23` | +| `Label_OpenFileBtn` | label | 打开文件按钮 | setAccessibleName("OpenFileBtn") | `CentralNavPage.cpp:37` | +| `Label_RecentView` | label | 最近文件视图 | setAccessibleName("RecentView") | `CentralNavPage.cpp:44` | +| `Label_FileItem` | label | 最近文件项 | setAccessibleName("FileItem") | `CentralNavPage.cpp:58` | + +### 标签页栏 — DocTabBar + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Form_DocTabBar_0` | frame | 标签栏 | DocTabBar (class-based, QWidget fallback) | DocTabBar.h | + +### 文档浏览器 — SheetBrowser + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Form_SheetBrowser_0` | frame | 文档浏览区域 | SheetBrowser (class-based) | SheetBrowser.h | +| `Label_BrowserPage_0` | label | 页面内容 | setAccessibleName("BrowserPage") | `SheetBrowser.cpp:90` | +| (空名) | layered pane | 滚动区域 | objectName 未设置 | `SheetBrowser.cpp:98` | +| `Button_PrevPage_0` | push button | 翻页按钮 | setAccessibleName("PrevPage") | `SheetBrowser.cpp:101` | + +### 右键菜单 — BrowserMenu `[TRANSIENT]` + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Button_BrowserMenu` | push button | 右键菜单 | setAccessibleName("BrowserMenu") | `BrowserMenu.cpp:19` | +| 复制 | menu item | 菜单项 | action text | BrowserMenu.cpp | +| 选择全部 | menu item | 菜单项 | action text | BrowserMenu.cpp | +| 添加书签 | menu item | 菜单项 | action text | BrowserMenu.cpp | +| 放大 | menu item | 菜单项 | action text | BrowserMenu.cpp | +| 缩小 | menu item | 菜单项 | action text | BrowserMenu.cpp | + +--- + +## 左侧栏 (SheetSidebar) + +### 侧栏按钮 + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Button_LeftBtn_0` | push button | 缩略图按钮 | setAccessibleName("LeftBtn") + _N | `SheetSidebar.cpp:363` | +| `Button_LeftBtn_1` | push button | 目录按钮 | setAccessibleName("LeftBtn") + _N | `SheetSidebar.cpp:363` | +| `Button_LeftBtn_2` | push button | 书签按钮 | setAccessibleName("LeftBtn") + _N | `SheetSidebar.cpp:363` | +| `Button_LeftBtn_3` | push button | 注释按钮 | setAccessibleName("LeftBtn") + _N | `SheetSidebar.cpp:363` | +| `Button_LeftBtn_4` | push button | 搜索按钮 | setAccessibleName("LeftBtn") + _N | `SheetSidebar.cpp:363` | + +### 缩略图视图 — ThumbnailWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Label_ThumbnailView` | label | 缩略图列表 | setAccessibleName("ThumbnailView") | `ThumbnailWidget.cpp:38` | +| `Label_SidebarListView` | label | 列表视图 | setAccessibleName("SidebarListView") | `ThumbnailWidget.cpp:43` | +| `Label_PageLabel` | label | 页码标签 | setAccessibleName("PageLabel") | `ThumbnailWidget.cpp:50` | + +### 目录视图 — CatalogWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Label_CatalogTree` | label | 目录树 | setAccessibleName("CatalogTree") | `CatalogWidget.cpp:40` | +| `Label_SidebarListView` | label | 列表视图 | setAccessibleName("SidebarListView") | `CatalogWidget.cpp:55` | + +### 书签视图 — BookMarkWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Label_BookMarkTree` | label | 书签列表 | setAccessibleName("BookMarkTree") | `BookMarkWidget.cpp:45` | +| `Label_BookMarkEdit` | label | 书签编辑 | setAccessibleName("BookMarkEdit") | `BookMarkWidget.cpp:52` | +| `Label_NoBookMark` | label | 无书签提示 | setAccessibleName("NoBookMark") | `BookMarkWidget.cpp:68` | + +### 注释视图 — NotesWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Label_NotesView` | label | 注释列表 | setAccessibleName("NotesView") | `NotesWidget.cpp:46` | +| `Label_NotesEdit_0`[INFERENCE] | label | 注释编辑 | setAccessibleName("NotesEdit") | `NotesWidget.cpp:55` | +| `Label_NoNotes` | label | 无注释提示 | setAccessibleName("NoNotes") | `NotesWidget.cpp:66` | + +### 搜索结果视图 — SearchResWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Label_SearchResult` | label | 搜索结果列表 | setAccessibleName("SearchResult") | `SearchResWidget.cpp:43` | + +--- + +## 通用控件 (Widgets) + +### 查找面板 — FindWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Editable_FindInput` | entry | 查找输入框 | setAccessibleName("FindInput") | `FindWidget.cpp:120` | +| `Editable_FindText`[INFERENCE] | entry | 查找内容 | setObjectName("FindText") | `FindWidget.cpp:119,121` | +| 查找上一个 | push button | 按钮 | objectName + text | `FindWidget.cpp:129` | +| 查找下一个 | push button | 按钮 | objectName + text | `FindWidget.cpp:136` | +| 关闭 | push button | 按钮 | objectName + text | `FindWidget.cpp:143` | + +### 页码控件 — PagingWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Label_PageCount` | label | 页码状态 | setAccessibleName("PageCount") | `PagingWidget.cpp:74` | +| `Label_CurrentPage_0`[INFERENCE] | label | 当前页 | setAccessibleName("CurrentPage") | `PagingWidget.cpp:81` | +| `Slider_ReaderSlider` | slider | 页面滑块 | setAccessibleName("ReaderSlider") | `PagingWidget.cpp:84` | +| `Button_ReaderSliderZoomIn` | push button | 放大按钮 | setAccessibleName("ReaderSliderZoomIn") | `PagingWidget.cpp:100` | +| `Button_ReaderSliderZoomOut` | push button | 缩小按钮 | setAccessibleName("ReaderSliderZoomOut") | `PagingWidget.cpp:107` | +| `Label_SearchButton` | label | 搜索按钮 | setAccessibleName("SearchButton") | `PagingWidget.cpp:112` | + +### 缩放控件 — ScaleWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Button_ZoomIn`[INFERENCE] | push button | 放大 | objectName("ZoomIn") | `ScaleWidget.cpp:42` | +| (空名) | push button | 缩放比例 | objectName("ScaleComboBox") | `ScaleWidget.cpp:43` | +| `Button_ZoomOut`[INFERENCE] | push button | 缩小 | objectName("ZoomOut") | `ScaleWidget.cpp:52` | +| `Button_ScaleMenu`[INFERENCE] | push button | 缩放菜单 | objectName("ScaleMenu") | `ScaleWidget.cpp:72` | + +### 幻灯片控制 — SlidePlayWidget + +| 预期 AT-SPI 名称 | Role | 类型 | 推导链 | 源码位置 | +|-------------------|------|------|--------|----------| +| `Button_SlidePre_0` | push button | 上一页 | setAccessibleName("SlidePre") | `SlidePlayWidget.cpp:160` | +| `Button_SlideNext_0` | push button | 下一页 | setAccessibleName("SlideNext") | `SlidePlayWidget.cpp:160` | +| `Button_SlidePlay_0` | push button | 播放/暂停 | setAccessibleName("SlidePlay") | `SlidePlayWidget.cpp:160` | +| `Button_SlideClose_0` | push button | 关闭 | setAccessibleName("SlideClose") | `SlidePlayWidget.cpp:160` | + +--- + +## DTK 基础控件注册表 + +通过 `accessibleFactory` 统一注册的 DTK/Qt 基础控件类型(通过 `USE_ACCESSIBLE` 宏创建 AT-SPI 接口): + +| 类 | Role | 说明 | +|----|------|------| +| QFrame | frame | Qt 框架容器 | +| QWidget | panel | 通用容器 | +| QPushButton | push button | Qt 按钮 | +| QSlider | slider | Qt 滑块 | +| DFrame | frame | DTK 框架容器 | +| DWidget | panel | DTK 通用容器 | +| DBackgroundGroup | panel | DTK 背景分组 | +| DSwitchButton | toggle button | DTK 开关按钮 | +| DFloatingButton | push button | DTK 浮动按钮 | +| DSearchEdit | entry | DTK 搜索框 | +| DPushButton | push button | DTK 按钮 | +| DIconButton | push button | DTK 图标按钮 | +| DCheckBox | check box | DTK 复选框 | +| DCommandLinkButton | push button | DTK 命令链接按钮 | +| DTitlebar | panel | DTK 标题栏 | +| DDialog | dialog | DTK 对话框 | +| DFileDialog | dialog | DTK 文件对话框 | + +--- + +## 预期 vs 运行时对照说明 + +此预期元素清单基于源码静态推导得出。运行时 AT-SPI 树可能因以下因素差异: +- 瞬态元素(菜单、对话框)仅在触发后出现在树中 +- 同名控件的 `_N` 编号取决于创建顺序 +- QGraphicsItem 子类(BrowserPage, BrowserAnnotation, BrowserWord)无独立的 AT-SPI 接口 +- QLabel 等静态文本控件若未设置 accessibleName,fallback 为翻译文本(不可靠的 AT 锚点) \ No newline at end of file diff --git a/tests/at/suite-cases.yaml b/tests/at/suite-cases.yaml new file mode 100644 index 00000000..3d6b74b8 --- /dev/null +++ b/tests/at/suite-cases.yaml @@ -0,0 +1,3846 @@ +metadata: + generated_at: '2024-01-01T00:00:00' + source: 文档查看器V25-用例.xlsx + total_raw_cases: 313 + non_gui: 21 + gui_suites: 27 +cases: +- id: suite_主菜单 + name: 主菜单测试 + module: 主菜单 + status: active + annotation: + 测试界面: 主窗口-标题栏主菜单 + 测试功能: 主菜单各功能项(保存/放大镜/工具/主题/帮助/关于/退出) + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 打开文档,添加书签或注释 + - step_type: assert + description: 2. 点击主菜单查看 + - step_type: assert + description: 3. 打开文档,添加书签或注释,按键盘中Ctrl+S键,关闭再打开文档查看是否可以保存 + - step_type: assert + description: 4. 关闭再打开文档查看是否可以保存 + - step_type: assert + description: 1. 添加成功 + - step_type: assert + description: 2. 保存菜单高亮显示 + - step_type: assert + description: 3. 保存成功 + - step_type: assert + description: 4. 书签和注释可以被保存 + - step_type: action + description: 1. 添加或删除书签、高亮、注释,点击右上角关闭按钮 + - step_type: action + description: 2. 点击弹框中的“不保存” + - step_type: action + description: 3. 点击弹框中的“保存” + - step_type: assert + description: 1. 弹出是否保存的弹框,点击取消,停留在当前页面 + - step_type: assert + description: 2. 应用关闭,编辑的内容不会被保存 + - step_type: assert + description: 3. 应用关闭,编辑的内容都会被保存 + - step_type: action + description: 1. 打开文档,分别点击最小化. 最大化. 关闭菜单 + - step_type: assert + description: 1. 当前页面正常最小化. 最大化. 关闭退出 + - step_type: assert + description: 1. 打开一份文档,不作任何修改,点击菜单中退出,查看 + - step_type: assert + description: 2. 修改文档中内容,点击菜单中的退出,弹出弹框提示是否同意保存,分别点击取消、不保存、保存 + - step_type: assert + description: 3. 打开一份文档,不作任何修改,按快捷键Alt+F4或Alt+空格并选择关闭,查看 + - step_type: assert + description: 4. 修改文档中内容,按快捷键Alt+F4或Alt+空格并选择关闭,弹出弹框提示是否同意保存,分别点击取消、不保存、保存 + - step_type: assert + description: 1. 直接退出,无提示 + - step_type: assert + description: 2. 可以正常取消退出、保存并关闭、不保存并关闭 + - step_type: assert + description: 3. 直接退出,无提示 + - step_type: assert + description: 4. 可以正常取消退出、保存并关闭、不保存并关闭 + - step_type: action + description: 1. 点击工具栏中的菜单键,再点击关于 + - step_type: assert + description: 1. 进入关于页面,界面显示正确,最后一行为:“文档查看器是一款支持PDF,DJVU,DOCX等多种格式的文档阅读工具。” + - step_type: assert + description: 1. 打开软件,使用快捷键F1,查看系统显示 + - step_type: assert + description: 2. 点击工具栏中的菜单键,再点击帮助,查看系统显示 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 1&2. 进入帮助页面,界面显示正确 + - step_type: action + description: 1. 点击工具栏中的菜单键,鼠标放置在主题菜单上 + - step_type: assert + description: 1. 弹出三个主题菜单:浅色、深色、跟随主题,点击后应用相应主题 + - step_type: action + description: 1. 点击工具栏中的菜单键,再点击在文件管理器中显示菜单 + - step_type: assert + description: 1. 进入当前文档所在的文件夹,并显示文档查看器中当前浏览的文档 + - step_type: action + description: 1. 打开文档,添加高亮、书签或注释,点击工具栏中的菜单键,再点击另存为 + - step_type: assert + description: 2. 点击打开新文档,查看高亮、书签、注释等内容是否均被保存 + - step_type: assert + description: 3. 关闭旧文档,弹出是否保存的提示框,分别点击保存和不保存按钮 + - step_type: assert + description: 1. 弹出系统文件弹框,弹出文档选择器,输入名字可将文件保存为新的文件 + - step_type: assert + description: 2. 文档中编辑内容都被保存 + - step_type: assert + description: 3. 点击不保存,编辑内容不会被保存;点击保存,编辑内容会被保存 + - step_type: action + description: 1. 点击工具栏中的菜单键,再点击新标签页 + - step_type: assert + description: 1. 可以打开一个新标签页 + - step_type: assert + description: 1. 打开一个文档查看器窗口进入初始界面,点击菜单中的“新窗口”菜单查看是否添加新窗口 + - step_type: assert + description: 2. 打开一份文档,点击菜单中的“新窗口”菜单查看是否添加新窗口 + - step_type: assert + description: 3. 新窗口中未添加文档时查看各菜单显示并点击 + - step_type: assert + description: 4. 新窗口中添加文档后查看各菜单显示并点击 + - step_type: assert + description: 1. 正常添加新窗口 + - step_type: assert + description: 2. 正常添加新窗口,前一个打开的文档仍保留开启状态 + - step_type: assert + description: 3. 工具栏左侧按钮均置灰显示点击无作用;右侧菜单中新窗口、新标签页、主题、帮助、关于、退出菜单高亮显示点击后功能正常,其他菜单置灰显示点击无作用 + - step_type: assert + description: 4. 工具栏、左边栏菜单均可点击,功能正常,文档中高亮和图标方式添加注释功能正常 + - step_type: action + description: 1. 使用放大镜功能时,按键盘上的ESC键 + - step_type: action + description: 2. 使用放大镜功能时,点击鼠标右键 + - step_type: assert + description: 1. 可以取消放大镜功能 + - step_type: assert + description: 2. 可以取消放大镜功能 + - step_type: assert + description: 1. 点击菜单中放大镜菜单查看是否可以使用放大镜 + - step_type: assert + description: 2. 鼠标移动到页面中相应区域(包括文字和图片),查看有无放大作用 + - step_type: assert + description: 3. 查看放大镜是否可以移动到左边栏或标题、标签栏位置 + - step_type: assert + description: 1. 可以使用放大镜 + - step_type: assert + description: 2. 该区域内容(包括文字和图片)放大 + - step_type: assert + description: 3. 无法移动至左边栏或标题、标签栏位置 + - step_type: assert + description: 1. 编辑文档,点击保存或按Ctrl+S,查看 + - step_type: assert + description: 2. 不关闭文档,再次编辑文档,点击保存或按Ctrl+S,查看 + - step_type: assert + description: 1. 正常保存 + - step_type: assert + description: 2. 正常保存 + - step_type: action + description: 1. 添加高亮/注释/书签,点击另存为 + - step_type: action + description: 2. 不改变名称,点击“保存”按钮 + - step_type: action + description: 3. 点击“替换”按钮 + - step_type: assert + description: 4. 点击文档查看器应用关闭按钮 + - step_type: action + description: 5. 再次打开替换后的文档 + - step_type: assert + description: 1. 弹出保存文档界面 + - step_type: assert + description: 2. 弹出是否替换文档弹框 + - step_type: assert + description: 3. 新编辑的文档正常替换原文档 + - step_type: assert + description: 4. 直接关闭应用 + - step_type: assert + description: 5. 界面显示正常,添加的高亮/注释/书签保存正常 +- id: suite_主菜单_1 + name: 主菜单测试 + module: 主菜单 + status: active + annotation: + 测试界面: 主窗口-标题栏主菜单 + 测试功能: 主菜单各功能项(保存/放大镜/工具/主题/帮助/关于/退出) + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 打开终端,输入 apt show deepin-reader,查看debian/control文件description字段,长、短描述 + - step_type: assert + description: 1. 描述与文案相符 + - step_type: action + description: 1. 打开已添加过书签、高亮、注释的文档,不编辑,点击工具栏中的菜单键,再点击另存为 + - step_type: assert + description: 2. 点击打开新文档,查看内容显示是否正常,原有的书签、高亮、注释是否改变 + - step_type: action + description: 3. 关闭旧文档 + - step_type: assert + description: 1. 弹出系统文件弹框,弹出文档选择器,输入名字可将文件保存为新的文件 + - step_type: assert + description: 2. 内容显示是否正常,原有的书签、高亮、注释无改变 + - step_type: assert + description: 3. 旧文档被直接关闭,不会弹出是否保存的提示框 + - step_type: assert + description: 1. 检查如下路径下 /usr/share/deepin-manual/manual-assets/application下是否存在deepin-reader文件夹 + - step_type: assert + description: 2. 打开deepin-reader文件夹进入document-viewer/zh_CN ,查看document-viewer.md中内容显示 + - step_type: assert + description: 3. 帮助手册更新到最新版本,查看应用图标显示是否正确 + - step_type: assert + description: 4. 打开文档查看器,点击帮助菜单,查看文案是否正确 + - step_type: assert + description: 1. 存在deepin-reader文件夹 + - step_type: assert + description: 2. 首行显示为:# 文档查看器 | deepin-reader + - step_type: assert + description: 3. 显示正确 + - step_type: assert + description: 4. 文案正确 + - step_type: action + description: 1. 打开窗口A和窗口B-> 在窗口A中打开关于窗口,并关闭窗口A + - step_type: assert + description: 2. 窗口B中点击“关于”菜单,查看 + - step_type: assert + description: 1. 窗口A关闭 + - step_type: assert + description: 2. 正常查看 + - step_type: assert + description: 1. 打开放大镜后缓慢移动查看 + - step_type: assert + description: 2. 在高分屏中切换分辨率后移动放大镜查看 + - step_type: assert + description: 1. 界面显示正常,无抖动现象 + - step_type: assert + description: 2. 界面显示正常,无抖动现象 + - step_type: action + description: 1. 打开文档,点击主菜单再点击“打印”菜单 + - step_type: action + description: 2. 打印预览界面默认选择“存为PDF”,页码范围是“全部”,点击保存菜单,进入选择路径界面,选择后保存 + - step_type: action + description: 3. 打印预览界面默认选择“存为PDF”,页码范围选择“当前页”,点击保存菜单,进入选择路径界面,选择后保存 + - step_type: action + description: 4. 打印预览界面默认选择“存为PDF”,页码范围选择“指定页面”,点击保存菜单,进入选择路径界面,选择后保存 + - step_type: assert + description: 1. 弹出打印预览界面 + - step_type: assert + description: 2. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,显示正确 + - step_type: assert + description: 3. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示当前的1页 + - step_type: assert + description: 4. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示指定的页面 + - step_type: action + description: 1. 打开文档,点击主菜单再点击“打印”菜单 + - step_type: action + description: 2. 打印预览界面默认选择“另存为图片”,页码范围是“全部”,点击保存菜单,进入选择路径界面,选择后保存 + - step_type: action + description: 3. 打印预览界面默认选择“另存为图片”,页码范围选择“当前页”,点击保存菜单,进入选择路径界面,选择后保存 + - step_type: action + description: 4. 打印预览界面默认选择“另存为图片”,页码范围选择“指定页面”,点击保存菜单,进入选择路径界面,选择后保存 + - step_type: assert + description: 1. 弹出打印预览界面 + - step_type: assert + description: 2. 打印预览界面关闭,进入文件保存的路径,打开另存的图片文件夹,显示全部页面图片 + - step_type: assert + description: 3. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示当前的1页图片 + - step_type: assert + description: 4. 打印预览界面关闭,进入文件保存的路径,打开打印后的文档,仅显示指定的页面图片 + - step_type: assert + description: 1. 打开文档查看器 + - step_type: action + description: 2. 点击主菜单弹出菜单列表,点击“新窗口”菜单 + - step_type: action + description: 3. 重复步骤2 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 弹出一个新窗口 + - step_type: assert + description: 3. 继续弹出新窗口,窗口数量限制在20个以内,窗口不会重叠在一起 +- id: suite_书签 + name: 书签测试 + module: 书签 + status: active + annotation: + 测试界面: 左侧栏-书签视图 + 测试功能: 书签添加/删除/编辑/跳转 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 从FTP服务器中拖拽PDF、DOCX格式文档至UOS系统中,使用文档查看器打开此文档 + - step_type: assert + description: 2. 从U盘中拖拽PDF、DOCX格式文档至UOS系统中,使用文档查看器打开此文档 + - step_type: assert + description: 3. 从网页端下载PDF、DOCX格式文档,使用文档查看器打开此文档 + - step_type: assert + description: 1. 可以正常打开 + - step_type: assert + description: 2. 可以正常打开 + - step_type: assert + description: 3. 可以正常打开 + - step_type: assert + description: 1. 选中一个书签缩略图,鼠标不点击移动至左边栏以外区域,按快捷键delete,查看是否正常删除 + - step_type: assert + description: 1. 可以正常删除 + - step_type: assert + description: 1. 点击右侧已出现的的书签标志 + - step_type: assert + description: 2. 鼠标放在缩略图_书签上面,点击鼠标右键,出现右键菜单:删除书签,点击此菜单 + - step_type: action + description: 3. 鼠标选中该缩略图_书签,直接按键盘上Delete键 + - step_type: assert + description: 1. 点击右侧已出现的的书签图标,则删除该页书签,书签图标变成空心实线图标且无填充色; + - step_type: assert + description: 说明:鼠标移到书签位置附近才会显示虚线的书签图标,鼠标移出书签区域,虚线书签图标消失;再次点击此图标则可以添加书签 + - step_type: assert + description: 2. 可以删除该页书签,书签缩略图消失,该页右上角书签图标变成空心实线图标且无填充色 + - step_type: assert + description: 3. 可以删除该页书签,书签缩略图消失,该页右上角书签图标变成空心实线图标且无填充色 + - step_type: assert + description: 1. 点击左边栏任意一条缩略图_书签,查看是否跳转到相应页面 + - step_type: assert + description: 2. 查看右侧文档添加的书签是否与缩略图_书签同步展示 + - step_type: assert + description: 1. 跳转至相应页面 + - step_type: assert + description: 2. 同步展示 + - step_type: assert + description: 1. 选中文本,点击右键菜单中的“添加书签”菜单,查看 + - step_type: assert + description: 2. 未选中文本,点击右键菜单中的“添加书签”菜单,查看 + - step_type: assert + description: 1. 文本所在页面添加为书签,文档右上角显示蓝色填充色的书签图标,右键菜单中“添加书签”菜单变为“删除书签” + - step_type: assert + description: 2. 文本所在页面添加为书签,文档右上角显示蓝色填充色的书签图标,右键菜单中“添加书签”菜单变为“删除书签” + - step_type: assert + description: 1. 进入缩略图_书签页面,查看未添加任何书签时检查界面显示 + - step_type: action + description: 2. 点击书签图标上方的添加书签按钮 + - step_type: assert + description: 3. 查看加入书签后的页面显示 + - step_type: assert + description: 1. 界面显示正确 + - step_type: assert + description: 2. 当前浏览的页面可以加入书签 + - step_type: assert + description: 3. 左边栏列出加入书签的页面:以页面缩略图和页面数(如页面20)形式显示;按照页面顺序展示 + - step_type: assert + description: 1. 打开损坏的文档,查看 + - step_type: assert + description: 1. 弹出提示:请检查文件是否损坏;提示语前面的应该是红色禁止图标 + - step_type: action + description: 1. 当前已打开文档并浏览,关闭应用后再打开 + - step_type: assert + description: 1. 进入初始界面,默认要选择文件或拖拽文件进行浏览; + - step_type: assert + description: 1. 分别打开以下支持的文档格式,查看能否正常打开查看: + - step_type: action + description: PDF(扫描件和非扫描件格式), DJVU, DOCX格式文档 + - step_type: assert + description: 1. 支持的格式文档均可以正常打开浏览 + - step_type: action + description: 1. 拖拽一个文档至初始页面 + - step_type: action + description: 2. 在文件夹中双击一个文档 + - step_type: assert + description: 3. 在文件夹中右击一个文档,选择打开方式为:文档查看器 + - step_type: action + description: 4. 点击选择文件进行选择:进入文件选择页面,选择一个文档,点击打开 + - step_type: assert + description: 5. 文件选择页面点击取消,或者点击ESC键,查看是否退出选择弹框 + - step_type: action + description: 6. 初始界面按Ctrl+O键 + - step_type: action + description: 7. 已打开文档后,点击标签栏右侧的+按钮 + - step_type: assert + description: 1. 可以打开文档,正常进行浏览 + - step_type: assert + description: 2. 默认使用文档查看器打开文档浏览 + - step_type: assert + description: 3. 可以打开文档,正常进行浏览 + - step_type: assert + description: 4. 可以打开文档,正常进行浏览 + - step_type: assert + description: 5. 会退出选择弹框 + - step_type: assert + description: 6. 进入文件选择页面,可以选择文件 + - step_type: assert + description: 7. 进入文件选择页面,可以选择文件添加 + - step_type: assert + description: 1. 已添加PDF/DOCX文档,查看顶部工具栏的显示 + - step_type: assert + description: 2. 点击菜单键,查看包含的菜单项 + - step_type: assert + description: 3. 查看文档区域显示 + - step_type: assert + description: 4. 展开左边栏,查看底部图标 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 包含的菜单有:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、工具、搜索、打印、主题、帮助、关于、退出 + - step_type: assert + description: 3. 左边栏缩略图默认收起,右侧文档首次打开默认显示第一页 + - step_type: assert + description: 4. 显示缩略图图标、目录图标、书签图标、注释图标,显示无异常 + - step_type: action + description: 1. 未添加文档界面,点击工具栏左侧图标 + - step_type: action + description: 2. 未添加文档界面,点击菜单图标 + - step_type: action + description: 3. 未添加文档界面,分别点击最小化、还原、关闭图标 + - step_type: assert + description: 1. 缩略图图标、百分比输入框图标均置灰显示,点击无作用 + - step_type: assert + description: 2. 弹出菜单弹框,显示菜单:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、选择工具、搜索、打印、主题、帮助、关于、退出。其中仅新窗口、新标签页、主题、帮助、关于、退出菜单高亮显示可以点击进入,其余菜单置灰显示 + - step_type: assert + description: 3. 最小化、还原、关闭功能正常 + - step_type: assert + description: 1. 查看应用的图标和名称是否正确 + - step_type: assert + description: 2. 打开应用,未添加文档界面,查看左上角logo显示是否正确 + - step_type: assert + description: 3. 打开应用,未添加文档界面,查看文档区域显示 + - step_type: assert + description: 1. 应用的图标和名称显示正确 + - step_type: assert + description: 2. 显示正确 + - step_type: assert + description: 3. 显示:“拖拽文件到此 支持格式:PDF,DJVU,DOCX””提示语和“选择文件”按钮 + - step_type: assert + description: 1. 打开PDF文档,点击百分比输入框,查看弹出框中的菜单显示 + - step_type: assert + description: 2. 在右侧文档区域,未选中文本直接点击鼠标右键,查看右键菜单显示 + - step_type: assert + description: 1. 依次显示菜单:双页显示、默认大小、适合页面、适应高度、适应宽度;10%、25%、50%、75%、100%、125%、150%、175%、200%、300%、400%、500% + - step_type: assert + description: 2. 依次显示菜单:搜索,添加书签,添加注释,全屏,幻灯片放映,第一页,前一页,后一页,最后一页;左旋转,右旋转,打印,文档信息;不可操作时,菜单置灰显示 + - step_type: assert + description: 1. 打开文档,右击任意一个书签目录,查看菜单显示 + - step_type: assert + description: 2. 点击“删除所有书签”菜单,查看弹出的提示 + - step_type: action + description: 3. 点击提示框中的取消 + - step_type: action + description: 4. 点击提示框中的确定 + - step_type: action + description: 5. 弹框弹出时,点击应用中其他菜单 + - step_type: assert + description: 1. 显示“删除书签”和“删除所有书签”菜单 + - step_type: assert + description: 2. 弹出提示:您确定要删除所有书签吗? + - step_type: assert + description: 3. 弹框关闭,所有书签均不会被被删除 + - step_type: assert + description: 4. 弹框关闭,所有书签被删除 + - step_type: assert + description: 5. 其他菜单均无法被点击 +- id: suite_书签_1 + name: 书签测试 + module: 书签 + status: active + annotation: + 测试界面: 左侧栏-书签视图 + 测试功能: 书签添加/删除/编辑/跳转 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 添加书签 + - step_type: action + description: 2. 右击蓝色书签图标,点击右键菜单中删除书签菜单 + - step_type: assert + description: 1. 右上角正常显示蓝色书签图标 + - step_type: assert + description: 2. 可以正常删除,鼠标移走后文档右上角不显示任何书签图标 + - step_type: action + description: 1. 添加多个书签 + - step_type: action + description: 2. 选择一个书签缩略图,按键盘上下/pageup/pagedown + - step_type: action + description: 3. 双页显示时,添加多个书签 + - step_type: action + description: 4. 选择一个书签缩略图,按键盘上下/pageup/pagedown + - step_type: assert + description: 1. 展开左边栏,显示多个书签缩略图 + - step_type: assert + description: 2. 正确切换,右侧文档跟随变化 + - step_type: assert + description: 3. 展开左边栏,显示多个书签缩略图 + - step_type: assert + description: 4. 正确切换,右侧文档跟随变化 +- id: suite_其他交互 + name: 其他交互测试 + module: 其他交互 + status: active + annotation: + 测试界面: 主窗口-其他交互 + 测试功能: 放大镜/全屏/滚动等交互 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 双页显示时,调整到最小百分比,使用放大镜查看显示是否正常 + - step_type: assert + description: 2. 双页显示时,调整到最大百分比,使用放大镜查看显示是否正常 + - step_type: assert + description: 3. 打开单页超大文档(75M以上),并调整百分比至最大,使用放大镜查看显示是否正常 + - step_type: assert + description: 1. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 + - step_type: assert + description: 2. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 + - step_type: assert + description: 3. 放大镜放置区域内容(包括文字、图片、高亮文本、注释小图标、书签图标)均被正常放大,界面显示正常 + - step_type: assert + description: 1. 按Ctrl+Shift+? --显示快捷键预览,查看所有快捷键使用是否正常: + - step_type: action + description: F1 --进入帮助界面 + - step_type: action + description: Ctrl+O --进入文件管理选择界面 + - step_type: action + description: Ctrl+shift+S --另存为 + - step_type: action + description: Ctrl+S --保存 + - step_type: action + description: Ctrl+P --打印 + - step_type: action + description: Ctrl+M --打开目录缩略图 + - step_type: action + description: Ctrl+1 --默认大小 + - step_type: action + description: Ctrl+2 --适应高度 + - step_type: action + description: Ctrl+3 --适应宽度 + - step_type: action + description: Ctrl+R --左旋转 + - step_type: action + description: Ctrl+Shift+R --右旋转 + - step_type: action + description: Ctrl++ --页面放大 + - step_type: action + description: Ctrl+- --页面缩小 + - step_type: action + description: PageUp --上一页 + - step_type: action + description: PageDown --下一页 + - step_type: action + description: Up -- 上一行 + - step_type: action + description: Down -- 下一行 + - step_type: action + description: Esc --退出 + - step_type: action + description: Alt+1 --选择工具 + - step_type: action + description: Alt+2 --手形工具 + - step_type: action + description: Ctrl+D --添加书签 + - step_type: action + description: Alt+A --添加注释 + - step_type: action + description: Alt+H --添加高亮 + - step_type: action + description: Delete --删除 (备注:删除书签或注释目录) + - step_type: action + description: Alt+Z --放大镜 + - step_type: action + description: Ctrl+F --搜索 + - step_type: action + description: F5 --幻灯片放映 + - step_type: action + description: F11 --全屏 + - step_type: action + description: (备注:以下针对注释小窗口中内容进行操作) + - step_type: action + description: Ctrl+C --复制 + - step_type: action + description: Ctrl+X --剪切 + - step_type: action + description: Ctrl+V --粘贴 + - step_type: action + description: Delete --删除 + - step_type: action + description: Ctrl+S --保存 + - step_type: action + description: Ctrl+Z --撤销 + - step_type: action + description: Ctrl+A --全选 + - step_type: assert + description: 2. 打开DJVU格式文档,按Ctrl+Shift+? --显示快捷键预览,查看所有快捷键使用是否正常: + - step_type: action + description: 除 Alt+A --添加注释,Alt+H --添加高亮, Ctrl+F --搜索 三个快捷键不支持,其余快捷键同步骤1) + - step_type: assert + description: 1. 快捷键使用均正常 + - step_type: assert + description: 2. 快捷键使用均正常 + - step_type: assert + description: 1. 打开文档,按Ctrl+1,点击百分比下拉框查看 + - step_type: assert + description: 1. 默认大小和100%选项都会自动勾选 + - step_type: action + description: 1. 打开PDF文档,未选中文本,分别按Alt+A和Alt+H + - step_type: action + description: 2. 打开DJVU文档,分别按Alt+A和Alt+H + - step_type: assert + description: 1. 弹出提示:请选择文本 + - step_type: assert + description: 2. 无提示弹出 + - step_type: assert + description: 1. 当前页非首页,同时按快捷键Ctrl+Home(笔记本Ctrl+左键),查看右侧详情页 + - step_type: action + description: 2. 点击缩略图按钮,进入缩略图页 + - step_type: action + description: 3. 点击缩略图-书签按钮,进入书签页 + - step_type: action + description: 4. 点击缩略图-注释按钮,进入注释页 + - step_type: assert + description: 1. 右侧详情页定位到首页 + - step_type: assert + description: 2. 缩略图-缩略图页 高亮定位到文件的首页 + - step_type: assert + description: 3. 缩略图-书签页 跟随高亮定位到文件的首页 + - step_type: assert + description: 4. 缩略图-注释 没有高亮定位到任何页 + - step_type: assert + description: 1. 当前页非尾页,同时按快捷键Ctrl+End(笔记本Ctrl+右键),查看右侧详情页 + - step_type: action + description: 2. 点击缩略图按钮,进入缩略图页 + - step_type: action + description: 3. 点击缩略图-书签按钮,进入书签页 + - step_type: action + description: 4. 点击缩略图-注释按钮,进入注释页 + - step_type: assert + description: 1. 右侧详情页定位到末尾 + - step_type: assert + description: 2. 缩略图-缩略图页 高亮定位到文件的末尾 + - step_type: assert + description: 3. 缩略图-书签页 跟随高亮定位到文件的末尾 + - step_type: assert + description: 4. 缩略图-注释 没有高亮定位到任何页 + - step_type: assert + description: 1. 当前页非首页,同时按快捷键Ctrl+Home,查看右侧详情页 + - step_type: action + description: 2. 点击缩略图按钮,进入缩略图页 + - step_type: action + description: 3. 点击缩略图-书签按钮,进入书签页 + - step_type: action + description: 4. 点击缩略图-注释按钮,进入注释页 + - step_type: assert + description: 1. 右侧详情页定位到首页 + - step_type: assert + description: 2. 缩略图-缩略图页 高亮定位到文件的首页 + - step_type: assert + description: 3. 缩略图-书签页 没有高亮定位到任何页 + - step_type: assert + description: 4. 缩略图-注释 没有高亮定位到任何页 + - step_type: assert + description: 1. 启动【文档查看器】检查以下控件: + - step_type: action + description: ①标题栏侧边栏按钮 + - step_type: action + description: ②查找界面的向上及向下查找 + - step_type: action + description: ③侧边栏界面的翻页按钮 + - step_type: action + description: ④侧边栏宽度 + - step_type: action + description: ⑤侧边栏tab按钮大小 + - step_type: action + description: ⑥添加书签、添加注释按钮高度 + - step_type: action + description: ⑦页码背景高度 + - step_type: action + description: ⑧退出全屏图标大小适配 + - step_type: action + description: 2. 进行涉及紧凑模式调整的控件点击和跳转 + - step_type: assert + description: 3. 切换应用主题后,查看步骤一控件 + - step_type: assert + description: 1. 控件呈现紧凑模式 + - step_type: assert + description: 2. 调整后的控件点击响应正常,页面切换流畅 + - step_type: assert + description: 3. 主题切换后,紧凑模式控件显示正常 +- id: suite_右键菜单 + name: 右键菜单测试 + module: 右键菜单 + status: active + annotation: + 测试界面: 主窗口-文档区域右键菜单 + 测试功能: 右键菜单各功能项(复制/全选/书签/缩放) + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击第一页 + - step_type: action + description: 2. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击前一页 + - step_type: assert + description: 3. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击后一页,查看 + - step_type: assert + description: 4. 上下页面均有一部分显示在当前窗口时,右击鼠标,点击最后一页,查看 + - step_type: assert + description: 1. 页面跳转正确 + - step_type: assert + description: 2. 页面跳转正确 + - step_type: assert + description: 3. 页面跳转正确 + - step_type: assert + description: 4. 页面跳转正确 + - step_type: assert + description: 1. 未选中文本,点击鼠标右键,查看右键菜单显示 + - step_type: assert + description: 2. 点击搜索菜单,查看 + - step_type: assert + description: 3. 点击添加书签,查看 + - step_type: assert + description: 4. 点击添加注释,查看 + - step_type: assert + description: 5. 点击全屏,查看 + - step_type: assert + description: 6. 点击幻灯片放映,查看 + - step_type: assert + description: 7. 点击第一页,查看 + - step_type: assert + description: 8. 点击前一页,查看 + - step_type: assert + description: 9. 点击后一页,查看 + - step_type: assert + description: 10. 点击最后一页,查看 + - step_type: assert + description: 11. 点击左旋转,查看 + - step_type: assert + description: 12. 点击右旋转,查看 + - step_type: assert + description: 13. 点击打印,查看 + - step_type: assert + description: 14. 点击文档信息,查看 + - step_type: assert + description: 1. 显示:搜索、添加书签、添加注释、全屏、幻灯片放映、第一页、前一页、后一页、最后一页、左旋转、右旋转、打印、文档信息 + - step_type: assert + description: 2. 弹出搜索弹框,可以正常进行搜索 + - step_type: assert + description: 3. 当前页面正常添加后书签,右上角显示书签图标,左边栏显示书签缩略图 + - step_type: assert + description: 4. 弹出注释小窗口,可以正常添加注释,左边栏和右侧文档中注释显示正确 + - step_type: assert + description: 5. 进入全屏显示 + - step_type: assert + description: 6. 正常播放幻灯片 + - step_type: assert + description: 7. 跳转至第一页,如当前文档已在第一页,则“第一页”菜单置灰显示 + - step_type: assert + description: 8. 跳转至前一页,如当前文档已在第一页,则“前一页”菜单置灰显示 + - step_type: assert + description: 9. 跳转至后一页,如当前文档已在最后一页,则“后一页”菜单置灰显示 + - step_type: assert + description: 10. 跳转至最后一页,如当前文档已在最后一页,则“最后一页”菜单置灰显示 + - step_type: assert + description: 11. 文档正常左旋转,界面显示正常 + - step_type: assert + description: 12. 文档正常右旋转,界面显示正常 + - step_type: assert + description: 13. 跳转到打印预览界面 + - step_type: assert + description: 14. 显示文档信息界面,界面显示无异常 + - step_type: action + description: 1. 选中已添加高亮注释的文本,右击弹出右键菜单,点击复制菜单 + - step_type: assert + description: 2. 分别点击高亮、8种高亮图标、取消高亮、添加注释、添加书签,查看 + - step_type: action + description: 3. 选中已添加高亮的文本(未加注释),右击弹出右键菜单,点击复制菜单 + - step_type: assert + description: 4. 分别点击高亮、8种高亮图标、取消高亮、添加注释、添加书签,查看 + - step_type: assert + description: 1. 可以复制选中的文本(注释内容无法复制) + - step_type: assert + description: 2. 各菜单正常可用 + - step_type: assert + description: 3. 可以复制选中的文本 + - step_type: assert + description: 4. 各菜单正常可用 + - step_type: action + description: 1. 点击右键菜单中“幻灯片放映” + - step_type: action + description: 2. 分别点击ESC键、鼠标右键、控制按钮中的x键 + - step_type: assert + description: 3. 分别在浅色和深色主题下,查看和长按控制按钮,查看UI是否与设计图一致 + - step_type: assert + description: 4. 打开文档,按快捷键Crtl+H,查看是否进入幻灯片播放界面 + - step_type: assert + description: 1. 进入幻灯片放映 + - step_type: assert + description: 2. 退出幻灯片放映 + - step_type: assert + description: 3. 与设计图显示一致 + - step_type: assert + description: 4. 进入幻灯片放映,放映到最后一页后,继续循环至第一页播放 + - step_type: action + description: 1. 已连接打印机,点击右键菜单中的打印 + - step_type: action + description: 2. 选择打印机打印 + - step_type: assert + description: 1. 跳转到打印预览界面 + - step_type: assert + description: 2. 可正常打印纸张;打印预览和实际打印界面显示正常 + - step_type: action + description: 1. 未连接打印机,点击主菜单中的打印菜单 + - step_type: action + description: 2. 选择打印到文件(PDF) + - step_type: assert + description: 1. 跳转到打印预览界面, + - step_type: assert + description: 2. 打印正常,打印文档可以保存 + - step_type: action + description: 1. 选中一段未高亮文本,点击右键菜单中复制菜单 + - step_type: action + description: 2. 选中一段未高亮文本,按键盘中的Ctrl+C键,打开新的文本按键盘中的Ctrl+V键 + - step_type: action + description: 3. 选中一段未高亮文本,点击右键菜单中高亮菜单和8种颜色图标 + - step_type: action + description: 4. 选中一段未高亮文本,点击右键菜单中添加注释菜单 + - step_type: action + description: 5. 选中一段未高亮文本,点击右键菜单中添加书签菜单 + - step_type: assert + description: 1. 可以复制选中的文本 + - step_type: assert + description: 2. 可以复制选中的文本 + - step_type: assert + description: 3. 可以增加高亮和切换颜色 + - step_type: assert + description: 4. 在文本右下角打开注释窗口,可以编辑注释,关闭后注释添加完成,文本自动高亮 + - step_type: assert + description: 5. 当前页面添加为书签 + - step_type: assert + description: 1. 选中页面中一段未高亮文本,查看右键菜单包含的菜单项 + - step_type: assert + description: 1. 右键菜单包含的选项为:复制、高亮、8种高亮颜色、取消高亮、添加注释、添加书签;其中“取消高亮”置灰显示,其他菜单高亮可选择 + - step_type: assert + description: 1. 分别点击右键菜单中添加书签,添加注释,第一页,上一页,下一页,最后一页菜单,查看是否正确跳转 + - step_type: assert + description: 1. 页面正确跳转 + - step_type: assert + description: 1. 选中一段文本,翻页后回到原位置查看 + - step_type: assert + description: 1. 选中文本不会消失 + - step_type: action + description: 1. 选中一段文本,右击文本 + - step_type: action + description: 2. 鼠标分别放置在任意一个菜单 + - step_type: action + description: 3. 右侧主视图区域,右击弹出右键菜单,鼠标放置在任意菜单 + - step_type: action + description: 4. 鼠标放置在百分比下拉框菜单任意位置 + - step_type: action + description: 5. 点击菜单键,鼠标放置在任意菜单位置 + - step_type: assert + description: 1. 弹出右键菜单 + - step_type: assert + description: 2. 正常高亮显示 + - step_type: assert + description: 3. 正常高亮显示 + - step_type: assert + description: 4. 正常高亮显示 + - step_type: assert + description: 5. 正常高亮显示 + - step_type: action + description: 1. 打开PDF文档,选中一段文本,鼠标在选中区域右击 + - step_type: action + description: 2. 打开PDF文档,选中一段文本,鼠标在非选中区域右击 + - step_type: assert + description: 1. 弹出高亮相关的右键菜单 + - step_type: assert + description: 2. 弹出进行上下页跳转相关的右键菜单 + - step_type: assert + description: 1. 未选中文本,点击鼠标右键,查看右键菜单显示 + - step_type: assert + description: 2. 点击添加书签,查看 + - step_type: assert + description: 3. 点击全屏,查看 + - step_type: assert + description: 4. 点击幻灯片放映,查看 + - step_type: assert + description: 5. 点击第一页,查看 + - step_type: assert + description: 6. 点击前一页,查看 + - step_type: assert + description: 7. 点击后一页,查看 + - step_type: assert + description: 8. 点击最后一页,查看 + - step_type: assert + description: 9. 点击左旋转,查看 + - step_type: assert + description: 10. 点击右旋转,查看 + - step_type: assert + description: 11. 点击打印,查看 + - step_type: assert + description: 12. 点击文档信息,查看 + - step_type: assert + description: 1. 显示:添加书签、全屏、幻灯片放映、第一页、前一页、后一页、最后一页、左旋转、右旋转、打印、文档信息 + - step_type: assert + description: 2. 当前页面正常添加后书签,右上角显示书签图标,左边栏显示书签缩略图 + - step_type: assert + description: 3. 进入全屏显示 + - step_type: assert + description: 4. 正常播放幻灯片 + - step_type: assert + description: 5. 跳转至第一页,如当前文档已在第一页,则“第一页”菜单置灰显示 + - step_type: assert + description: 6. 跳转至前一页,如当前文档已在第一页,则“前一页”菜单置灰显示 + - step_type: assert + description: 7. 跳转至后一页,如当前文档已在最后一页,则“后一页”菜单置灰显示 + - step_type: assert + description: 8. 跳转至最后一页,如当前文档已在最后一页,则“最后一页”菜单置灰显示 + - step_type: assert + description: 9. 文档正常左旋转,界面显示正常 + - step_type: assert + description: 10. 文档正常右旋转,界面显示正常 + - step_type: assert + description: 11. 跳转到打印预览界面 + - step_type: assert + description: 12. 显示文档信息界面,界面显示无异常 + - step_type: action + description: 1. 打开文档,点击最大化 + - step_type: action + description: 2. 右击主视图界面弹出右键菜单,点击幻灯片播放菜单 + - step_type: action + description: 3. 点击底部按钮的X键,或键盘ESC键 + - step_type: assert + description: 4. 打开文档,查看默认状态 + - step_type: action + description: 5. 右击主视图界面弹出右键菜单,点击幻灯片播放菜单 + - step_type: action + description: 6. 点击底部按钮的X键,或键盘ESC键 + - step_type: assert + description: 1. 应用最大化显示 + - step_type: assert + description: 2. 进入幻灯片播放 + - step_type: assert + description: 3. 退出幻灯片播放,应用窗口保持最大化显示 + - step_type: assert + description: 4. 窗口为默认大小 + - step_type: assert + description: 5. 进入幻灯片播放 + - step_type: assert + description: 6. 退出幻灯片播放,应用窗口保持默认大小 + - step_type: action + description: 1. 打开横向显示的PDF格式文档(可以通过ppt转化) + - step_type: assert + description: 2. 点击打印,进入打印预览界面,查看预览图片的显示 + - step_type: action + description: 3. 打开普通纵向显示的PDF格式文档 + - step_type: assert + description: 4. 点击打印,进入打印预览界面,查看预览图片的显示 + - step_type: assert + description: 1. 界面内容显示正常 + - step_type: assert + description: 2. 正常横向显示,不会被纵向拉伸 + - step_type: assert + description: 3. 界面内容显示正常 + - step_type: assert + description: 4. 显示正常 +- id: suite_文档打开 + name: 文档打开测试 + module: 文档打开 + status: active + annotation: + 测试界面: 文件操作-文档打开 + 测试功能: 各类文档格式打开/拖拽打开 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 打开文档,分别查看右侧和底部进度条显示 + - step_type: assert + description: 2. 切换至深色,打开文档,分别查看右侧和底部进度条显示 + - step_type: assert + description: 1. 显示清晰,无异常 + - step_type: assert + description: 2. 显示清晰,无异常 + - step_type: action + description: 1. 重命名文档,在名称中按tab键 + - step_type: action + description: 2. 重命名文档,在名称中按enter键 + - step_type: action + description: 3. 重命名文档,在名称中按空格键,再打开此文档 + - step_type: action + description: 4. 重命名文档,在名称中输入特殊字符、标点符号(%# ,。等),再打开此文档 + - step_type: assert + description: 1. 按tab键不起作用 + - step_type: assert + description: 2. 按enter键不起作用 + - step_type: assert + description: 3. 正常打开 + - step_type: assert + description: 4. 正常打开 + - step_type: assert + description: 1. 仅打开一个文档查看器窗口,打开文档,点击最小化 + - step_type: action + description: 2. 双击另一份文档 + - step_type: assert + description: 1. 最小化至任务栏 + - step_type: assert + description: 2. 窗口重新在桌面打开,另一份文档打开显示在同一个窗口中 + - step_type: assert + description: 1. 打开文档,默认百分比100%,快速滑动页面,查看 + - step_type: assert + description: 2. 打开文档,调整百分比为10%,快速滑动页面,查看 + - step_type: assert + description: 1. 界面显示正常,不会出现加载时长过长现象 + - step_type: assert + description: 2. 界面显示正常,不会出现加载时长过长现象 + - step_type: action + description: 1. 选中多个PDF格式文档,右键菜单选择打开 + - step_type: action + description: 2. 选中多个DJVU格式文档,右键菜单选择打开 + - step_type: action + description: 3. 选中多个DOCX格式文档,右键菜单选择打开 + - step_type: assert + description: 1. 正常打开所有选择的文档 + - step_type: assert + description: 2. 正常打开所有选择的文档 + - step_type: assert + description: 3. 正常打开所有选择的文档 + - step_type: action + description: 1. 打开文档,按Ctrl+鼠标滚轮,上滑 + - step_type: action + description: 2. 打开文档,按Ctrl+鼠标滚轮,下滑 + - step_type: action + description: 3. 打开文档,按Ctrl+“+”, + - step_type: action + description: 4. 打开文档,按Ctrl+“-”, + - step_type: assert + description: 1. 文档正常进行放大,放大过程流畅,无闪烁 + - step_type: assert + description: 2. 文档正常进行缩小,缩小过程流畅,无闪烁 + - step_type: assert + description: 3. 文档正常进行放大,放大过程流畅,无闪烁 + - step_type: assert + description: 4. 文档正常进行缩小,缩小过程流畅,无闪烁 + - step_type: assert + description: 1. 打开文档,鼠标滚轮滑动,查看显示 + - step_type: action + description: 2. 打开文档,拖拽右侧和底部滚动条 + - step_type: assert + description: 1. 页面翻页流畅,无闪烁 + - step_type: assert + description: 2. 页面翻页流畅,无闪烁 + - step_type: assert + description: 1. 打开文档,双页显示,拖拽窗口,查看 + - step_type: assert + description: 2. 打开文档,适应高度,拖拽窗口,查看 + - step_type: assert + description: 3. 打开文档,适应宽度,拖拽窗口,查看 + - step_type: assert + description: 4. 打开文档,左旋转,拖拽窗口,查看 + - step_type: assert + description: 5. 打开文档,右旋转,拖拽窗口,查看 + - step_type: assert + description: 1. 界面显示顺畅,无闪烁、重影现象 + - step_type: assert + description: 2. 界面显示顺畅,无闪烁、重影现象 + - step_type: assert + description: 3. 界面显示顺畅,无闪烁、重影现象 + - step_type: assert + description: 4. 界面显示顺畅,无闪烁、重影现象 + - step_type: assert + description: 5. 界面显示顺畅,无闪烁、重影现象 + - step_type: action + description: 1. 打开文档,分别从上下左右、四个边角拖动改变窗口大小 + - step_type: action + description: 2. 打开文档,双页显示,分别从上下左右、四个边角拖动改变窗口大小 + - step_type: action + description: 3. 打开文档,适应高度,分别从上下左右、四个边角拖动改变窗口大小 + - step_type: action + description: 4. 打开文档,适应宽度,分别从上下左右、四个边角拖动改变窗口大小 + - step_type: assert + description: 1. 窗口变化正常,界面显示正常,不会出现闪烁等异常 + - step_type: assert + description: 2. 窗口变化正常,界面显示正常,不会出现闪烁等异常 + - step_type: assert + description: 3. 窗口变化正常,界面显示正常,不会出现闪烁等异常;页面始终适应高度显示 + - step_type: assert + description: 4. 窗口变化正常,界面显示正常,不会出现闪烁等异常;页面始终适应宽度显示 + - step_type: assert + description: 1. 已添加文档,查看顶部工具栏的显示 + - step_type: assert + description: 2. 点击菜单键,查看包含的菜单项 + - step_type: assert + description: 3. 查看文档区域显示 + - step_type: assert + description: 4. 展开左边栏,查看底部图标 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 包含的菜单有:新窗口、新标签页、保存、另存为、在文件管理器显示、放大镜、工具、打印、主题、帮助、关于、退出 + - step_type: assert + description: 3. 左边栏缩略图默认收起,右侧文档首次打开默认显示第一页 + - step_type: assert + description: 4. 显示缩略图图标和书签图标,显示无异常 + - step_type: action + description: 1. 在文件夹中双击一个docx文档 + - step_type: assert + description: 2. 在文件夹中右击一个docx文档,选择打开方式为:文档查看器 + - step_type: action + description: 3. 拖拽一个docx文档至初始页面 + - step_type: action + description: 4. 打开应用,点击“选择文件”进行选择:进入文件选择页面,选择一个docx文档,点击打开 + - step_type: action + description: 5. 初始界面按Ctrl+O键,选择一个docx文档打开 + - step_type: action + description: 6. 打开应用,点击菜单列表中的“新标签页”菜单,选择一个docx文档打开 + - step_type: action + description: 7. 已打开文档后,点击标签栏右侧的+菜单 + - step_type: assert + description: '1.' + - step_type: assert + description: '2.' + - step_type: assert + description: '3.' + - step_type: assert + description: '4.' + - step_type: assert + description: '5.' + - step_type: assert + description: '6.' + - step_type: assert + description: '7.' + - step_type: action + description: 1. 1.选中多个docx文档,右键菜单选择打开 + - step_type: assert + description: 1. 正常打开所有选择的文档 + - step_type: action + description: 1. 初始界面按Ctrl+O键 + - step_type: assert + description: 2. 文件选择页面点击取消,或者点击ESC键,查看是否退出文件选择界面 + - step_type: assert + description: 1. 弹出文件选择界面 + - step_type: assert + description: 2. 退出文件选择界面 + - step_type: assert + description: 1. 打开应用,选中三种格式文档(docx、pdf、djvu)拖拽至窗口中,查看 + - step_type: action + description: 2. 打开应用,点击“选择文件”进行选择:进入文件选择页面,选中三种格式文档(docx、pdf、djvu)打开 + - step_type: action + description: 3. 初始界面按Ctrl+O键,进入文件选择页面,选中三种格式文档(docx、pdf、djvu)打开 + - step_type: action + description: 4. 打开应用,点击菜单列表中的“新标签页”菜单,选中三种格式文档(docx、pdf、djvu)打开 + - step_type: action + description: 5. 已打开文档后,点击标签栏右侧的+菜单,三种格式文档(docx、pdf、djvu)打开 + - step_type: assert + description: 1. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + - step_type: assert + description: 2. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + - step_type: assert + description: 3. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + - step_type: assert + description: 4. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + - step_type: assert + description: 5. pdf和djvu格式直接打开,docx格式文档转化为pdf打开 + - step_type: assert + description: 1. 打开docx文档,查看界面显示 + - step_type: assert + description: '1.0' +- id: suite_文档打开_1 + name: 文档打开测试 + module: 文档打开 + status: active + annotation: + 测试界面: 文件操作-文档打开 + 测试功能: 各类文档格式打开/拖拽打开 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 在文档查看器应用中打开一份docx文档 + - step_type: action + description: 2. 文档未编辑,点击工具栏关闭按钮或“退出”菜单 + - step_type: action + description: 3. 文档编辑后,点击工具栏关闭按钮或“退出”菜单 + - step_type: assert + description: 1. 检查所有保存的文档,编辑内容都正确保存 + - step_type: assert + description: 2. 是否保存弹框的文案改为“是否保存对文档xxx的编辑” + - step_type: assert + description: '3.' + - step_type: assert + description: 1. 单个窗口中打开三份docx文档,全部未编辑,点击工具栏中的关闭,查看 + - step_type: assert + description: 1. 窗口直接关闭,无提示弹出 + - step_type: action + description: 1. 打开docx文档,文档未编辑,按快捷键Ctrl+S + - step_type: action + description: 2. 打开docx文档,文档编辑后,按快捷键Ctrl+S + - step_type: action + description: 3. 打开docx文档,文档编辑后,按快捷键Ctrl+Shift+S + - step_type: assert + description: 1. 无提示语弹出 + - step_type: assert + description: 2. 弹出另存为界面,可以修改文件名进行另存 + - step_type: assert + description: 3. 弹出另存为界面,可以修改文件名进行另存 + - step_type: action + description: 1. 打开一份docx文档,编辑后不保存,重启电脑 + - step_type: action + description: 2. 打开一份docx文档,编辑后不保存,注销电脑 + - step_type: action + description: 3. 打开一份docx文档,编辑后不保存,关机 + - step_type: assert + description: 1. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“重启”继续重启编辑内容不会被保存 + - step_type: assert + description: 2. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“注销”PC会注销,编辑内容不会被保存 + - step_type: assert + description: 3. 会弹出“文档未保存”的提示,点击“取消”返回桌面编辑内容不消失,点击“关机”PC 会关机,编辑内容不会被保存 + - step_type: action + description: 1. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,重启电脑 + - step_type: action + description: 2. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,关机 + - step_type: action + description: 3. 打开一份docx文档,编辑后另存为新的pdf文档,原docx文档关闭,注销 + - step_type: assert + description: 1. 无“文档未保存”的提示弹出,直接进入重启;再次开机,另存后的pdf文档中编辑内容不会消失 + - step_type: assert + description: 2. 无“文档未保存”的提示弹出,直接关机。再次开机,另存后的pdf文档中编辑内容不会消失 + - step_type: assert + description: 3. 无“文档未保存”的提示弹出,直接注销。再次开机,另存后的pdf文档中编辑内容不会消失 + - step_type: assert + description: 1. 打开文档,编辑后关闭,查看提示语显示 + - step_type: assert + description: 1. 弹出是否保存弹框,提示语为 是否保存对“xxx”的编辑 + - step_type: action + description: 1. 进入设置添加新的用户 + - step_type: assert + description: 2. 切换至新的用户,检查文档查看器版本和基本功能 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 版本正确,基本功能正常 + - step_type: action + description: 1. 刷机后首次双击PDF格式文档 + - step_type: action + description: 2. 刷机后首次双击DJVU格式文档 + - step_type: action + description: 3. 刷机后首次双击DOCX格式文档 + - step_type: assert + description: 1. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开。 + - step_type: assert + description: 2. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开 + - step_type: assert + description: 3. 若有其他支持的应用,可能使用文档查看器打开;如无,直接通过文档查看器应用打开 +- id: suite_文档操作 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 展开左边栏,删除底部页数框中的数值,再点击窗口内外其他位置 + - step_type: action + description: 2. 删除百分比数值框中的数值,再点击窗口内外其他位置 + - step_type: assert + description: 1. 输入框中应该再次显示最近一次的数据 + - step_type: assert + description: 2. 输入框中应该再次显示最近一次的数据 + - step_type: assert + description: 1. 打开文档,查看默认百分比显示 + - step_type: action + description: 2. 切换到双页显示 + - step_type: action + description: 3. 再切到单页显示 + - step_type: action + description: 4. 单页显示时打开左边栏 + - step_type: action + description: 5. 双页页显示时打开左边栏 + - step_type: assert + description: 1. 默认显示单页,100%比例 + - step_type: assert + description: 2. 页面适配,无截断显示 + - step_type: assert + description: 3. 页面适配,无截断显示 + - step_type: assert + description: 4. 页面适配,无截断显示 + - step_type: assert + description: 5. 页面适配,无截断显示 + - step_type: action + description: 1. 输入关键字并搜索 + - step_type: action + description: 2. 按键盘Backspace键删除关键字,重新输入其他关键字并搜索 + - step_type: action + description: 3. 点击搜索框中的上下键切换 + - step_type: assert + description: 1. 左边栏弹出搜索结果缩略图,文档中关键字被选中 + - step_type: assert + description: 2. 左边栏正常显示新的搜索结果缩略图,不会叠加显示,右侧文档中显示正常 + - step_type: assert + description: 3. 左边栏和右侧文档中显示均正确 + - step_type: assert + description: 1. 点击搜索框最右侧X,查看 + - step_type: assert + description: 1. 可以正常关闭搜索,搜索框和搜索结果都会消失 + - step_type: assert + description: 1. 点击关键字右侧的X,查看显示 + - step_type: assert + description: 2. 全选关键字,按delete键,或者按backspace删除关键字,查看界面显示 + - step_type: assert + description: 1. 搜索框中的关键字被删除,关键字旁边的X消失,搜索结果被关闭,搜索弹框不会关闭,可以继续输入关键字 + - step_type: assert + description: 2. 只有关键字被删除,界面无变化,搜索结果不会被删除 + - step_type: assert + description: 1. 搜索弹框中未输入任何内容,点击键盘Enter键,查看界面显示 + - step_type: assert + description: 1. 界面无任何改变 + - step_type: assert + description: 1. 在搜索框输入关键字搜索,且文档中无此关键字,查看界面显示 + - step_type: assert + description: 1. 左边栏显示“无搜索结果”,右侧文档无变化 + - step_type: assert + description: 1. 点击左边栏任意一个搜索结果缩略图,查看页面显示 + - step_type: assert + description: 2. 左边栏页面超过一页时,滑动滑鼠,查看页面显示 + - step_type: assert + description: 1. 点击的搜索结果缩略图显示选中状态,右侧文档跳转到相应页面,页面中所有关键字保持高亮 + - step_type: assert + description: 2. 页面正常滑动显示 + - step_type: assert + description: 1. 点击搜索框手动输入关键字,点击键盘enter键搜索,查看搜索结果显示 + - step_type: action + description: 2. 点击上一个按钮 + - step_type: action + description: 3. 点击下一个按钮 + - step_type: assert + description: 1. 正常显示搜索结果 + - step_type: assert + description: 2. 正常切换关键字,选中的关键字自动添加绿色高亮效果 + - step_type: assert + description: 3. 正常切换关键字,选中的关键字自动添加绿色高亮效果 + - step_type: assert + description: 1. 在主菜单中选择搜索,查看界面显示 + - step_type: assert + description: 2. 右击未选中文本或空白区域,弹出右键菜单项,选择搜索,查看界面显示 + - step_type: assert + description: 1. 弹出搜索弹框,搜索框中显示搜索字样、搜索框右侧显示上一个、下一个按钮、关闭图标 + - step_type: assert + description: 2. 弹出搜索弹框,搜索框中显示搜索字样、搜索框右侧显示上一个、下一个按钮、关闭图标 + - step_type: action + description: 1. 跨页选中文本添加高亮 + - step_type: action + description: 2. 右击高亮文本选择“取消高亮” + - step_type: assert + description: 1. 可以正常添加跨页高亮 + - step_type: assert + description: 2. 仅可取消当前页高亮 + - step_type: assert + description: 1. 文本已高亮显示,重叠选中另一段文本,右击未高亮区域添加颜色,查看 + - step_type: assert + description: 1. 出现两段重叠颜色,重叠部分为混合色 + - step_type: assert + description: 1. 选中/不选中已高亮的文本,点击右键菜单中“取消高亮”菜单,查看是否可以取消高亮 + - step_type: assert + description: 1. 可以正常取消高亮 + - step_type: action + description: 1. 选中文本,右击选择一种高亮颜色(如:蓝色) + - step_type: assert + description: 2. 不关闭应用,右击另一段高亮文本,右击弹出右键菜单查看 + - step_type: action + description: 3. 选中文本,右击选择一种高亮颜色(如:蓝色) + - step_type: assert + description: 4. 不关闭应用,选择另一段未高亮文本,右击弹出右键菜单查看 + - step_type: assert + description: 1. 文本添加蓝色高亮 + - step_type: assert + description: 2. 右键菜单中蓝色图标仍为选中状态,点击“高亮”菜单,文本切换为蓝色高亮 + - step_type: assert + description: 3. 文本添加蓝色高亮 + - step_type: assert + description: 4. 右键菜单中蓝色图标仍为选中状态,点击“高亮”菜单,文本添加蓝色高亮 + - step_type: assert + description: 1. 选中已高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标进行切换,查看 + - step_type: assert + description: 2. 不选中已高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标进行切换,查看是否可以切换 + - step_type: assert + description: 3. 选中一段未高亮的文本,右击这段文本,点击右键菜单中任意颜色圈图标添加高亮,查看 + - step_type: assert + description: 4. 再次右击这段文本,选择其他颜色进行切换,查看是否切换成功 + - step_type: assert + description: 1. 每点击一种颜色,会叠加成混合色 + - step_type: assert + description: 2. 可以正常切换高亮颜色 + - step_type: assert + description: 3. 可以正常添加高亮 + - step_type: assert + description: 4. 可以正常切换高亮颜色 +- id: suite_文档操作_1 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 添加高亮后,查看“高亮”菜单和“取消高亮”菜单显示,查看颜色圈图标是否可以继续点击切换颜色 + - step_type: assert + description: 1. “高亮”菜单置灰,“取消高亮”菜单可点击,颜色圈图标可继续点击切换颜色 + - step_type: assert + description: 1. 选中一段未高亮文字,查看取消高亮菜单是否置灰 + - step_type: action + description: 2. 点击右键菜单中的高亮菜单添加 + - step_type: assert + description: 1. 取消高亮菜单置灰 + - step_type: assert + description: 2. 可以添加高亮,添加的高亮颜色为当前颜色圈图标选中的颜色 + - step_type: assert + description: 1. 首次打开文档,选中多行文本右击,查看默认选中的颜色圈图标 + - step_type: assert + description: 2. 切换颜色后,选中多行文本右击,关闭文档再打开,查看默认的颜色图标 + - step_type: assert + description: 1. 默认选中橘黄色图标 + - step_type: assert + description: 2. 默认选中橘黄色图标 + - step_type: action + description: 1. 点击选择图标,在下拉框中选择手型图标 + - step_type: action + description: 2. 鼠标移动到左边栏和右侧文档并点击 + - step_type: assert + description: 3. 长按鼠标,查看能否拖动页面 + - step_type: assert + description: 1. 工具栏显示手型工具图标 + - step_type: assert + description: 2. 鼠标移动到左边栏仍显示选择样式,点击可选择任意缩略图和按钮;鼠标移动到右侧文档显示为手型样式,无法选择文本;鼠标移动到链接内容仍显示为手型样式,点击无法进入相应链接 + - step_type: assert + description: 3. 可以拖动页面 + - step_type: assert + description: 1. 文档打开后,查看默认使用的工具 + - step_type: action + description: 2. 鼠标移动到左边栏和右侧文档并点击 + - step_type: assert + description: 3. 长按鼠标,查看能否拖动页面 + - step_type: assert + description: 1. 默认使用选择工具,工具栏显示选择工具图标 + - step_type: assert + description: 2. 鼠标移动到非可选文档处仍显示选择样式,点击可选择任意缩略图和按钮;鼠标移动到右侧文档变成竖形选择文本图标,可以选择文本;鼠标移动到链接内容显示为手型样式,点击进入相应链接 + - step_type: assert + description: 3. 无法拖动页面 + - step_type: action + description: 1. 点击下拉框,选择百分比选项 + - step_type: action + description: 2. 点击+、-按钮 + - step_type: assert + description: 1. 文档行相应百分比大小调整 + - step_type: assert + description: 2. 缩放比例调整为列表中相邻比例选项进行调整 + - step_type: assert + description: 1. 点击编辑框,输入10%-500%范围内任意百分比值(可以输小数点,小数点保留2位),按enter键,查看文档显示 + - step_type: action + description: 2. 点击+、-按钮, + - step_type: assert + description: 1. 文档进行相应百分比大小调整,按enter键后输入框中内容无截断显示 + - step_type: assert + description: 2. 缩放比例调整为列表中最靠近该比例的比例选项进行调整 + - step_type: assert + description: 1. 查看工具栏中的百分比图标显示 + - step_type: assert + description: 2. 点击编辑框中的下拉按钮,查看显示的百分比选项 + - step_type: assert + description: 1. 显示带有下拉按钮的编辑框,编辑框左右两侧显示+-按钮;显示效果与设计图一致 + - step_type: assert + description: 2. 点击下拉框显示12个百分比选项:10%、25%、50%、75%、100%、125%、150%、175%、200%、300%、400%、500%;显示效果与设计图一致 + - step_type: assert + description: 1. 调整文档百分比大小,按ctrl1查看 + - step_type: assert + description: 2. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl1查看 + - step_type: assert + description: 3. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl2或适应高度菜单查看 + - step_type: assert + description: 4. 调整文档百分比大小为任意值,且双页显示/左旋转/右旋转,按ctrl3或适应宽度菜单查看 + - step_type: action + description: 5. 分别按ctrl1、ctrl2、ctrl3 + - step_type: assert + description: 1. 文档显示为100%大小 + - step_type: assert + description: 2. 文档显示为100%大小,双页显示/左旋转/右旋转状态不会变化 + - step_type: assert + description: 3. 文档高度全部显示在当前页面,双页显示/左旋转/右旋转状态不会变化 + - step_type: assert + description: 4. 文档宽度全部显示在当前页面,双页显示/左旋转/右旋转状态不会变化 + - step_type: assert + description: 5. 文档在实际大小、适应高度、适应宽度菜状态之间正常切换 + - step_type: action + description: 1. 百分比与比例选择列表中不匹配(大多数情况),点击+、-按钮 + - step_type: action + description: 2. 百分比与比例选择列表中匹配(少部分情况),点击+、-按钮 + - step_type: assert + description: 1. 缩放比例调整为列表中最靠近该比例的比例选项进行调整 + - step_type: assert + description: 2. 缩放比例调整为列表中相邻比例选项进行调整 + - step_type: action + description: 1. 文档已调整为适合宽度状态,选择适合高度或按快捷键Ctrl2 + - step_type: action + description: 2. 文档已调整为适合宽度状态,在工具栏缩放比例图标中选择一个比例 + - step_type: action + description: 3. 文档已调整为适合宽度状态,在工具栏缩放比例图标中手动编辑一个比例 + - step_type: action + description: 4. 文档已调整为适合宽度状态,按快捷键Ctrl1 + - step_type: assert + description: 1. 进入适合高度状态,适合宽度被取消勾选,文档百分比显示正确 + - step_type: assert + description: 2. 文档显示选择的比例,适合宽度取消勾选 + - step_type: assert + description: 3. 文档显示编辑的比例,适合宽度取消勾选 + - step_type: assert + description: 4. 文档恢复默认大小,适合宽度取消勾选 + - step_type: action + description: 1. 文档已调整为适合高度状态,选择适合宽度或按快捷键Ctrl3 + - step_type: action + description: 2. 文档已调整为适合高度状态,在工具栏缩放比例图标中选择一个比例 + - step_type: action + description: 3. 文档已调整为适合高度状态,在工具栏缩放比例图标中手动编辑一个比例 + - step_type: action + description: 4. 文档已调整为适合高度状态,按快捷键Ctrl1 + - step_type: assert + description: 1. 进入适合宽度状态,适合高度被勾选 + - step_type: assert + description: 2. 文档显示选择的比例,适合高度取消勾选 + - step_type: assert + description: 3. 文档显示编辑的比例,适合高度取消勾选 + - step_type: assert + description: 4. 文档恢复默认大小,适合高度取消勾选 + - step_type: action + description: 1. 打开一份PDF文档,未展开左边栏,关闭应用再打开 + - step_type: action + description: 2. 打开一份PDF文档,展开左边栏,关闭应用再打开 + - step_type: action + description: 3. 打开一份PDF文档,浏览文档,如当前页数为:5,关闭应用再打开 + - step_type: assert + description: 1. 左边栏保持隐藏状态 + - step_type: assert + description: 2. 左边栏保持展开状态 + - step_type: assert + description: 3. 页面仍停留在页数5 + - step_type: assert + description: 1. 窗口中只有一个标签页,分别点击调整百分比/双页视图/适应宽度/适应高度/左旋转/右旋转,关闭应用再进入查看 + - step_type: assert + description: 2. 窗口中有多个标签页,分别点击调整百分比/双页视图/适应宽度/适应高度/左旋转/右旋转,关闭应用再进入查看 + - step_type: assert + description: 3. 窗口中只有一个标签页,分别点击调整百分比/双页视图/适合宽度/适合高度/左旋转/右旋转,关闭标签页,不关闭应用,再次打开文档查看 + - step_type: assert + description: 4. 窗口中有多标签页,分别点击调整百分比/双页视图/适合宽度/适合高度/左旋转/右旋转,关闭标签页,不关闭应用,再次打开文档查看 + - step_type: assert + description: 1. 保持退出之前的状态 + - step_type: assert + description: 2. 保持退出之前的状态 + - step_type: assert + description: 3. 保持退出之前的状态 + - step_type: assert + description: 4. 保持退出之前的状态 + - step_type: assert + description: 1. 文档单页显示时,改变工具栏百分比大小,查看文档内容变化 + - step_type: assert + description: 2. 文档单页显示时,使用Ctrl+滚轮或Ctrl++/Ctrl--改变文档大小,查看工具栏百分比数值变化 + - step_type: assert + description: 3. 文档双页显示时,改变工具栏百分比大小,查看文档内容变化 + - step_type: assert + description: 4. 文档双页显示时,使用Ctrl+滚轮或Ctrl++/Ctrl--改变文档大小,查看工具栏百分比数值变化 + - step_type: assert + description: 1. 文档内容大小同步变化 + - step_type: assert + description: 2. 工具栏百分比数值同步变化 + - step_type: assert + description: 3. 文档内容大小同步变化 + - step_type: assert + description: 4. 工具栏百分比数值同步变化 +- id: suite_文档操作_2 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 默认文档比例进入双页显示,再切换大小窗口和窗口比例 + - step_type: action + description: 2. 调整适合宽度,再切换大小窗口和窗口比例 + - step_type: action + description: 3. 调整适合高度,再切换大小窗口和窗口比例 + - step_type: action + description: 4. 左旋转,再切换大小窗口和窗口比例 + - step_type: action + description: 5. 右旋转,再切换大小窗口和窗口比例 + - step_type: assert + description: 1. 保持双页显示,文档百分比显示正常,不会出现闪退等异常 + - step_type: assert + description: 2. 保持适合宽度,文档百分比显示正常,不会出现闪退等异常 + - step_type: assert + description: 3. 保持适合高度,文档百分比显示正常,不会出现闪退等异常 + - step_type: assert + description: 4. 保持左旋转,文档百分比显示正常,不会出现闪退等异常 + - step_type: assert + description: 5. 保持右旋转,文档百分比显示正常,不会出现闪退等异常 + - step_type: action + description: 1. 选择任意百分比(如:35%),再切换窗口大小 + - step_type: action + description: 2. 点击适合宽度,再切换窗口大小 + - step_type: action + description: 3. 点击适合高度,再切换窗口大小 + - step_type: action + description: 4. 选择任意百分比(如:35%),左旋转,且未选择适合高度/适合宽度,再切换窗口大小 + - step_type: action + description: 5. 选择任意百分比(如:35%),右旋转,且未选择适合高度/适合宽度,再切换窗口大小 + - step_type: action + description: 6. 选择任意百分比(如:35%),左旋转,且选择适合高度/适合宽度,再切换窗口大小 + - step_type: action + description: 7. 选择任意百分比(如:35%),右旋转,且选择适合高度/适合宽度,再切换窗口大小 + - step_type: assert + description: 1. 百分比大小不会改变,界面显示正常 + - step_type: assert + description: 2. 保持适合宽度,文档百分比相应改变,不会出现闪退等异常 + - step_type: assert + description: 3. 保持适合高度,文档百分比相应改变,不会出现闪退等异常 + - step_type: assert + description: 4. 百分比大小不会改变,界面显示正常 + - step_type: assert + description: 5. 百分比大小不会改变,界面显示正常 + - step_type: assert + description: 6. 保持适合高/宽度,文档百分比相应改变,不会出现闪退等异常 + - step_type: assert + description: 7. 保持适合高/宽度,文档百分比相应改变,不会出现闪退等异常 + - step_type: assert + description: 1. 首次打开文档,查看文档默认显示效果 + - step_type: action + description: 2. 点击双页显示 + - step_type: action + description: 3. 点击适合宽度 + - step_type: action + description: 4. 点击适合高度 + - step_type: action + description: 5. 点击左旋转 + - step_type: action + description: 6. 点击右旋转 + - step_type: assert + description: 1. 默认为单页,适合页面 + - step_type: assert + description: 2. 进入双页显示模式 + - step_type: assert + description: 3. 页面宽度在视窗内全部显示 + - step_type: assert + description: 4. 页面高度在视窗内全部显示 + - step_type: assert + description: 5. 仅当前页面正常进行左旋转,左边栏和工具栏不会翻转,旋转效果顺畅 + - step_type: assert + description: 6. 仅当前页面正常进行右旋转,左边栏和工具栏不会翻转,旋转效果顺畅 + - step_type: action + description: 1. 打开文档,鼠标不点击,任意移动,按键盘上下键或pageup/pagedown + - step_type: action + description: 2. 点击工具栏任意菜单(除去百分比菜单)后,按键盘上下键或pageup/pagedown + - step_type: action + description: 3. 点击百分比或页数输入框后,按键盘上下键或pageup/pagedown + - step_type: action + description: 4. 展开左边栏,鼠标点击左边栏区域后任意移动,按键盘上下键或pageup/pagedown + - step_type: action + description: 5. 鼠标点击右侧文档区域后任意移动,按键盘上下键或pageup/pagedown + - step_type: action + description: 6. 鼠标点击窗口外桌面区域,,按键盘上下键或pageup/pagedown + - step_type: assert + description: 1. 焦点默认在文档中,文档正常逐行翻页/逐页翻页 + - step_type: assert + description: 2. 焦点仍然默认在文档中,文档正常逐行翻页/逐页翻页 + - step_type: assert + description: 3. 焦点在输入框,文档不会进行翻页 + - step_type: assert + description: 4. 焦点在左侧,缩略图进行翻页 + - step_type: assert + description: 5. 焦点在右侧,文档进行翻页 + - step_type: assert + description: 6. 焦点在桌面中,选中桌面应用 + - step_type: action + description: 1. 选中一个书签/注释缩略图,鼠标任意移动后,按键盘delete键 + - step_type: action + description: 2. 选中一个书签/注释缩略图,鼠标点击右侧文档区域后,按键盘delete键 + - step_type: action + description: 3. 选中一个书签/注释缩略图,点击百分比或页数输入框,按键盘delete键 + - step_type: assert + description: 1. 正常删除书签/注释缩略图 + - step_type: assert + description: 2. 无法删除签/注释缩略图 + - step_type: assert + description: 3. 无法删除签/注释缩略图 + - step_type: assert + description: 1. 点击适合高度/适合宽度/调整百分比,查看 + - step_type: action + description: 2. 添加书签和注释 + - step_type: assert + description: 1. 界面显示正常 + - step_type: assert + description: 2. 显示正常 + - step_type: action + description: 1. 隐藏侧边栏时,进入全屏 + - step_type: action + description: 2. 展开侧边栏时,进入全屏 + - step_type: assert + description: 1. 侧边栏和标题栏自动隐藏 + - step_type: assert + description: 2. 侧边栏和标题栏自动隐藏 + - step_type: assert + description: 1. 进入全屏,鼠标移到窗口顶端,查看是否在1秒内呼唤出工具栏; + - step_type: assert + description: 2. 鼠标移出标题栏区域,查看是否在1秒内隐藏出工具栏; + - step_type: assert + description: 1. 1秒内可以呼唤出工具栏; + - step_type: assert + description: 2. 1秒内自动隐藏工具栏; + - step_type: action + description: 1. 全屏前打开了左侧栏再进入全屏,鼠标移动到窗口侧边 + - step_type: action + description: 2. 鼠标移出侧边栏区域 + - step_type: assert + description: 1. 1秒钟呼唤出侧边栏 + - step_type: assert + description: 2. 1秒钟自动隐藏侧边栏 + - step_type: action + description: 1. 全屏前隐藏了左侧栏再进入全屏,鼠标移动到窗口侧边 + - step_type: action + description: 2. 鼠标移出侧边栏区域 + - step_type: assert + description: 1. 1秒内呼唤出侧边栏; + - step_type: assert + description: 2. 1秒内自动隐藏侧边栏 + - step_type: action + description: 1. 全屏后唤出工具栏,未唤出侧边栏时,点击缩略图图标 + - step_type: action + description: 2. 全屏后唤出工具栏和侧边栏时,点击缩略图图标 + - step_type: assert + description: 1. 缩略图图标高亮显示,鼠标移动到左侧栏不会隐藏左侧栏 + - step_type: assert + description: 2. 缩略图图标高亮显示,鼠标移动到左侧栏不会隐藏左侧栏 + - step_type: action + description: 1. 打开文档,不选中文本右击,弹出右键菜单,点击全屏菜单 + - step_type: action + description: 2. 打开文档,按F11键 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 1&2.进入全屏界面,隐藏“标题栏”和“侧边栏” + - step_type: action + description: 1. 进入全屏,鼠标移到窗口顶端 + - step_type: action + description: 2. 鼠标移出标题栏区域 + - step_type: assert + description: 1. 1秒钟内呼唤出工具栏,当存在两个标签页时,工具栏和标签栏同时被唤出 + - step_type: assert + description: 2. 1秒钟内自动隐藏工具栏和标签栏; + - step_type: action + description: 1. 打开文档,展开侧边栏,点击全屏菜单 + - step_type: action + description: 2. 鼠标移动到窗口侧边 + - step_type: action + description: 3. 鼠标移出侧边栏区域 + - step_type: assert + description: 1. 进入全屏界面,侧边栏隐藏 + - step_type: assert + description: 2. 1秒内呼唤出侧边栏,“侧边栏”按钮为非选中状态,底部选中的按钮与全屏前一致 + - step_type: assert + description: 3. 自动隐藏侧边栏 + - step_type: action + description: 1. 进入全屏显示,唤出工具栏 + - step_type: assert + description: 2. 点击工具栏中的“侧边栏”按钮,查看界面显示 + - step_type: assert + description: 3. 再次点击“侧边栏”按钮,查看 + - step_type: assert + description: 1. 工具栏正常唤出 + - step_type: assert + description: 2. “侧边栏”按钮高亮显示,左侧栏固定显示,鼠标移出左侧栏不会隐藏左侧栏 + - step_type: assert + description: 3. 左侧栏被隐藏 +- id: suite_文档操作_3 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 进入全屏显示,先唤出侧边栏,再将鼠标移至左侧栏顶端区域 + - step_type: action + description: 2. 点击工具栏中的“侧边栏”按钮 + - step_type: assert + description: 3. 再次点击“侧边栏”按钮,查看 + - step_type: assert + description: 1. 侧边栏和工具栏同时唤出 + - step_type: assert + description: 2. “侧边栏”按钮高亮显示,左侧栏固定显示,鼠标移出左侧栏不会隐藏左侧栏 + - step_type: assert + description: 3. 左侧栏被隐藏 + - step_type: assert + description: 1. 进入全屏,打开多个标签页,鼠标移至页面顶端查看 + - step_type: assert + description: 2. 关闭仅剩余一个标签页,鼠标移至页面顶端查看 + - step_type: assert + description: 1. 显示工具栏和标签栏 + - step_type: assert + description: 2. 仅显示工具栏,标题显示在工具栏中间 + - step_type: action + description: 1. 进入全屏,点击右上角菜单按钮 + - step_type: action + description: 2. 进入全屏,点击右上角退出全屏按钮 + - step_type: action + description: 3. 进入全屏,点击右上角关闭按钮 + - step_type: assert + description: 1. 弹出菜单弹框 + - step_type: assert + description: 2. 退出全屏 + - step_type: assert + description: 3. 关闭文档 + - step_type: action + description: 1. 进入全屏,点击工具栏右侧退出全屏菜单 + - step_type: action + description: 2. 进入全屏,点击键盘esc按钮 + - step_type: action + description: 3. 进入全屏,按快捷键F1 1 + - step_type: action + description: 4. 进入全屏,右击文档弹出右键菜单,点击“退出全屏” + - step_type: assert + description: 1. 退出全屏 + - step_type: assert + description: 2. 退出全屏 + - step_type: assert + description: 3. 退出全屏 + - step_type: assert + description: 4. 退出全屏 + - step_type: assert + description: 1. 进入全屏翻页(如:第5页),左侧栏选中第5页文档缩略图,退出全屏查看 + - step_type: assert + description: 1. 退出全屏显示后仍显示在第5页 + - step_type: assert + description: 1. 进入全屏选中一个目录,退出全屏查看 + - step_type: assert + description: 1. 退出全屏左侧栏仍选中此目录 + - step_type: assert + description: 1. 进入全屏添加书签,退出全屏后查看 + - step_type: assert + description: 1. 书签页数和书签个数无变化 + - step_type: assert + description: 1. 进入全屏添加注释,退出全屏后查看 + - step_type: assert + description: 1. 注释页数、个数、内容无变化 + - step_type: assert + description: 1. 进入全屏选择手型工具,退出全屏后查看 + - step_type: assert + description: 1. 仍显示手型工具 + - step_type: assert + description: 1. 进入全屏搜索并弹出搜索结果,退出全屏查看 + - step_type: assert + description: 1. 搜索结果仍显示 + - step_type: assert + description: 1. 仅只打开一份文档,进入再退出全屏,查看标题栏的显示 + - step_type: assert + description: 2. 打开多份文档,进入再退出全屏,查看标题栏的显示 + - step_type: assert + description: 1. 标题栏的显示无变化 + - step_type: assert + description: 2. 标题栏的显示无变化 + - step_type: assert + description: 1. 进入全屏调整视图(双页显示、适合页面、默认大小、适应宽度、适应高度、每个百分比),退出后查看 + - step_type: assert + description: 1. 退出全屏视图状态无变化,百分比数值相应变化 + - step_type: action + description: 1. 进入全屏,未唤出左侧栏,点击双页显示(适应宽度默认勾选) + - step_type: action + description: 2. 鼠标移出左侧栏再移入 + - step_type: assert + description: 1. 界面正常双页显示 + - step_type: assert + description: 2. 保持双页显示和适应宽度状态,百分比值改变 + - step_type: action + description: 1. 进入全屏,未唤出左侧栏,点击适应高度 + - step_type: action + description: 2. 鼠标移出左侧栏再移入 + - step_type: assert + description: 1. 显示为适应高度状态 + - step_type: assert + description: 2. 文档保持适应高度状态 + - step_type: action + description: 1. 进入全屏,未唤出左侧栏,点击适应宽度 + - step_type: action + description: 2. 鼠标移出左侧栏再移入 + - step_type: assert + description: 1. 显示为适应宽度状态 + - step_type: assert + description: 2. 文档保持适应宽度状态,百分比数值不改变 +- id: suite_文档操作_4 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 进入全屏,未唤出左侧栏,搜索关键字并弹出搜索结果 + - step_type: action + description: 2. 鼠标移出左侧栏再移入 + - step_type: assert + description: 1. 搜索结果缩略图显示,关键字黄色高亮显示,选中的关键字为绿色 + - step_type: assert + description: 2. 搜索结果无变化 + - step_type: action + description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适合页面 + - step_type: action + description: 2. 收起再展开左侧栏 + - step_type: assert + description: 1. 界面显示适合页面状态 + - step_type: assert + description: 2. 文档保持适合页面状态 + - step_type: action + description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适应高度 + - step_type: action + description: 2. 收起再展开左侧栏 + - step_type: assert + description: 1. 显示为适应高度状态 + - step_type: assert + description: 2. 文档保持适应高度状态 + - step_type: action + description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,点击适应宽度 + - step_type: action + description: 2. 收起再展开左侧栏 + - step_type: assert + description: 1. 显示为适应宽度状态 + - step_type: assert + description: 2. 文档保持适应宽度状态,百分比数值相应改变 + - step_type: action + description: 1. 进入全屏,点击左上角左侧栏按钮固定显示左侧栏,搜索关键字,左侧弹出搜索结果 + - step_type: action + description: 2. 收起再展开左侧栏 + - step_type: assert + description: 1. 搜索结果缩略图显示,关键字黄色高亮显示,选中的关键字为绿色 + - step_type: assert + description: 2. 搜索结果无变化 + - step_type: assert + description: 1. 进入全屏,未选中文本右击,查看右键菜单显示 + - step_type: assert + description: 1. 全屏菜单变成“退出全屏” + - step_type: action + description: 1. 进入全屏,点击右键菜单中的第一页菜单 + - step_type: action + description: 2. 进入全屏,点击右键菜单中的前一页菜单 + - step_type: action + description: 3. 进入全屏,点击右键菜单中的后一页菜单 + - step_type: action + description: 4. 进入全屏,点击右键菜单中的最后一页菜单 + - step_type: action + description: 5. 进入全屏,点击右键菜单中的保存菜单 + - step_type: action + description: 6. 进入全屏,点击右键菜单中的另存为菜单 + - step_type: action + description: 7. 进入全屏,点击右键菜单中的打印菜单 + - step_type: action + description: 8. 进入全屏,点击右键菜单中的幻灯片放映菜单 + - step_type: action + description: 9. 进入全屏,点击右键菜单中的退出菜单 + - step_type: assert + description: '1.' + - step_type: assert + description: '2.' + - step_type: assert + description: '3.' + - step_type: assert + description: '4.' + - step_type: assert + description: '5.' + - step_type: assert + description: '6.' + - step_type: assert + description: '7.' + - step_type: assert + description: '8.' + - step_type: assert + description: 9. 1~9.功能正常 + - step_type: action + description: 1. 搜索完成后,鼠标放置在左侧栏底部四个按钮之上 + - step_type: assert + description: 1. 按钮置灰,不应该有hover效果 + - step_type: action + description: 1. 全屏显示界面打开放大镜 + - step_type: action + description: 2. 按esc键 + - step_type: assert + description: 1. 正常打开 + - step_type: assert + description: 2. 退出放大镜,不会退出全屏显示 + - step_type: action + description: 1. 搜索关键字,当搜索结果较多正在进行时,点新窗口菜单 + - step_type: action + description: 2. 搜索关键字,当搜索结果较多正在进行时,点新标签页菜单 + - step_type: action + description: 3. 搜索关键字,当搜索结果较多正在进行时,点保存菜单 + - step_type: action + description: 4. 搜索关键字,当搜索结果较多正在进行时,点另存为菜单,另存为新文档 + - step_type: action + description: 5. 搜索关键字,当搜索结果较多正在进行时,点击幻灯片放映菜单 + - step_type: action + description: 6. 搜索关键字,当搜索结果较多正在进行时,点击放大镜菜单 + - step_type: action + description: 7. 搜索关键字,当搜索结果较多正在进行时,点击在文件管理器中显示菜单 + - step_type: action + description: 8. 搜索关键字,当搜索结果较多正在进行时,点击在主题菜单 + - step_type: action + description: 9. 搜索关键字,当搜索结果较多正在进行时,点击在帮助菜单 + - step_type: action + description: 10. 搜索关键字,当搜索结果较多正在进行时,点击在关于菜单 + - step_type: action + description: 11. 搜索关键字,当搜索结果较多正在进行时,点击在退出菜单 + - step_type: assert + description: 1. 正常弹出新窗口 + - step_type: assert + description: 2. 正常弹出文件管理器选择界面 + - step_type: assert + description: 3. 正常保存文档 + - step_type: assert + description: 4. 可以另存成功 + - step_type: assert + description: 5. 进入幻灯片放映界面 + - step_type: assert + description: 6. 放大镜正常可以使用 + - step_type: assert + description: 7. 可以打开所在文件夹 + - step_type: assert + description: 8. 正常切换主题 + - step_type: assert + description: 9. 进入帮助手册界面 + - step_type: assert + description: 10. 打开关于弹窗 + - step_type: assert + description: 11. 退出应用 + - step_type: assert + description: 1. 百分比调整到10%,分别点击双页显示、适合宽度、 适合高度、适合页面、 左旋转、 右旋转,查看界面显示 + - step_type: assert + description: 2. 百分比调整到500%,分别点击双页显示、适合宽度、 适合高度、适合页面、 左旋转、 右旋转,查看界面显示 + - step_type: assert + description: 1. 界面显示正常 + - step_type: assert + description: 2. 界面显示正常 + - step_type: action + description: 1. 打开文档,鼠标不点击,任意移动,按键盘上下键或pageup/pagedown + - step_type: action + description: 2. 点击工具栏任意菜单(除去百分比菜单)后,按键盘上下键或pageup/pagedown + - step_type: action + description: 3. 点击百分比或页数输入框后,按键盘上下键或pageup/pagedown + - step_type: action + description: 4. 展开左边栏,鼠标点击左边栏区域后任意移动,按键盘上下键或pageup/pagedown + - step_type: action + description: 5. 鼠标点击右侧文档区域后任意移动,按键盘上下键或pageup/pagedown + - step_type: action + description: 6. 鼠标点击窗口外桌面区域,,按键盘上下键或pageup/pagedown + - step_type: assert + description: 1. 焦点默认在文档中,文档正常逐行翻页/逐页翻页 + - step_type: assert + description: 2. 焦点转移到工具栏 + - step_type: assert + description: 3. 焦点在输入框,文档不会进行翻页 + - step_type: assert + description: 4. 焦点在左侧,缩略图进行翻页 + - step_type: assert + description: 5. 焦点在右侧,文档进行翻页 + - step_type: assert + description: 6. 焦点在桌面中,选中桌面应用 + - step_type: action + description: 1. 打开多份文档并进入全屏 + - step_type: action + description: 2. 全屏界面添加新的文档 + - step_type: action + description: 3. 退出全屏 + - step_type: action + description: 4. 全屏界面关闭部分文档,再退出全屏 + - step_type: assert + description: 1. 文档正常显示,不会丢失 + - step_type: assert + description: 2. 文档标题正常显示 + - step_type: assert + description: 3. 文档正常显示,不会丢失 + - step_type: assert + description: 4. 文档正常显示 + - step_type: assert + description: 1. 打开文档,打开搜索框,未输入关键词查看界面显示 + - step_type: assert + description: 2. 打开文档,打开搜索框,输入关键词未按enter键,查看界面显示 + - step_type: assert + description: 3. 打开文档,打开搜索框,输入关键词并按enter键,查看界面显示 + - step_type: assert + description: 1. 向上、向下切换按键置灰显示 + - step_type: assert + description: 2. 向上、向下切换按键置灰显示 + - step_type: assert + description: 3. 向上、向下切换按键高亮显示 + - step_type: assert + description: 1. 打开文档,在输入框中输入英文关键字,如:user,按键盘enter键,查看 + - step_type: action + description: 2. 点击搜索框上一个、下一个按钮 + - step_type: assert + description: 3. 打开文档,在输入框中输入中文关键字,如:系统,按键盘enter键,查看 + - step_type: action + description: 4. 点击搜索框上一个、下一个按钮 + - step_type: assert + description: 1. 搜索结果高亮显示,左侧栏中搜索结果内容与个数显示正确 + - step_type: assert + description: 2. 按整个单词跳转,而不是按单个字母跳转;点击“上一个” 、“下一个”按钮均可以起作用,跳转到最后一个关键字后循环切换 + - step_type: assert + description: 3. 搜索结果高亮显示,左侧栏中搜索结果个数显示正确 + - step_type: assert + description: 4. 按整个词语跳转,而不是按单个字跳转;点击“上一个” 、“下一个”按钮均可以起作用,跳转到最后一个关键字后循环切换 +- id: suite_文档操作_5 + name: 文档操作测试 + module: 文档操作 + status: active + annotation: + 测试界面: 主窗口-文档视图 + 测试功能: 文档视图翻页/缩放/显示模式/滚动操作 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 打开文档,点击最大化按钮 + - step_type: action + description: 2. 点击右键菜单中的“全屏”菜单 + - step_type: action + description: 3. 右击主视图界面弹出右键菜单,点击“退出全屏”菜单 + - step_type: action + description: 4. 打开文档,显示为默认窗口大小,点击右键菜单中的“全屏”菜单 + - step_type: action + description: 5. 右击主视图界面弹出右键菜单,点击“退出全屏”菜单 + - step_type: assert + description: 1. 窗口最大化显示 + - step_type: assert + description: 2. 进入全屏显示 + - step_type: assert + description: 3. 可以退出全屏显示,窗口需保持最大化显示 + - step_type: assert + description: 4. 进入全屏显示 + - step_type: assert + description: 5. 可以退出全屏显示,窗口需保持默认大小显示 + - step_type: action + description: 1. 打开文档,点击最大化显示 + - step_type: action + description: 2. 鼠标放置在屏幕顶端,按快捷键F11 + - step_type: action + description: 3. 打开文档,点击最大化显示 + - step_type: action + description: 4. 鼠标放置在屏幕左侧边缘,按快捷键F11 + - step_type: assert + description: 1. 文档最大化显示 + - step_type: assert + description: 2. 工具栏自动弹出,按钮可点击,不会置灰显示 + - step_type: assert + description: 3. 文档最大化显示 + - step_type: assert + description: 4. 左侧栏自动弹出,按钮可点击,不会置灰显示 + - step_type: assert + description: 1. 打开带有超链接文本的文档,鼠标(默认选择样式)放置在超链接文本之上,查看 + - step_type: assert + description: 2. 移走鼠标,查看 + - step_type: assert + description: 1. 鼠标显示为手形样式,显示超链接详情浮窗,浮窗立即显示无间隔时长,与UI图相符。浮窗内容无法点击 + - step_type: assert + description: 2. 超链接详情浮窗和手形样式消失,鼠标恢复选择样式 + - step_type: assert + description: 1. 鼠标放置在超链接文本之上,弹出手形样式和详情浮窗,点击超链接,查看 + - step_type: action + description: 2. 安全提示弹框弹出后,点击关闭按钮 + - step_type: action + description: 3. 安全提示弹框弹出后,点击“阻止”按钮 + - step_type: action + description: 4. 安全提示弹框弹出后,点击“允许”按钮 + - step_type: assert + description: 1. 弹出安全提示弹框,弹框中显示关闭、“阻止”、“允许”按钮 + - step_type: assert + description: 2. 关闭弹窗,不做任何操作 + - step_type: assert + description: 3. 关闭弹窗,不做任何操作 + - step_type: assert + description: 4. 关闭弹窗,打开浏览器并跳转至该链接(网页的超链接会打开浏览器,email超链接会打开邮箱应用,多媒体超链接会打开相应的应用) + - step_type: action + description: 1. 安全提示弹框弹出后,点击应用其他菜单 + - step_type: assert + description: 1. 点击均无作用 + - step_type: action + description: 1. 点击超链接文本,点击安全提示弹框中的“允许”按钮 + - step_type: action + description: 2. 再次点击此超链接 + - step_type: assert + description: 1. 关闭弹窗,打开浏览器并跳转至该链接 + - step_type: assert + description: 2. 继续弹出安全提示弹框,点击“允许”按钮,浏览器中重新打开另一个标签页 + - step_type: assert + description: 备注:每次点击超链接都会弹出安全提示弹框 + - step_type: action + description: 1. 切换至手形工具,放置在超链接文本之上 + - step_type: action + description: 2. 切换至手形工具,点击超链接文本 + - step_type: action + description: 3. 切换至手形工具,选中超链接文本或普通文本 + - step_type: action + description: 4. 切换至手形工具,右击超链接文本 + - step_type: assert + description: 1. 会显示超链接浮窗 + - step_type: assert + description: 2. 弹出安全提示弹框,弹框中显示关闭、“阻止”、“允许”按钮,点击各按钮功能正常 + - step_type: assert + description: 3. 无法选中超链接文本或普通文本 + - step_type: assert + description: 4. 弹出搜索相关的右键菜单 + - step_type: action + description: 1. 不选中,直接右击超链接文本 + - step_type: assert + description: 1. 弹出包含搜索等的菜单的右键菜单,点击各菜单功能正常 + - step_type: action + description: 1. 点击超链接弹出安全提示弹框 + - step_type: action + description: 2. 按tab键切换 + - step_type: assert + description: '1.' + - step_type: assert + description: '2.' + - step_type: action + description: 1. 在新标签页首次打开文档A + - step_type: assert + description: 1. 文档A页面视图 默认为适合页面 + - step_type: action + description: 1. 打开文档A且调整页面视图为A(适合页面) + - step_type: action + description: 2. 在新窗口打开文档B + - step_type: assert + description: 1. 调整页面视图成功 + - step_type: assert + description: 2. 新打开的文档B页面视图为A(适合页面) + - step_type: assert + description: 1. 窗口1查看文档C且调整页面视图C(200%),窗口2查看文档D且调整页面视图D(适应宽度) + - step_type: action + description: 2. 两个窗口分别在新标签页打开文档A、文档B + - step_type: assert + description: 1. 调整页面视图成功 + - step_type: assert + description: 2. 文档A页面视图为A(适合页面),文档B页面视图为B(25%) + - step_type: assert + description: 1. 窗口1查看文档C且调整页面视图C(300%),窗口2查看文档D且调整页面视图D(75%) + - step_type: action + description: 2. 分别在两个新窗口打开文档A、文档B + - step_type: assert + description: 1. 调整页面视图成功 + - step_type: assert + description: 2. 文档A页面视图为A(双页显示、默认大小),文档B页面视图为B(双页显示、500%) +- id: suite_标签页 + name: 标签页测试 + module: 标签页 + status: active + annotation: + 测试界面: 主窗口-标签页栏 + 测试功能: 标签页新建/关闭/拖拽/排列 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 打开多个标签页,查看显示 + - step_type: action + description: 2. 已打开多个标签页,添加其他标签页 + - step_type: action + description: 3. 点击左移右移按钮 + - step_type: assert + description: 1. 标签栏需全部占满,无空出区域;标签页最小140px;显示效果与设计图一致 + - step_type: assert + description: 2. 新添加的标签页高亮显示 + - step_type: assert + description: 3. 正常显示 + - step_type: assert + description: 1. 窗口中只有一个标签页,将标签页拖拽到其他应用(如:编辑器)的工具栏或正文区域,查看 + - step_type: assert + description: 2. 窗口中有多个标签页,将标签页拖拽到其他应用(如:编辑器)的工具栏区域,查看 + - step_type: assert + description: 3. 窗口中有多个标签页,将标签页拖拽到其他应用(如:编辑器)的正文区域,查看 + - step_type: assert + description: 1. 应该无法拖拽 + - step_type: assert + description: 2. 打开一个新窗口以显示此标签页 + - step_type: assert + description: 3. 打开一个新窗口以显示此标签页 + - step_type: action + description: 1. 打开文档,添加多个标签页 + - step_type: action + description: 2. 点击标题栏的x,关闭所有标签页 + - step_type: assert + description: 3. 关闭所有标签页后查看界面显示 + - step_type: assert + description: 1. 正常添加 + - step_type: assert + description: 2. 正常关闭,若有编辑内容会弹出是否保存的提示弹框 + - step_type: assert + description: '3.' + - step_type: action + description: 1. 打开多份文档文档,点击标签页右侧的+按钮 + - step_type: action + description: 2. 退出选择界面,点击标签页中X进行关闭 + - step_type: action + description: 3. 打开多份文档文档,其中一份文档A编辑后,点击标签页中X + - step_type: action + description: 4. 点击弹框中的保存 + - step_type: action + description: 5. 点击弹框中的不保存 + - step_type: assert + description: 1. 进入文件选择界面 + - step_type: assert + description: 2. 正常关闭 + - step_type: assert + description: 3. 弹出是否保存的提示弹框 + - step_type: assert + description: 4. 文档A关闭,再次打开文档A,编辑的内容正常保存 + - step_type: assert + description: 5. 文档A关闭,再次打开文档A,编辑的内容未保存 + - step_type: assert + description: 1. 单个窗口中只有一个标签页,拖拽标签页移出窗口,查看 + - step_type: assert + description: 2. 单个窗口中只有一个标签页,拖拽标签页移至所在窗口的正文区域,查看 + - step_type: action + description: 3. 单个窗口中只有一个标签页,拖拽标签页移至所在窗口内标签栏或工具栏 + - step_type: assert + description: 1. 无法拖拽,无提示弹出 + - step_type: assert + description: 2. 无法拖拽,无提示弹出 + - step_type: assert + description: 3. 无法拖拽,无提示弹出 + - step_type: action + description: 1. 打开多个标签页,点击视图调整中适合高度、适合宽度、双页、左旋转、右旋转菜单;调整百分 + - step_type: assert + description: 2. 点击切换另一个标签页,查看视图调整中菜单显示 + - step_type: assert + description: 1. 页面正常进入相应状态 + - step_type: assert + description: 2. 显示当前页的状态 + - step_type: assert + description: 1. 未打开任何文档查看器窗口时,双击一份文档,查看 + - step_type: assert + description: 2. 已打开一个文档查看器窗口,双击另一份文档并查看 + - step_type: assert + description: 3. 有多个窗口时,双击文档并查看 + - step_type: assert + description: 1. 文档在一个新窗口中打开 + - step_type: assert + description: 2. .窗口中新增标签页 + - step_type: assert + description: 3. 文档展示在最早开启的窗口中 + - step_type: action + description: 1. 只打开一个窗口并添加文档A,双击/拖拽/点击添加标签页菜单方式打开再次添加文档A至此窗口 + - step_type: assert + description: 2. 打开多个窗口,文档A已在其中一个窗口打开,双击/拖拽/点击添加标签页菜单方式打开再次拖拽文档A至任意窗口,查看 + - step_type: assert + description: 1. 无法添加相同文档,激活当前页,无提示弹出 + - step_type: assert + description: 2. 无法添加相同文档,激活当前页,无提示弹出 + - step_type: action + description: 1. 打开多个窗口,每个窗口中分别有多个标签页 + - step_type: action + description: 2. 将一个窗口标签页拖拽到另外一个窗口中任意位置 + - step_type: assert + description: 3. .当窗口A中只有一个标签页,将此标签页拖拽至其他窗口,查看 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 标签页可以正常在不同窗口之间拖拽移动,拖拽过程中鼠标显示绿色可拖拽标志 + - step_type: assert + description: 3. 窗口A自动关闭退出 + - step_type: assert + description: 1. 拖拽标签页移至另一个窗口中标签栏和文档区域,查看 + - step_type: assert + description: 2. 拖拽标签页至另一个窗口中工具栏区域或移出当前窗口,查看是否创建一个新的窗口 + - step_type: assert + description: 1. 标签页合并至另一个窗口中,拖拽过程中鼠标显示绿色可拖拽标志;拖动过程中界面显示正确 + - step_type: assert + description: 2. 正常创建一个新的窗口,拖拽过程中鼠标显示绿色可拖拽标志 + - step_type: action + description: 1. 在不同标签页中进行搜索 + - step_type: action + description: 2. 切换产生搜索结果的标签页 + - step_type: action + description: 3. 点击当前页搜索框中的关闭按钮 + - step_type: assert + description: 1. 每个标签页分别显示搜索结果, + - step_type: assert + description: 2. 每个标签页的搜索结果和搜索弹框正常显示不会被关闭 + - step_type: assert + description: 3. 仅当前页搜索结果被正常关闭,其他标签页搜索弹框和搜索结果仍正常显示 + - step_type: action + description: 1. 窗口中打开多个标签页直到超过标签栏范围,窗口界面显示 + - step_type: action + description: 2. 点击左翻按钮 + - step_type: action + description: 3. 点击右翻按钮 + - step_type: assert + description: 4. 选择首个标签页或左侧无隐藏文件时,查看左翻按钮是否置灰 + - step_type: assert + description: 5. 选择最后一个标签页右侧无隐藏文件时,查看右翻按钮是否置灰 + - step_type: assert + description: 1. 左翻箭头高亮显示,可以点击 + - step_type: assert + description: 2. 左侧隐藏的文档左移 + - step_type: assert + description: 3. 右侧隐藏的文档右移 + - step_type: assert + description: 4. 左翻按钮置灰显示 + - step_type: assert + description: 5. 右翻按钮置灰显示 + - step_type: assert + description: 1. 长按任意一个标签页拖拽,查看是否正常调整标签页排序 + - step_type: assert + description: 2. 在标签栏滚动鼠标,查看是否可以滚动切换标签页 + - step_type: action + description: 3. 点击切换标签页 + - step_type: assert + description: 1. 可以调整标签页排序 + - step_type: assert + description: 2. 可以滚动切换标签页 + - step_type: assert + description: 3. 正常切换无异常 + - step_type: action + description: 1. 点击多标签栏右侧“+”图标添加新标签页 + - step_type: action + description: 2. 从文件管理器或桌面中拖拽其他文档至窗口中 + - step_type: action + description: 3. 点击菜单中的“新标签页”菜单添加新标签页 + - step_type: action + description: 4. 双击另一份文档 + - step_type: assert + description: 5. 右击另一份文档,选择文档查看器 + - step_type: assert + description: 1. 可以在已打开的窗口中添加标签页,文档显示正常 + - step_type: assert + description: 2. 可以在已打开的窗口中添加标签页,文档显示正常 + - step_type: assert + description: 3. 可以在已打开的窗口中添加标签页,文档显示正常 + - step_type: assert + description: 4. 可以在已打开的窗口中添加标签页,文档显示正常 + - step_type: assert + description: 5. 可以在已打开的窗口中添加标签页,文档显示正常 + - step_type: assert + description: 1. 窗口中无标签页,打开文档查看器进入初始页面,从文件管理器或桌面拖拽多个文档添加 + - step_type: assert + description: 2. 窗口中无标签页,点击菜单中的“新标签页”菜单,查看是否添加新标签页 + - step_type: action + description: 3. 窗口中无标签页,双击另一份文档 + - step_type: assert + description: 4. 窗口中无标签页,右击另一份文档,选择文档查看器 + - step_type: assert + description: 1. 可以在已打开的窗口窗口中显示多个标签页,文档显示正常 + - step_type: assert + description: 2. 可以在已打开的窗口添加标签页,文档显示正常 + - step_type: assert + description: 3. 可以在已打开的窗口添加标签页,文档显示正常 + - step_type: assert + description: 4. 可以在已打开的窗口添加标签页,文档显示正常 +- id: suite_标签页_1 + name: 标签页测试 + module: 标签页 + status: active + annotation: + 测试界面: 主窗口-标签页栏 + 测试功能: 标签页新建/关闭/拖拽/排列 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 不同窗口间文档拖拽 + - step_type: action + description: 2. 窗口中拖拽添加的文档,进行视图调整操作:双页显示、适应高度、适应宽度、左旋转、右旋转 + - step_type: action + description: 3. 窗口中拖拽添加的文档,添加书签、高亮、注释 + - step_type: action + description: 4. 窗口中拖拽添加的文档,进行翻页操作 + - step_type: action + description: 5. 窗口中拖拽添加的文档,选择选择工具和手形工具拖拽文档 + - step_type: action + description: 6. 窗口中拖拽添加的文档,点击菜单中选项:新窗口、新标签页、保存、另存为、打印、幻灯片放映、放大镜、文档信息、在文件管理器中显示、主题、帮助、关于、退出 + - step_type: assert + description: 1. 正常拖拽 + - step_type: assert + description: 2. 功能正常 + - step_type: assert + description: 3. 功能正常 + - step_type: assert + description: 4. 功能正常 + - step_type: assert + description: 5. 功能正常 + - step_type: assert + description: 6. 功能正常 + - step_type: assert + description: 1. 打开文档查看器后,点击“新窗口”菜单 + - step_type: action + description: 2. 拖拽文档至新打开的窗口中 + - step_type: action + description: 3. 在新窗口中点击“选择文件”按钮打开文档 + - step_type: action + description: 4. 在新窗口中点击“新标签页”添加文档 + - step_type: action + description: 5. 关闭旧窗口,双击桌面或文件夹的一份文档 + - step_type: assert + description: 1. 打开一个新的窗口 + - step_type: assert + description: 2. 文档在新窗口中正常打开 + - step_type: assert + description: 3. 文档在新窗口中正常打开 + - step_type: assert + description: 4. 文档在新窗口中正常打开 + - step_type: assert + description: 5. 文档在新窗口中正常打开 +- id: suite_注释 + name: 注释测试 + module: 注释 + status: active + annotation: + 测试界面: 左侧栏-注释视图 + 测试功能: 注释添加/删除/编辑/跳转 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 选中一个左侧栏的注释目录,鼠标不点击移动至左边栏以外区域,按快捷键delete,查看是否正常删除 + - step_type: assert + description: 1. 可以正常删除 + - step_type: action + description: 1. 文本已添加高亮注释,重叠选中另一段文本,右击未高亮区域添加注释, + - step_type: action + description: 2. 文本已添加高亮注释,重叠选中另一段文本,右击高亮区域 + - step_type: assert + description: 1. 出现两段重叠颜色,添加另一条注释 + - step_type: assert + description: 2. 仅可修改原注释内容,无法添加注释 + - step_type: assert + description: 1. 添加高亮注释或图标注释,保存关闭文档,再进行重命名,打开查看 + - step_type: assert + description: 2. UOS系统中,文档添加高亮注释或图标注释后,发送至另一台UOS电脑,使用文档查看器应用打开查看 + - step_type: assert + description: 3. UOS系统中文档查看器,添加高亮、高亮注释和图标注释并保存,再使用wps打开此文档 + - step_type: assert + description: 4. UOS系统中文档查看器,添加高亮、高亮注释和图标注释并保存,发送至Windows/苹果电脑中,打开此文档 + - step_type: assert + description: 1. 添加的高亮或注释不会消失 + - step_type: assert + description: 2. 添加的高亮或注释不会消失 + - step_type: assert + description: 3. 添加的高亮或注释不会消失 + - step_type: assert + description: 4. 添加的高亮或注释不会消失 + - step_type: assert + description: 1. 右击左侧栏的注释目录,查看弹出的右键菜单 + - step_type: assert + description: 2. 点击复制,查看是否可以复制该条注释内容 + - step_type: assert + description: 1. 显示菜单:复制、删除注释、删除所有注释 + - step_type: assert + description: 2. 可以复制该条注释内容 + - step_type: assert + description: 1. 点击左边栏任意一个注释,查看是否跳转到该页相应注释内容处 + - step_type: assert + description: 1. 正确跳转到该页相应注释内容处,注释目录与文档注释页面同步展示 + - step_type: action + description: 1. 不同页面添加注释 + - step_type: action + description: 2. 同一页面添加注释 + - step_type: assert + description: 1. 按照页面顺序展示,页面靠前则该页面的注释目录靠前 + - step_type: assert + description: 2. 同一页面按时间先后顺序显示 + - step_type: assert + description: 1. 添加图标注释和高亮注释,查看左边栏注释目录显示 + - step_type: assert + description: '1.0' + - step_type: action + description: 1. 右击高亮注释文本,选择右键菜单中的取消高亮进行删除 + - step_type: action + description: 2. 点击高亮注释文本,弹出小窗口,删除窗口所有内容,点击窗口的x或窗口之外区域 + - step_type: action + description: 3. 右击缩略图_注释,选择删除菜单 + - step_type: action + description: 4. 单击缩略图_注释,按delete快捷键进行删除 + - step_type: assert + description: 1. 可以正常删除注释,左边栏缩略图_注释同步被删除 + - step_type: assert + description: 2. 可以正常删除注释,左边栏缩略图_注释同步被删除 + - step_type: assert + description: 3. 可以正常删除注释,左边栏缩略图_注释同步被删除 + - step_type: assert + description: 4. 可以正常删除注释,左边栏缩略图_注释同步被删除 + - step_type: action + description: 1. 右击注释小图标,选择右键菜单中的删除注释进行删除 + - step_type: action + description: 2. 点击注释小图标,弹出小窗口,删除窗口所有内容,点击窗口的x或窗口之外区域 + - step_type: action + description: 3. 右击缩略图_注释,选择删除菜单 + - step_type: action + description: 4. 单击缩略图_注释,按delete快捷键进行删除 + - step_type: assert + description: 1. 可以正常删除注释,左边栏缩略图_注释同步被删除 + - step_type: assert + description: 2. 可以正常删除注释,左边栏缩略图_注释同步被删除 + - step_type: assert + description: 3. 可以正常删除注释,左边栏缩略图_注释同步被删除 + - step_type: assert + description: 4. 可以正常删除注释,左边栏缩略图_注释同步被删除 + - step_type: assert + description: 1. 添加高亮注释后,查看左边栏是否对应添加注释目录 + - step_type: assert + description: 1. 左边栏是否对应添加注释目录 + - step_type: action + description: 1. 鼠标悬停在高亮注释上,浮窗显示部分注释文案 + - step_type: assert + description: 2. 滚动滑鼠或按键盘上下键查看是否可以滑动浮窗中内容 + - step_type: assert + description: 1. 浮框显示部分注释文案 + - step_type: assert + description: 2. 浮窗中内容无法滑动 + - step_type: action + description: 1. 右键点击高亮注释文本 + - step_type: action + description: 2. 选中高亮文本,点击右键菜单中复制 + - step_type: action + description: 3. 直接右击高亮文本,点击菜单中复制 + - step_type: assert + description: 1. 显示右键菜单:复制,高亮,取消高亮,添加注释,添加书签 + - step_type: assert + description: 2. 可以正确复制选中的文本 + - step_type: assert + description: 3. 可以正确复制注释内容 + - step_type: action + description: 1. 单击高亮注释 + - step_type: action + description: 2. 编辑修改输入框中内容 + - step_type: assert + description: 3. 鼠标左击或右击注释框外其他区域,查看 + - step_type: assert + description: 1. 显示注释输入框,输入光标显示在内容后方 + - step_type: assert + description: 2. 可以修改 + - step_type: assert + description: 3. 注释框关闭,注释编辑成功 + - step_type: action + description: 1. 编辑注释界面,鼠标滑动注释小窗口中内容 + - step_type: assert + description: 1. 可以滑动 + - step_type: action + description: 1. 右击高亮注释,弹出右键菜单;鼠标左键点击其他区域 + - step_type: action + description: 2. 右击高亮注释,弹出右键菜单;鼠标右键点击其他区域 + - step_type: assert + description: 1. 右键菜单框消失 + - step_type: assert + description: 2. 右键菜单框消失 +- id: suite_注释_1 + name: 注释测试 + module: 注释 + status: active + annotation: + 测试界面: 左侧栏-注释视图 + 测试功能: 注释添加/删除/编辑/跳转 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 选中一段文本并右击弹出右键菜单,点击“添加注释” + - step_type: assert + description: 2. 注释输入窗口,输入内容,查看是否可以自动换行 + - step_type: assert + description: 3. 注释输入窗口,查看是否支持滚动或按上下键、pageup、pagedown查看全部信息 + - step_type: assert + description: 4. 当输入框内容输入超过1500字符(中文或英文)限制,查看是否弹出提示 + - step_type: assert + description: 1. 弹出注释小窗口,固定显示在点击位置 + - step_type: assert + description: 2. 可以自动换行 + - step_type: assert + description: 3. 支持滚动或按键查看全部信息 + - step_type: assert + description: 4. 正确弹出提示:输入已达上限 + - step_type: assert + description: 1. 每个注释小图标添加后,查看左边栏是否对应添加注释目录 + - step_type: assert + description: 1. 左边栏对应添加注释目录 + - step_type: assert + description: 1. 鼠标悬停在注释图标上,查看显示 + - step_type: assert + description: 2. 滚动滑鼠或按键盘上下键查看是否可以滑动浮窗中内容 + - step_type: assert + description: 1. 浮框显示部分注释文案 + - step_type: assert + description: 2. 浮窗中内容无法滑动 + - step_type: action + description: 1. 右键点击已添加的注释小图标 + - step_type: assert + description: 2. 点击复制菜单并粘贴至txt等文档中,查看 + - step_type: assert + description: 3. 点击添加注释菜单,查看 + - step_type: assert + description: 4. 点击删除注释菜单,查看 + - step_type: assert + description: 5. 点击添加书签菜单,查看 + - step_type: assert + description: 1. 显示右键菜单:复制,删除注释,添加注释,添加书签 + - step_type: assert + description: 2. 注释内容被正确复制 + - step_type: assert + description: 3. 展开注释窗口,可以进行注释编辑 + - step_type: assert + description: 4. 注释小图标被正确删除 + - step_type: assert + description: 5. 当前页面正确添加为书签页 + - step_type: assert + description: 1. 注释添加完成后,鼠标左键单击注释图标,查看显示 + - step_type: action + description: 2. 编辑注释内容 + - step_type: assert + description: 3. 鼠标左击其他区域(非注释图标和注释框),查看 + - step_type: assert + description: 4. 左击注释图标,查看 + - step_type: action + description: 5. 编辑注释内容 + - step_type: assert + description: 6. 鼠标右击其他区域(非注释图标和注释框),查看 + - step_type: assert + description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 + - step_type: assert + description: 2. 可以正常修改 + - step_type: assert + description: 3. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 + - step_type: assert + description: 4. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 + - step_type: assert + description: 5. 可以正常修改 + - step_type: assert + description: 6. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 + - step_type: action + description: 1. 右击注释图标,弹出右键菜单;鼠标左键点击其他区域 + - step_type: action + description: 2. 右击注释图标,弹出右键菜单;鼠标右键点击其他区域 + - step_type: assert + description: 1. 右键菜单框消失 + - step_type: assert + description: 2. 右键菜单框消失 + - step_type: action + description: 1. 点击“添加注释”,再点击文档界面,展开空白小窗口,不输入内容,直接点击右上角关闭图标或文档中其他位置 + - step_type: assert + description: 1. 注释自动取消; + - step_type: assert + description: 1. 点击“添加注释”,鼠标移至页面单击任意位置,查看弹出显示 + - step_type: assert + description: 2. 注释输入窗口,输入内容,查看是否可以自动换行 + - step_type: assert + description: 3. 注释输入窗口,查看是否支持滚动或按上下键、pageup、pagedown查看全部信息 + - step_type: assert + description: 4. 当输入框内容输入超过1500字符(中文或英文)限制,查看是否弹出提示 + - step_type: assert + description: 1. 弹出注释小图标和小窗口,均固定显示在点击位置 + - step_type: assert + description: 2. 可以自动换行 + - step_type: assert + description: 3. 支持滚动或按键查看全部信息 + - step_type: assert + description: 4. 正确弹出提示:输入已达上限 + - step_type: assert + description: 1. 选中文本,右键点击在文字上,点击右键菜单的“添加注释”,查看是否弹出高亮注释窗口 + - step_type: assert + description: 1. 弹出高亮注释窗口,可以添加高亮注释成功 + - step_type: assert + description: 1. 未选中文本,点击左边栏添加注释按钮,点击页面区域任意位置,查看是否弹出图标注释窗口 + - step_type: action + description: 2. 输入注释内容,点击窗口外其他区域 + - step_type: assert + description: 3. 未选中文本,右键点击在非图标注释及非高亮注释的空白区域,点击右键菜单的“添加注释”,查看是否弹出图标注释窗口 + - step_type: action + description: 4. 输入注释内容,点击窗口外其他区域 + - step_type: assert + description: 1. 弹出图标注释窗口 + - step_type: assert + description: 2. 窗口关闭,图标注释正常显示,图标注释添加成功 + - step_type: assert + description: 3. 弹出图标注释窗口 + - step_type: assert + description: 4. 窗口关闭,图标注释正常显示,图标注释添加成功 + - step_type: assert + description: 1. 打开文档,添加一个书签,右击底部注释目录图标,查看菜单显示 + - step_type: assert + description: 2. 点击“删除所有注释”菜单,查看弹出的提示 + - step_type: action + description: 3. 点击提示框中的取消 + - step_type: action + description: 4. 点击提示框中的确定 + - step_type: action + description: 5. 弹框弹出时,点击应用中其他菜单 + - step_type: assert + description: 1. 显示“删除注释”和“删除所有注释”菜单 + - step_type: assert + description: 2. 弹出提示:您确定要删除所有注释吗? + - step_type: assert + description: 3. 弹框关闭,所有注释均不会被删除 + - step_type: assert + description: 4. 弹框关闭,所有注释被删除 + - step_type: assert + description: 5. 其他菜单点击均无作用 + - step_type: assert + description: 1. 鼠标左键单击注释图标,查看显示 + - step_type: action + description: 2. 编辑注释内容 + - step_type: assert + description: 3. 鼠标左击其他区域(非注释图标和注释框),查看 + - step_type: assert + description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 + - step_type: assert + description: 2. 可以正常修改 + - step_type: assert + description: 3. 注释框消失,注释内容编辑成功,注释图标选中状态被取消 + - step_type: assert + description: 1. 左击注释图标,查看 + - step_type: action + description: 2. 编辑注释内容 + - step_type: assert + description: 3. 鼠标右击其他区域(非注释图标和注释框),查看 + - step_type: assert + description: 1. 图标为选中状态,同时弹出注释框,输入光标显示在注释内容后方 + - step_type: assert + description: 2. 可以正常修改 + - step_type: assert + description: 3. 注释框消失,注释图标选中状态被取消,注释内容编辑成功 + - step_type: action + description: 1. 非选中图标状态,鼠标左键长按注释图标移动 + - step_type: action + description: 2. 移动到目标区域,松开鼠标 + - step_type: action + description: 3. 鼠标左键点击其他区域(非注释图标和注释框) + - step_type: assert + description: 1. 注释图标变成选中状态,可以移动 + - step_type: assert + description: 2. 松开鼠标完成移动,注释图标显示为选中状态 + - step_type: assert + description: 3. 取消注释图标选中状态; + - step_type: action + description: 1. 选中图标状态,鼠标左键长按注释图标移动 + - step_type: action + description: 2. 移动到目标区域,松开鼠标 + - step_type: action + description: 3. 鼠标左键点击其他区域(非注释图标和注释框) + - step_type: assert + description: 1. 注释图标保持选中状态,可以移动 + - step_type: assert + description: 2. 松开鼠标完成移动,注释图标显示为选中状态 + - step_type: assert + description: 3. 注释图标选中状态吧被取消 +- id: suite_注释_2 + name: 注释测试 + module: 注释 + status: active + annotation: + 测试界面: 左侧栏-注释视图 + 测试功能: 注释添加/删除/编辑/跳转 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 鼠标焦点在注释图标区域外,进行移动 + - step_type: assert + description: 1. 无法移动注释图标 + - step_type: action + description: 1. 按住鼠标左键移动注释图标至其他页面 + - step_type: assert + description: 1. 无法移动至其他页面,仅支持在当前页移动 + - step_type: assert + description: 1. 右击注释图标,查看 + - step_type: action + description: 2. 鼠标左键点击其他区域 + - step_type: action + description: 3. 右击注释图标弹出右键菜单,鼠标右键点击其他区域 + - step_type: assert + description: 1. 弹出右键菜单 + - step_type: assert + description: 2. 右键菜单框消失 + - step_type: assert + description: 3. 右键菜单框消失 + - step_type: action + description: 1. 弹出注释编辑窗口,输入内容 + - step_type: action + description: 2. 按Ctrl+A快捷键 + - step_type: action + description: 3. 按Ctrl+C快捷键 + - step_type: action + description: 4. 按Ctrl+V快捷键 + - step_type: action + description: 5. 按Ctrl+X快捷键 + - step_type: action + description: 6. 按Ctrl+Z快捷键 + - step_type: action + description: 7. 按Ctrl+S快捷键 + - step_type: action + description: 8. 按delete快捷键 + - step_type: assert + description: 1. 内容正常显示 + - step_type: assert + description: 2. 全选内容 + - step_type: assert + description: 3. 复制内容 + - step_type: assert + description: 4. 粘贴内容 + - step_type: assert + description: 5. 剪切内容 + - step_type: assert + description: 6. 撤销操作 + - step_type: assert + description: 7. 保存内容 + - step_type: assert + description: 8. 删除选中的内容 + - step_type: action + description: 1. 鼠标悬停在图标注释或高亮注释之上 + - step_type: assert + description: 2. 按快捷键Windows+D进入桌面查看 + - step_type: action + description: 3. 鼠标悬停在图标注释或高亮注释之上 + - step_type: action + description: 4. 鼠标移出注释区域 + - step_type: assert + description: 1. 注释浮窗显示 + - step_type: assert + description: 2. 应用最小化,浮窗不会单独显示桌面 + - step_type: assert + description: 3. 注释浮窗显示注释浮窗显示 + - step_type: assert + description: 4. 注释浮窗应该消失 + - step_type: action + description: 1. 添加多个注释 + - step_type: assert + description: 2. 选择一个注释目录,按键盘上下键/pageup、pagedown,查看 + - step_type: action + description: 3. 双页显示时,添加多个注释 + - step_type: assert + description: 4. 选择一个注释目录,按键盘上下键/pageup、pagedown,查看 + - step_type: assert + description: 1. 展开左边栏,显示多个注释目录 + - step_type: assert + description: 2. 切换正常,右侧文档对应跳转 + - step_type: assert + description: 3. 展开左边栏,显示多个注释目录 + - step_type: assert + description: 4. 切换正常,右侧文档对应跳转 + - step_type: action + description: 1. 打开文档,分别添加高亮注释和图标注释,输入注释内容均达到上限1500字 + - step_type: action + description: 2. 按快捷键Ctrl+S保存 + - step_type: action + description: 3. 关闭文档,再打开 + - step_type: assert + description: 1. 添加成功 + - step_type: assert + description: 2. 弹出“保存成功”提示 + - step_type: assert + description: 3. 高亮注释和图标注释显示正确 +- id: suite_目录 + name: 目录测试 + module: 目录 + status: active + annotation: + 测试界面: 左侧栏-目录视图 + 测试功能: 文档目录显示与跳转 + 前置条件: 应用已启动,已打开文档 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 进入左边栏目录界面,点击选中目录索引,查看右侧文档显示 + - step_type: assert + description: 2. 进入左边栏目录界面,按键盘上下键/pageup/pagedown切换目录选中,查看右侧文档页面显示 + - step_type: assert + description: 3. 改变右侧文档当前所在页数,查看左边栏目录显示 + - step_type: assert + description: 1. 右侧文档跳转至当前所选目录索引页,且显示为第一行;左侧目录点击后正常高亮显示,不会出现高亮定位不准现象 + - step_type: assert + description: 2. 右侧文档跳转至当前所选目录索引页,且显示为第一行;左侧目录点击后正常高亮显示,不会出现高亮定位不准现象 + - step_type: assert + description: 3. 目录会对应高亮显示 + - step_type: assert + description: 1. 打开文档,查看目录默认展示方式 + - step_type: assert + description: 2. 展开层级索引后关闭再打开文档,查看目录展示方式 + - step_type: assert + description: 1. 默认展示为收起状态,展示一级目录 + - step_type: assert + description: 2. 恢复默认状态 + - step_type: assert + description: 1. 调整左边栏宽度,查看目录显示 + - step_type: action + description: 2. 点击收起及展开目录层级索引 + - step_type: assert + description: 1. 目录显示内容相应调整,超出省略,不省略页数 + - step_type: assert + description: 2. 可以正常收起及展开目录层级索引,最多显示三级 + - step_type: action + description: 1. 点击左边栏底部目录图标 + - step_type: assert + description: 2. 查看目录显示 + - step_type: assert + description: 1. 左边栏显示文档目录 + - step_type: assert + description: '2.' + - step_type: assert + description: 1. 打开一份不可读取页数的文档,查看输入框一行的显示 + - step_type: assert + description: 2. 输入框中输入页码(包括数字和字母),查看是否正常跳转 + - step_type: assert + description: 3. 输入非有效内容,查看提示 + - step_type: action + description: 4. 点击页数右侧的上翻、下翻按钮 + - step_type: assert + description: 1. 显示为:输入框和文档总页数;文档翻页时页数显示正确 + - step_type: assert + description: 2. 跳转至对应页面 + - step_type: assert + description: 3. 提示“请输入有效页码” + - step_type: assert + description: 4. 点击上翻按钮,页数上翻;点击下翻按钮,页数下翻 + - step_type: assert + description: 1. 打开一份可读取页数的文档,查看输入框一行的显示 + - step_type: assert + description: 2. 输入框中输入页码(包括数字和字母),查看是否正常跳转 + - step_type: assert + description: 3. 输入任意非有效内容,查看提示 + - step_type: action + description: 4. 点击页数右侧的上翻、下翻按钮 + - step_type: assert + description: 1. 显示为:输入框、默认计算页数和文档总页数;文档翻页时页数显示正确 + - step_type: assert + description: 2. 跳转至对应页面 + - step_type: assert + description: 3. 提示“请输入有效页码” + - step_type: assert + description: 4. 点击上翻按钮,页数上翻;点击下翻按钮,页数下翻 + - step_type: action + description: 1. 打开有目录的文档,点击正文的目录 + - step_type: action + description: 2. 文档左旋转,点击正文的目录 + - step_type: action + description: 3. 文档右旋转,点击正文的目录 + - step_type: action + description: 4. 文档旋转180度后,击右侧正文的目录 + - step_type: assert + description: 1. 跳转至相应文档内容处 + - step_type: assert + description: 2. 跳转至相应文档内容处 + - step_type: assert + description: 3. 跳转至相应文档内容处 + - step_type: assert + description: 4. 跳转至相应文档内容处 +- id: suite_社区需求 + name: 社区需求测试 + module: 社区需求 + status: active + annotation: + 测试界面: 主窗口-社区需求 + 测试功能: 幻灯片/UI显示等社区需求 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 在任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 进入幻灯片播放,播放内容不会进行拉伸,顶格展示 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 菜单栏显示 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放,播放内容不会进行拉伸,顶格展示 + - step_type: assert + description: 3. 鼠标不在菜单栏上,3秒自动隐藏(鼠标在菜单栏上,一直显示不隐藏) + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 幻灯片默认暂停播放 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 鼠标左击点击幻灯片任意位置 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. 切换到下一页 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 点击方向键下键或者右键 + - step_type: action + description: 4. 点击方向键上键或者左键 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. 切换到下一页 + - step_type: assert + description: 4. 切换到上一页 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 点击菜单键中播放按钮 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. 按钮状态变成暂停,幻灯片开始播放 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 手动点击到最后一页幻灯片 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. toast提示“已是最后一页”3秒消失,向后按钮置灰 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 播放到最后一页点击往下翻时 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. toast提示“已是第一页”3秒后小时,向后按钮置灰 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 自动播放时,播放到最后一页时,自动暂停 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. 菜单键中暂停按钮变成播放按钮,再次点击播放从第一页开始播放 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 播放到最后一页滚轮向下滚动 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. toast提示“已是最后一页”3秒后小时,向后按钮置灰 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 播放到最后一页键盘点击下键或右键 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. toast提示“已是最后一页”3秒后小时,向后按钮置灰 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 点击自动播放按钮 + - step_type: action + description: 4. 点击方向键下键或者右键 + - step_type: action + description: 5. 点击方向键上键或者左键 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. 幻灯片开始播放 + - step_type: assert + description: 4. 切换到下一页 + - step_type: assert + description: 5. 切换到上一页 + - step_type: action + description: 1. 依次在PDF,DJVU,DOCX任意位置右击 + - step_type: action + description: 2. 点击幻灯片放映 + - step_type: action + description: 3. 点击自动播放按钮 + - step_type: action + description: 4. 鼠标滚轮上下滚动 + - step_type: assert + description: 1. 弹框展示 + - step_type: assert + description: 2. 进入幻灯片播放界面 + - step_type: assert + description: 3. 幻灯片开始播放 + - step_type: assert + description: 4. 切换到上一页/下一页 +- id: suite_窗口管理 + name: 窗口管理测试 + module: 窗口管理 + status: active + annotation: + 测试界面: 主窗口-窗口管理 + 测试功能: 窗口大小变化/最小尺寸/显示模式 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 调整窗口大小,查看界面显示 + - step_type: assert + description: 2. 手动拖拽目录边框,查看界面显示 + - step_type: assert + description: 1. 左边栏区域和右侧文档区域始终保持约1:3的比例变化,左边栏文档、书签、注释、搜索结果缩略图大小跟随变化,左边栏宽度范围:266px~380px + - step_type: assert + description: 2. 左边栏文档、书签、注释、搜索结果缩略图大小跟随变化,左边栏宽度范围:266px~380px + - step_type: assert + description: 1. 检查窗口尺寸 + - step_type: assert + description: 2. 打开新窗口,检查新窗口尺寸 + - step_type: assert + description: 3. 检查各个子页面 + - step_type: assert + description: 1. 应用窗口尺寸680*300 + - step_type: assert + description: 2. 新窗口尺寸为默认尺寸 + - step_type: assert + description: 3. 无遮挡、无压缩变形 + - step_type: action + description: 1. 窗口最大化之后再点击最小化按钮 + - step_type: assert + description: 1. 窗口尺寸为最小窗口680*300 + - step_type: action + description: 1. 关闭后再次打开应用 + - step_type: assert + description: 1. 窗口尺寸为最小窗口680*300 +- id: suite_缩略图 + name: 缩略图测试 + module: 缩略图 + status: active + annotation: + 测试界面: 左侧栏-缩略图视图 + 测试功能: 文档缩略图显示与切换 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 展开左边栏,查看左边栏界面显示 + - step_type: assert + description: 2. 点击缩略图图标查看左边栏界面显示 + - step_type: assert + description: 3. 点击目录图标查看左边栏界面显示 + - step_type: assert + description: 4. 点击书签图标查看左边栏界面显示 + - step_type: assert + description: 5. 点击注释图标查看左边栏界面显示 + - step_type: assert + description: 1. 底部显示4个按钮:缩略图图标、目录图标、书签图标、注释图标;界面显示正常 + - step_type: assert + description: 2. 显示页数输入框、总页数,上下翻页按钮;输入页数正确跳转,上下翻页正常;左边栏宽度范围在266px~380px之间,界面显示正常 + - step_type: assert + description: 3. 显示目录界面,无目录文档则显示空白;界面显示正常 + - step_type: assert + description: 4. 显示添加书签按钮,点击可将当前浏览页面添加书签;界面显示正常 + - step_type: assert + description: 5. .显示添加注释按钮,点击添加注释按钮再点击文档任意位置,可弹出添加注释小窗口界面;界面显示正常 + - step_type: assert + description: 1. 打开文档,查看文档缩略图默认显示内容 + - step_type: assert + description: 2. 文档中添加高亮、书签、注释,查看左边栏文档缩略图中是否显示 + - step_type: assert + description: 3. 删除高亮、书签、注释,查看左边栏文档缩略图中是否显示 + - step_type: assert + description: 1. 显示所有页面缩略图 + - step_type: assert + description: 2. 文档缩略图中正常显示高亮、书签图标、注释图标 + - step_type: assert + description: 3. 删除的高亮、书签图标、注释图标,文档缩略图也会删除 + - step_type: assert + description: 1. 点击左边栏任意一个文档缩略图标,查看右侧文档是否跳转到相应页面 + - step_type: assert + description: 2. 左边栏页面超过一页时,滑动鼠标中间滑轮,查看页面是否正常滑动显示 + - step_type: assert + description: 1. 右侧文档是否跳转到相应页面 + - step_type: assert + description: 2. 页面是否正常滑动显示 + - step_type: assert + description: 1. 点击顶端工具栏中缩略图标,查看界面显示 + - step_type: assert + description: 2. 分别点击目录图标、书签图标和注释图标,查看界面显示 + - step_type: action + description: 3. 再次点击顶端工具栏中缩略图标 + - step_type: assert + description: 1. 左边栏底部显示四个图标:缩略图图标、目录图标、书签图标和注释图标 + - step_type: assert + description: 2. 左边栏显示相应缩略图页面,页面显示正常 + - step_type: assert + description: 3. 会取消高亮,隐藏左边栏和缩略图内容 +- id: suite_触摸屏 + name: 触摸屏测试 + module: 触摸屏 + status: active + annotation: + 测试界面: 主窗口-触摸屏交互 + 测试功能: 触摸屏手势操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 打开多份文档,单击工具栏菜单按钮 + - step_type: assert + description: 1. 功能正常 + - step_type: action + description: 1. 展开左侧栏,单击选择书签、目录、缩略图、注释功能 + - step_type: action + description: 2. 展开左侧栏,单击选择任意缩略图 + - step_type: assert + description: 1. 可以正常选择切换 + - step_type: assert + description: 2. 可以正常选择切换 + - step_type: action + description: 1. 单击放大缩小下拉框,选中视图方式 + - step_type: assert + description: 1. 可以正常选择切换 + - step_type: action + description: 1. 单击+按钮增加标签页 + - step_type: action + description: 2. 点击标签页切换显示 + - step_type: assert + description: 1. 进入文件管理选择界面 + - step_type: assert + description: 2. 可以切换显示 + - step_type: action + description: 1. 应用工具栏单指双击 + - step_type: action + description: 2. 再次双击 + - step_type: assert + description: 1. 窗口最大化 + - step_type: assert + description: 2. 恢复原来窗口大小 + - step_type: action + description: 1. 鼠标点击窗口的工具栏和左侧栏底部工具栏区域,不抬起手指,在屏幕上移动 + - step_type: assert + description: 1. 可以移动窗口的位置 + - step_type: action + description: 1. 文件夹中有多份文档,单指拖拽批量文件到应用内 + - step_type: assert + description: 1. 应用中打开多个标签页 + - step_type: action + description: 1. 单指拖拽应用边角任意位置 + - step_type: assert + description: 1. 可拉伸窗口大小 +- id: suite_触摸板 + name: 触摸板测试 + module: 触摸板 + status: active + annotation: + 测试界面: 主窗口-触摸板交互 + 测试功能: 触摸板手势操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 打开多份文档,单击工具栏菜单按钮 + - step_type: assert + description: 1. 功能正常 + - step_type: action + description: 1. 展开左侧栏,单击选择书签、目录、缩略图、注释功能 + - step_type: action + description: 2. 展开左侧栏,单击选择任意缩略图 + - step_type: assert + description: 1. 可以正常选择切换 + - step_type: assert + description: 2. 可以正常选择切换 + - step_type: action + description: 1. 单击放大缩小下拉框,选中视图方式 + - step_type: assert + description: 1. 可以正常选择切换 + - step_type: action + description: 1. 单击+按钮增加标签页 + - step_type: action + description: 2. 点击标签页切换显示 + - step_type: assert + description: 1. 进入文件管理选择界面 + - step_type: assert + description: 2. 可以切换显示 + - step_type: action + description: 1. 应用工具栏一指双击 + - step_type: action + description: 2. 再次双击 + - step_type: assert + description: 1. 窗口最大化 + - step_type: assert + description: 2. 恢复原来窗口大小 +- id: suite_键盘交互 + name: 键盘交互测试 + module: 键盘交互 + status: active + annotation: + 测试界面: 主窗口-键盘交互 + 测试功能: Tab切换/快捷键操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: assert + description: 1. 打开文档查看器进入首页界面,按tab键查看菜单按钮切换顺序 + - step_type: action + description: 2. 按enter或空格键 + - step_type: action + description: 3. 主菜单弹出后按enter或空格键和上下方向键 + - step_type: action + description: 4. 主菜单弹出后按左右方向键 + - step_type: action + description: 5. 主菜单弹出后按esc键交互操作 + - step_type: assert + description: 1. 依次选中主菜单、最小化、最大化、选择文件按钮,focus效果正确 + - step_type: assert + description: 2. 执行选择 + - step_type: assert + description: 3. 切换和执行选择 + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + - step_type: assert + description: 5. 退出菜单,返回到主菜单按钮的选中 + - step_type: action + description: 1. 打开单个文档,未展开左侧栏,按tab键 + - step_type: action + description: 2. 按enter或空格键 + - step_type: assert + description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换,focus效果正确 + - step_type: assert + description: 2. 执行选择 + - step_type: action + description: 1. 打开单个文档,展开左侧栏,按tab键 + - step_type: action + description: 2. 按enter或空格键 + - step_type: assert + description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换,focus效果正确 + - step_type: assert + description: 2. 执行选择 + - step_type: action + description: 1. 打开多个文档,未展开左侧栏,按tab键 + - step_type: action + description: 2. 按enter或空格键 + - step_type: assert + description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换 + - step_type: assert + description: 2. 执行选择 + - step_type: action + description: 1. 打开多个文档,展开左侧栏,按tab键 + - step_type: action + description: 2. 按enter或空格键 + - step_type: assert + description: 1. 焦点从工具栏开始,从上至下,从左至右依次切换 + - step_type: assert + description: 2. 执行选择 + - step_type: action + description: 1. tab键选中百分比输入框的下拉按钮,按enter或空格键 + - step_type: action + description: 2. 按上下方向键 + - step_type: action + description: 3. 按enter或空格键 + - step_type: action + description: 4. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 下拉菜单界面弹出 + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + - step_type: assert + description: 3. 执行选择 + - step_type: assert + description: 4. 退出菜单,返回到百分比输入框的选中 + - step_type: action + description: 1. tab键选中主菜单,按enter或空格键 + - step_type: action + description: 2. 按上下方向键 + - step_type: action + description: 3. 按enter或空格键 + - step_type: action + description: 4. 按左右方向键 + - step_type: action + description: 5. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 下拉菜单界面弹出 + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + - step_type: assert + description: 3. 执行选择 + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + - step_type: assert + description: 5. 退出菜单,返回到主菜单按钮的选中 + - step_type: action + description: 1. 右击主视图界面 + - step_type: action + description: 2. 按上下方向键 + - step_type: action + description: 3. 按enter或空格键 + - step_type: action + description: 4. 按左右方向键 + - step_type: action + description: 5. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 弹出右键菜单 + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + - step_type: assert + description: 3. 执行选择 + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + - step_type: assert + description: 5. 退出菜单,返回到百分比输入框的选中 + - step_type: action + description: 1. 文档缩略图界面,按上下方向键或pageup、pagedown + - step_type: action + description: 2. 目录界面,按上下方向键或pageup、pagedown + - step_type: action + description: 3. 书签目录界面,按上下方向键或pageup、pagedown,delete键 + - step_type: action + description: 4. 注释目录界面,按上下方向键或pageup、pagedown,delete键 + - step_type: assert + description: 1. 正确切换 + - step_type: assert + description: 2. 正确切换 + - step_type: assert + description: 3. 正确切换,正常删除 + - step_type: assert + description: 4. 正确切换,正常删除 + - step_type: action + description: 1. 选中文本,按Alt+M键 + - step_type: action + description: 2. 按上下方向键 + - step_type: action + description: 3. 按enter或空格键 + - step_type: action + description: 4. 按左右方向键 + - step_type: action + description: 5. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 弹出右键菜单 + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + - step_type: assert + description: 3. 执行选择 + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + - step_type: assert + description: 5. 退出菜单,文本仍是选中状态 + - step_type: action + description: 1. 选中一个书签目录,按Alt+M键 + - step_type: action + description: 2. 按上下方向键 + - step_type: action + description: 3. 按enter或空格键 + - step_type: action + description: 4. 按左右方向键 + - step_type: action + description: 5. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 弹出右键菜单 + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + - step_type: assert + description: 3. 执行选择 + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + - step_type: assert + description: 5. 退出菜单,书签目录仍是选中状态 + - step_type: action + description: 1. 选中一个注释目录,按Alt+M键 + - step_type: action + description: 2. 按上下方向键 + - step_type: action + description: 3. 按enter或空格键 + - step_type: action + description: 4. 按左右方向键 + - step_type: action + description: 5. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 弹出右键菜单 + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + - step_type: assert + description: 3. 执行选择 + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + - step_type: assert + description: 5. 退出菜单,注释目录仍是选中状态 + - step_type: action + description: 1. 选中输入框内容,按Alt+M键 + - step_type: action + description: 2. 按上下方向键 + - step_type: action + description: 3. 按enter或空格键 + - step_type: action + description: 4. 按左右方向键 + - step_type: action + description: 5. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 弹出右键菜单 + - step_type: assert + description: 2. 切换选中菜单,选中效果正确 + - step_type: assert + description: 3. 执行选择 + - step_type: assert + description: 4. 按左方向键收起子菜单,按右方向键展开子菜单 + - step_type: assert + description: 5. 退出菜单,注释目录仍是选中状态 + - step_type: action + description: 1. 点击“删除全部书签” + - step_type: action + description: 2. 对话框界面按tab键切换 + - step_type: action + description: 3. 按回车键 + - step_type: action + description: 4. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 弹出对话框界面 + - step_type: assert + description: 2. 可以在对话框界面循环切换,focus效果正确 + - step_type: assert + description: 3. 执行选中的按钮 + - step_type: assert + description: 4. 关闭对话框,焦点返回至选中的书签目录 + - step_type: action + description: 1. 点击“删除全部注释” + - step_type: action + description: 2. 对话框界面按tab键切换 + - step_type: action + description: 3. 按回车键 + - step_type: action + description: 4. 选中任意菜单时按esc键 + - step_type: assert + description: 1. 弹出对话框界面 + - step_type: assert + description: 2. 可以在对话框界面循环切换,focus效果正确 + - step_type: assert + description: 3. 执行选中的按钮 + - step_type: assert + description: 4. 关闭对话框,焦点返回至选中的注释目录 +- id: suite_键盘交互_1 + name: 键盘交互测试 + module: 键盘交互 + status: active + annotation: + 测试界面: 主窗口-键盘交互 + 测试功能: Tab切换/快捷键操作 + 前置条件: 应用已启动 + AT元素引用: + - PagingWidget + - SideBarImageListView + - BrowserMenu + steps: + - step_type: action + description: 1. 编辑文档后关闭或退出 + - step_type: action + description: 2. 对话框界面按tab键切换 + - step_type: action + description: 3. 按回车键 + - step_type: action + description: 4. 选中任意按钮时按esc键 + - step_type: assert + description: 1. 弹出是否保存对话框 + - step_type: assert + description: 2. 可以在对话框界面循环切换,focus效果正确 + - step_type: assert + description: 3. 执行选中的按钮 + - step_type: assert + description: 4. 关闭对话框 + - step_type: action + description: 1. 不改变文件名保存替换 + - step_type: action + description: 2. 对话框界面按tab键切换 + - step_type: action + description: 3. 按回车键 + - step_type: action + description: 4. 选中任意按钮时按esc键 + - step_type: assert + description: '1.' + - step_type: assert + description: 2. 可以在对话框界面循环切换,focus效果正确 + - step_type: assert + description: 3. 执行选中的按钮 + - step_type: assert + description: 4. 关闭对话框 + - step_type: action + description: 1. 搜索框弹出,按tab键切换 + - step_type: action + description: 2. focus每个按钮时分别按回车键 + - step_type: assert + description: 1. 正常切换,focus效果正确 + - step_type: assert + description: 2. 执行选中的按钮 + - step_type: action + description: 1. 文档信息界面弹出,按tab键切换 + - step_type: action + description: 2. 按回车键 + - step_type: action + description: 3. 选中任意按钮时按esc键 + - step_type: assert + description: 1. 选中关闭按钮,focus效果正确 + - step_type: assert + description: 2. 执行选中的按钮 + - step_type: assert + description: 3. 退出文档信息界面 + - step_type: action + description: 1. 在文件管理器显示弹出,按tab键切换 + - step_type: action + description: 2. 按回车键 + - step_type: assert + description: 1. 循环切换,focus效果正确 + - step_type: assert + description: 2. 执行选中的按钮 + - step_type: action + description: 1. 文档信息界面弹出,按tab键切换 + - step_type: action + description: 2. 按回车键 + - step_type: action + description: 3. 选中任意按钮时按esc键 + - step_type: assert + description: 1. 选中关闭按钮,focus效果正确 + - step_type: assert + description: 2. 执行选中的按钮 + - step_type: assert + description: 3. 退出关于界面 + - step_type: action + description: 1. 百分比框输入数值,按键盘enter键 + - step_type: action + description: 2. 页码框输入数值,按键盘enter键 + - step_type: assert + description: 1. 页面跳转,焦点仍然在百分比框 + - step_type: assert + description: 2. 页面跳转,焦点仍然在页码框 + - step_type: action + description: 1. 打开PDF文档,选中文本并右击 + - step_type: action + description: 2. 按键盘上下键,焦点切换 + - step_type: assert + description: 1. 弹出右键菜单 + - step_type: assert + description: 2. 焦点在每个高亮菜单切换,置灰菜单直接跳过,不会出现焦点消失现象 diff --git a/tests/at/ui-map.md b/tests/at/ui-map.md new file mode 100644 index 00000000..223bafe8 --- /dev/null +++ b/tests/at/ui-map.md @@ -0,0 +1,302 @@ +# deepin-reader AT-SPI UI Map + +## 应用概况 + +| 项目 | 值 | +|------|------| +| 应用名 | deepin-reader (文档查看器) | +| 源码路径 | `reader/` | +| 构建系统 | CMake + qmake | +| UI 框架 | Qt5 + DTK (DWidget) | +| 文档格式 | PDF, DjVu, XPS | +| 入口 | `reader/main.cpp` → `Application` → `MainWindow` | +| AT-SPI 工厂 | `QAccessible::installFactory(accessibleFactory)` → `reader/main.cpp:108` | +| AT 命名 | `getAccessibleName()` → `reader/app/accessibledefine.h:22-90` | +| AT 注册表 | `accessibleFactory()` → `reader/app/accessible.h:87-130` | + +--- + +## 组件树 (Mermaid) + +```mermaid +graph TD + MainWindow["MainWindow (BaseWidget)"] --> Central["Central (BaseWidget)"] + MainWindow --> TitleWidget["TitleWidget (BaseWidget)"] + + TitleWidget --> DTitlebar["DTitlebar"] + TitleWidget --> TitleMenu["TitleMenu (DMenu)"] + + Central --> CentralNavPage["CentralNavPage (BaseWidget)"] + Central --> CentralDocPage["CentralDocPage (BaseWidget)"] + Central --> DocTabBar["DocTabBar (DTabBar)"] + Central --> RestoreTipWidget["RestoreTipWidget"] + + CentralDocPage --> DocSheet["DocSheet (QObject)"] + DocSheet --> SheetBrowser["SheetBrowser (BaseWidget)"] + + SheetBrowser --> BrowserPage["BrowserPage (QGraphicsItem)"] + SheetBrowser --> BrowserMagniFier["BrowserMagniFier (QLabel)"] + SheetBrowser --> BrowserMenu["BrowserMenu (DMenu / 右键菜单)"] + + BrowserPage --> BrowserAnnotation["BrowserAnnotation (QGraphicsItem)"] + BrowserPage --> BrowserWord["BrowserWord (QGraphicsItem)"] + + Central --> SheetSidebar["SheetSidebar (BaseWidget)"] + + SheetSidebar --> ThumbnailWidget["ThumbnailWidget (BaseWidget)"] + ThumbnailWidget --> SideBarImageListView["SideBarImageListView"] + ThumbnailWidget --> PagingWidget["PagingWidget (BaseWidget)"] + + SheetSidebar --> CatalogWidget["CatalogWidget (BaseWidget)"] + CatalogWidget --> SideBarImageListView + + SheetSidebar --> BookMarkWidget["BookMarkWidget (BaseWidget)"] + BookMarkWidget --> SideBarImageListView + BookMarkWidget --> BookMarkDelegate["BookMarkDelegate"] + + SheetSidebar --> NotesWidget["NotesWidget (BaseWidget)"] + NotesWidget --> SideBarImageListView + NotesWidget --> NotesDelegate["NotesDelegate"] + + SheetSidebar --> SearchResWidget["SearchResWidget (BaseWidget)"] + SearchResWidget --> SideBarImageListView + SearchResWidget --> SearchResDelegate["SearchResDelegate"] + + subgraph 浮动面板 + FindWidget["FindWidget (DFloatingWidget / 搜索框)"] + SlidePlayWidget["SlidePlayWidget (DFloatingWidget / 幻灯片控制)"] + TipsWidget["TipsWidget (提示气泡)"] + end + + subgraph 缩放控件 + ScaleWidget["ScaleWidget (DWidget)"] + ScaleWidget --> ScaleMenu["ScaleMenu (缩放菜单)"] + end + + subgraph 对话框 + ProgressDialog["ProgressDialog (DDialog)"] + SaveDialog["SaveDialog"] + SecurityDialog["SecurityDialog"] + EncryptionPage["EncryptionPage"] + FileAttrWidget["FileAttrWidget (DAbstractDialog)"] + AttrScrollWidget["AttrScrollWidget (DFrame)"] + end + + subgraph 编辑控件 + TextEditWidget["TextEditWidget"] + TextEditWidget --> TextEditShadowWidget["TextEditShadowWidget"] + TextEditWidget --> TransparentTextEdit["TransparentTextEdit"] + end + + subgraph 其他 + HandleMenu["HandleMenu (手形/选择工具)"] + ColorWidgetAction["ColorWidgetAction (颜色选择)"] + SlideWidget["SlideWidget"] + ShortCutShow["ShortCutShow"] + RoundColorWidget["RoundColorWidget"] + WordWrapLabel["WordWrapLabel"] + end +``` + +--- + +## 控件表 + +| 类名 | 文件 | 基类 | AT 注册 | setAccessibleName | setObjectName | 说明 | +|------|------|------|---------|-------------------|---------------|------| +| MainWindow | reader/MainWindow.h | BaseWidget | ✅ | ✅ (line 620) | - | 主窗口 | +| Central | reader/uiframe/Central.h | BaseWidget | ✅ | - | - | 中央容器 | +| CentralDocPage | reader/uiframe/CentralDocPage.h | BaseWidget | ✅ | - | - | 文档浏览堆栈 | +| CentralNavPage | reader/uiframe/CentralNavPage.h | BaseWidget | ✅ | ✅ (lines 23,37,44,58) | ✅ (lines 43,57) | 空导航页 | +| DocSheet | reader/uiframe/DocSheet.h | QObject | ✅ | - | ✅ | 文档会话 | +| DocTabBar | reader/uiframe/DocTabBar.h | DTabBar | ✅ | - | - | 标签页栏 | +| TitleWidget | reader/uiframe/TitleWidget.h | BaseWidget | ✅ | ✅ (line 22) | ✅ (line 21) | 标题栏 | +| TitleMenu | reader/uiframe/TitleMenu.h | DMenu | - | ✅ (line 43) | - | 主菜单 (瞬态) | +| SheetSidebar | reader/sidebar/SheetSidebar.h | BaseWidget | ✅ | ✅ (line 363) | ✅ (line 362) | 左侧栏 | +| SheetBrowser | reader/browser/SheetBrowser.h | BaseWidget | ✅ | ✅ (lines 90,98,101) | - | 文档浏览器 | +| BrowserMenu | reader/browser/BrowserMenu.h | DMenu | - | ✅ (line 19) | - | 文档右键菜单 (瞬态) | +| BrowserPage | reader/browser/BrowserPage.h | QGraphicsItem | - | - | - | 文档页(图形项) | +| BrowserMagniFier | reader/browser/BrowserMagniFier.h | QLabel | - | - | - | 放大镜 | +| BrowserAnnotation | reader/browser/BrowserAnnotation.h | QGraphicsItem | - | - | - | 批注图形项 | +| BrowserWord | reader/browser/BrowserWord.h | QGraphicsItem | - | - | - | 文字选择图形项 | +| ThumbnailWidget | reader/sidebar/ThumbnailWidget.h | BaseWidget | ✅ | ✅ (lines 38,43,50) | - | 缩略图视图 | +| CatalogWidget | reader/sidebar/CatalogWidget.h | BaseWidget | ✅ | ✅ (lines 40,55) | - | 目录视图 | +| BookMarkWidget | reader/sidebar/BookMarkWidget.h | BaseWidget | ✅ | ✅ (lines 45,52,68) | ✅ (line 51) | 书签视图 | +| NotesWidget | reader/sidebar/NotesWidget.h | BaseWidget | ✅ | ✅ (lines 46,55,66) | ✅ (line 54) | 注释视图 | +| SearchResWidget | reader/sidebar/SearchResWidget.h | BaseWidget | ✅ | ✅ (line 43) | - | 搜索结果 | +| SideBarImageListView | reader/sidebar/SideBarImageListview.h | BaseWidget | - | ✅ (lines 276,304) | ✅ (lines 29,31) | 侧栏列表视图 | +| FindWidget | reader/widgets/FindWidget.h | DFloatingWidget | - | ✅ (lines 120,122) | ✅ (lines 119,121,129,136,143) | 查找面板 | +| PagingWidget | reader/widgets/PagingWidget.h | BaseWidget | - | ✅ (lines 74,81,84,100,107,112) | ✅ (lines 82,83,101,108) | 页码导航 | +| ScaleWidget | reader/widgets/ScaleWidget.h | DWidget | - | - | ✅ (lines 42,43,52,72,79) | 缩放控件 | +| ScaleMenu | reader/widgets/ScaleMenu.h | - | - | - | ✅ (line 117) | 缩放菜单 | +| HandleMenu | reader/widgets/HandleMenu.h | - | - | - | ✅ (lines 27,35) | 工具切换菜单 | +| EncryptionPage | reader/widgets/EncryptionPage.h | - | - | - | ✅ (lines 46,50) | 加密页 | +| SlidePlayWidget | reader/widgets/SlidePlayWidget.h | DFloatingWidget | - | ✅ (line 160) | - | 幻灯片控制 | +| ColorWidgetAction | reader/widgets/ColorWidgetAction.h | - | - | - | ✅ (line 66) | 颜色选择 | +| EyeProtectionAction | reader/eyeprotection/EyeProtectionAction.h | - | - | - | ✅ (line 64) | 护眼模式 | +| SheetRenderer | reader/uiframe/SheetRenderer.h | QObject | - | - | - | 文档渲染器 | +| TransparentTextEdit | reader/widgets/TransparentTextEdit.h | - | - | - | ✅ (line 26) | 透明文本编辑 | +| TextEditShadowWidget | reader/widgets/TextEditWidget.h | - | - | - | ✅ (line 52) | 文本编辑阴影 | + +--- + +## 菜单索引 + +### 主菜单 (TitleMenu) + +文件: `reader/uiframe/TitleMenu.cpp` +类型: `DMenu`,瞬态弹出 + +| 菜单项 | 触发方式 | 说明 | +|--------|----------|------| +| 在文件管理器中显示 | 主菜单 | 定位文件 | +| 放大镜 | 主菜单 | 启用放大区域 | +| 工具 → 选择工具 | 主菜单 → 子菜单 | 文本选择 | +| 工具 → 手形工具 | 主菜单 → 子菜单 | 页面移动 | +| 主题 → 浅色主题 | 主菜单 → 子菜单 | 窗口主题 | +| 主题 → 深色主题 | 主菜单 → 子菜单 | 窗口主题 | +| 主题 → 系统主题 | 主菜单 → 子菜单 | 窗口主题 | +| 帮助 | 主菜单 | 打开帮助手册 | +| 关于 | 主菜单 | 版本信息 | +| 退出 | 主菜单 | 退出应用 | + +### 右键菜单 + +#### 文档区域右键菜单 (BrowserMenu) +文件: `reader/browser/BrowserMenu.cpp` +类型: `DMenu`,瞬态弹出 + +| 菜单项 | 说明 | +|--------|------| +| 复制 | 复制选中文本 | +| 选择全部 | 全选 | +| 添加书签 | 快捷添加书签 | +| 放大 | 放大页面 | +| 缩小 | 缩小页面 | + +#### 侧栏书签右键菜单 +文件: `reader/sidebar/SideBarImageListview.cpp:299-318` +触发: `showBookMarkMenu` 右键书签项 + +| 菜单项 | 说明 | +|--------|------| +| 跳转到 | 跳转书签位置 | +| 编辑书签 | 修改书签 | +| 删除书签 | 删除书签 | +| 删除全部 | 清空书签 | + +#### 侧栏注释右键菜单 +文件: `reader/sidebar/SideBarImageListview.cpp:270-297` +触发: `showNoteMenu` 右键注释项 + +| 菜单项 | 说明 | +|--------|------| +| 跳转到 | 跳转注释位置 | +| 删除 | 删除注释 | +| 删除全部 | 清空注释 | + +--- + +## 对话框索引 + +| 对话框 | 文件 | 类型 | 触发条件 | +|--------|------|------|----------| +| 加密弹窗 | reader/widgets/EncryptionPage.cpp | DDialog | 打开加密 PDF | +| 保存确认 | reader/widgets/SaveDialog.cpp | QDialog | 关闭未保存文档 | +| 文件属性 | reader/widgets/FileAttrWidget.cpp | DAbstractDialog | 主菜单 → 文件信息 | +| 加载进度 | reader/widgets/ProgressDialog.cpp | DDialog | 打开大文档 | +| 安全提示 | reader/widgets/SecurityDialog.cpp | DDialog | 安全操作确认 | +| 关于对话框 | TitleMenu → 关于 | DDialog | 主菜单 → 关于 | +| 文件打开 | Central::addFilesWithDialog | DFileDialog | 主菜单/工具栏打开 | +| 另存为 | CentralDocPage::saveAsCurrent | DFileDialog | 主菜单 → 另存为 | + +--- + +## 快捷键索引 + +| 快捷键 | 功能 | 注册位置 | +|--------|------|----------| +| Ctrl+O | 打开文件 | Central::Central | +| Ctrl+N | 新建窗口 | Central | +| Ctrl+T | 新建标签页 | Central | +| Ctrl+W | 关闭标签页 | Central | +| Ctrl+Q | 退出 | Central | +| Ctrl+S | 保存 | Central | +| Ctrl+Shift+S | 另存为 | Central | +| Ctrl+F | 查找 | Central | +| Ctrl+D | 添加书签 | Central | +| Ctrl++ | 放大 | Central | +| Ctrl+- | 缩小 | Central | +| Ctrl+0 | 适应窗口 | Central | +| Ctrl+1 | 适应宽度 | Central | +| Ctrl+Shift+P | 打印 | Central | +| F11 | 全屏 | Central | +| Esc | 取消/退出全屏 | Central / BrowserMagniFier | +| Alt+1 | 左侧栏→缩略图 | Central | +| Alt+2 | 左侧栏→目录 | Central | +| Alt+3 | 左侧栏→书签 | Central | +| Alt+4 | 左侧栏→注释 | Central | +| Alt+5 | 左侧栏→搜索结果 | Central | +| ↑/↓/←/→ | 页面滚动 | SheetBrowser | +| PageUp/PageDown | 上下翻页 | SheetBrowser | +| Home/End | 首页/尾页 | SheetBrowser | +| / | 快速搜索 | Central | +| N | 查找下一个 | Central | + +--- + +## AT 命名规则 + +```cpp +// getAccessibleName() 在 reader/app/accessibledefine.h:22-90 +// 命名模式: _[_] +// SEPARATOR = "_" + +// 角色前缀映射: +Form → "Form_" (QAccessible::Form) +Button → "Button_" (QAccessible::Button) +Label → "Label_" (QAccessible::StaticText) +Editable→ "Editable_" (QAccessible::EditableText) +Slider → "Slider_" (QAccessible::Slider) +// 其他 → QMetaEnum::valueToKeys(r) + "_" + +// 唯一性: 同名控件自动加 _N 后缀 +``` + +--- + +## 文件索引 + +| 文件 | 内容 | +|------|------| +| `reader/app/accessibledefine.h` | AT 命名宏/函数 (getAccessibleName, SET_*_ACCESSIBLE) | +| `reader/app/accessible.h` | AT 工厂 (accessibleFactory) | +| `reader/main.cpp:108` | installFactory 调用点 | +| `reader/MainWindow.cpp:620` | MainWindow setAccessibleName | +| `reader/uiframe/TitleWidget.cpp:16-92` | 标题栏初始化 + setAccessibleName | +| `reader/uiframe/TitleMenu.cpp:13-50` | 主菜单初始化 + setAccessibleName | +| `reader/uiframe/CentralNavPage.cpp:18-73` | 导航页 + setAccessibleName/setObjectName | +| `reader/browser/SheetBrowser.cpp:53-123` | 文档浏览器 + setAccessibleName | +| `reader/browser/BrowserMenu.cpp:16-22` | 右键菜单 setAccessibleName | +| `reader/sidebar/SheetSidebar.cpp:356-372` | 侧栏按钮创建 + setAccessibleName | +| `reader/sidebar/SideBarImageListview.cpp:20-46` | 侧栏列表 + setObjectName | +| `reader/sidebar/SideBarImageListview.cpp:270-318` | 右键菜单 showNoteMenu/showBookMarkMenu | +| `reader/sidebar/BookMarkWidget.cpp:39-76` | 书签视图 + setAccessibleName/setObjectName | +| `reader/sidebar/CatalogWidget.cpp:28-59` | 目录视图 + setAccessibleName | +| `reader/sidebar/NotesWidget.cpp:37-73` | 注释视图 + setAccessibleName/setObjectName | +| `reader/sidebar/SearchResWidget.cpp:34-56` | 搜索结果 + setAccessibleName | +| `reader/sidebar/ThumbnailWidget.cpp:34-55` | 缩略图 + setAccessibleName | +| `reader/widgets/FindWidget.cpp:115-199` | 查找面板 + setAccessibleName/setObjectName | +| `reader/widgets/PagingWidget.cpp:70-131` | 页码控件 + setAccessibleName/setObjectName | +| `reader/widgets/ScaleWidget.cpp:33-88` | 缩放控件 + setObjectName | +| `reader/widgets/ScaleMenu.cpp:113-122` | 缩放菜单 + setObjectName | +| `reader/widgets/SlidePlayWidget.cpp:156-166` | 幻灯片控制 setAccessibleName | +| `reader/eyeprotection/EyeProtectionAction.cpp:38-82` | 护眼模式 setObjectName | +| `reader/widgets/EncryptionPage.cpp:31-78` | 加密页 setObjectName | +| `reader/widgets/HandleMenu.cpp:19-41` | 工具切换 setObjectName | +| `reader/widgets/ColorWidgetAction.cpp:47-94` | 颜色选择 setObjectName | +| `reader/widgets/TextEditWidget.cpp:30-56` | 文本编辑 setObjectName | +| `reader/uiframe/Central.cpp:26-99` | 中央容器 + 快捷键注册 | +| `reader/browser/SheetBrowser.cpp:2188-2229` | 链接跳转 | +| `reader/uiframe/DocSheet.cpp:1791-1797` | 信息弹窗 | +| `reader/widgets/SaveDialog.cpp:26-53` | 保存/退出弹窗 | \ No newline at end of file diff --git a/tests/at/yaml/elements.yaml b/tests/at/yaml/elements.yaml new file mode 100644 index 00000000..271713b4 --- /dev/null +++ b/tests/at/yaml/elements.yaml @@ -0,0 +1,7 @@ +elements: + ReaderTitle: + name: ReaderTitle + role: label + BrowserPage: + name: BrowserPage + role: panel diff --git "a/tests/at/yaml/\344\270\273\350\217\234\345\215\225/\344\270\273\350\217\234\345\215\225.suite.yaml" "b/tests/at/yaml/\344\270\273\350\217\234\345\215\225/\344\270\273\350\217\234\345\215\225.suite.yaml" new file mode 100644 index 00000000..607dc645 --- /dev/null +++ "b/tests/at/yaml/\344\270\273\350\217\234\345\215\225/\344\270\273\350\217\234\345\215\225.suite.yaml" @@ -0,0 +1,511 @@ +name: 主菜单_suite +app: deepin-reader +description: '' +module: 主菜单 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_主菜单_s1 + name: 主菜单测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_main_menu + items: + - 保存 + - action: dtk_main_menu + items: + - 保存 + - action: dtk_main_menu + items: + - 保存 + - action: dtk_main_menu + items: + - 保存 + - action: dtk_main_menu + items: + - 保存 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_主菜单_1_s1 + name: 主菜单测试 + description: '' + tags: [] + steps: [] + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_主菜单_1_s2 + name: 主菜单测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_main_menu + items: + - 保存 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_main_menu + items: + - 保存 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_main_menu + items: + - 保存 + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\344\271\246\347\255\276/\344\271\246\347\255\276.suite.yaml" "b/tests/at/yaml/\344\271\246\347\255\276/\344\271\246\347\255\276.suite.yaml" new file mode 100644 index 00000000..24148a4c --- /dev/null +++ "b/tests/at/yaml/\344\271\246\347\255\276/\344\271\246\347\255\276.suite.yaml" @@ -0,0 +1,419 @@ +name: 书签_suite +app: deepin-reader +description: '' +module: 书签 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_书签_s1 + name: 书签测试 + description: '' + tags: [] + steps: + - action: keyboard_press + key: delete + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: keyboard_hot_key + key: ctrl+s + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_书签_s2 + name: 书签测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_书签_1_s1 + name: 书签测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\345\205\266\344\273\226\344\272\244\344\272\222/\345\205\266\344\273\226\344\272\244\344\272\222.suite.yaml" "b/tests/at/yaml/\345\205\266\344\273\226\344\272\244\344\272\222/\345\205\266\344\273\226\344\272\244\344\272\222.suite.yaml" new file mode 100644 index 00000000..39a472c6 --- /dev/null +++ "b/tests/at/yaml/\345\205\266\344\273\226\344\272\244\344\272\222/\345\205\266\344\273\226\344\272\244\344\272\222.suite.yaml" @@ -0,0 +1,350 @@ +name: 其他交互_suite +app: deepin-reader +description: '' +module: 其他交互 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_其他交互_s1 + name: 其他交互测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_hot_key + key: ctrl+s + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_press + key: delete + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_hot_key + key: ctrl+s + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_press + key: delete + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_其他交互_s2 + name: 其他交互测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\345\217\263\351\224\256\350\217\234\345\215\225/\345\217\263\351\224\256\350\217\234\345\215\225.suite.yaml" "b/tests/at/yaml/\345\217\263\351\224\256\350\217\234\345\215\225/\345\217\263\351\224\256\350\217\234\345\215\225.suite.yaml" new file mode 100644 index 00000000..d0e488f2 --- /dev/null +++ "b/tests/at/yaml/\345\217\263\351\224\256\350\217\234\345\215\225/\345\217\263\351\224\256\350\217\234\345\215\225.suite.yaml" @@ -0,0 +1,589 @@ +name: 右键菜单_suite +app: deepin-reader +description: '' +module: 右键菜单 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_右键菜单_s1 + name: 右键菜单测试 + description: '' + tags: [] + steps: + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_main_menu + items: + - 保存 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: keyboard_hot_key + key: ctrl+s + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_main_menu + items: + - 保存 + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_右键菜单_s2 + name: 右键菜单测试 + description: '' + tags: [] + steps: + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\346\226\207\346\241\243\346\211\223\345\274\200/\346\226\207\346\241\243\346\211\223\345\274\200.suite.yaml" "b/tests/at/yaml/\346\226\207\346\241\243\346\211\223\345\274\200/\346\226\207\346\241\243\346\211\223\345\274\200.suite.yaml" new file mode 100644 index 00000000..0ed0eee3 --- /dev/null +++ "b/tests/at/yaml/\346\226\207\346\241\243\346\211\223\345\274\200/\346\226\207\346\241\243\346\211\223\345\274\200.suite.yaml" @@ -0,0 +1,566 @@ +name: 文档打开_suite +app: deepin-reader +description: '' +module: 文档打开 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_文档打开_s1 + name: 文档打开测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_type + text: test_input + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档打开_s2 + name: 文档打开测试 + description: '' + tags: [] + steps: + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: keyboard_hot_key + key: ctrl+s + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: keyboard_hot_key + key: ctrl+s + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: keyboard_hot_key + key: ctrl+s + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档打开_1_s1 + name: 文档打开测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档打开_1_s2 + name: 文档打开测试 + description: '' + tags: [] + steps: + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\346\226\207\346\241\243\346\223\215\344\275\234/\346\226\207\346\241\243\346\223\215\344\275\234.suite.yaml" "b/tests/at/yaml/\346\226\207\346\241\243\346\223\215\344\275\234/\346\226\207\346\241\243\346\223\215\344\275\234.suite.yaml" new file mode 100644 index 00000000..a8812c87 --- /dev/null +++ "b/tests/at/yaml/\346\226\207\346\241\243\346\223\215\344\275\234/\346\226\207\346\241\243\346\223\215\344\275\234.suite.yaml" @@ -0,0 +1,2049 @@ +name: 文档操作_suite +app: deepin-reader +description: '' +module: 文档操作 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_文档操作_s1 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_type + text: test_input + - action: keyboard_type + text: test_input + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_1_s1 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_1_s2 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_2_s1 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_2_s2 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: keyboard_type + text: test_input + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: keyboard_press + key: delete + - action: keyboard_press + key: delete + - action: keyboard_press + key: delete + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_3_s1 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_main_menu + items: + - 保存 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_4_s1 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_4_s2 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: keyboard_type + text: test_input + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_文档操作_5_s1 + name: 文档操作测试 + description: '' + tags: [] + steps: + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\346\240\207\347\255\276\351\241\265/\346\240\207\347\255\276\351\241\265.suite.yaml" "b/tests/at/yaml/\346\240\207\347\255\276\351\241\265/\346\240\207\347\255\276\351\241\265.suite.yaml" new file mode 100644 index 00000000..3f38222f --- /dev/null +++ "b/tests/at/yaml/\346\240\207\347\255\276\351\241\265/\346\240\207\347\255\276\351\241\265.suite.yaml" @@ -0,0 +1,535 @@ +name: 标签页_suite +app: deepin-reader +description: '' +module: 标签页 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_标签页_s1 + name: 标签页测试 + description: '' + tags: [] + steps: [] + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_标签页_s2 + name: 标签页测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_标签页_1_s1 + name: 标签页测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\346\263\250\351\207\212/\346\263\250\351\207\212.suite.yaml" "b/tests/at/yaml/\346\263\250\351\207\212/\346\263\250\351\207\212.suite.yaml" new file mode 100644 index 00000000..78497de1 --- /dev/null +++ "b/tests/at/yaml/\346\263\250\351\207\212/\346\263\250\351\207\212.suite.yaml" @@ -0,0 +1,876 @@ +name: 注释_suite +app: deepin-reader +description: '' +module: 注释 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_注释_s1 + name: 注释测试 + description: '' + tags: [] + steps: + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: keyboard_press + key: delete + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: keyboard_press + key: delete + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_type + text: test_input + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_注释_1_s1 + name: 注释测试 + description: '' + tags: [] + steps: + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: keyboard_type + text: test_input + - action: keyboard_type + text: test_input + - action: keyboard_type + text: test_input + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_注释_2_s1 + name: 注释测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: keyboard_type + text: test_input + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_hot_key + key: ctrl+s + - action: keyboard_press + key: delete + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_注释_2_s2 + name: 注释测试 + description: '' + tags: [] + steps: + - action: keyboard_hot_key + key: ctrl+s + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\347\233\256\345\275\225/\347\233\256\345\275\225.suite.yaml" "b/tests/at/yaml/\347\233\256\345\275\225/\347\233\256\345\275\225.suite.yaml" new file mode 100644 index 00000000..c9c11b0a --- /dev/null +++ "b/tests/at/yaml/\347\233\256\345\275\225/\347\233\256\345\275\225.suite.yaml" @@ -0,0 +1,196 @@ +name: 目录_suite +app: deepin-reader +description: '' +module: 目录 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_目录_s1 + name: 目录测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_目录_s2 + name: 目录测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\347\244\276\345\214\272\351\234\200\346\261\202/\347\244\276\345\214\272\351\234\200\346\261\202.suite.yaml" "b/tests/at/yaml/\347\244\276\345\214\272\351\234\200\346\261\202/\347\244\276\345\214\272\351\234\200\346\261\202.suite.yaml" new file mode 100644 index 00000000..284ec520 --- /dev/null +++ "b/tests/at/yaml/\347\244\276\345\214\272\351\234\200\346\261\202/\347\244\276\345\214\272\351\234\200\346\261\202.suite.yaml" @@ -0,0 +1,399 @@ +name: 社区需求_suite +app: deepin-reader +description: '' +module: 社区需求 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_社区需求_s1 + name: 社区需求测试 + description: '' + tags: [] + steps: + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_main_menu + items: + - 保存 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\347\252\227\345\217\243\347\256\241\347\220\206/\347\252\227\345\217\243\347\256\241\347\220\206.suite.yaml" "b/tests/at/yaml/\347\252\227\345\217\243\347\256\241\347\220\206/\347\252\227\345\217\243\347\256\241\347\220\206.suite.yaml" new file mode 100644 index 00000000..fd70d626 --- /dev/null +++ "b/tests/at/yaml/\347\252\227\345\217\243\347\256\241\347\220\206/\347\252\227\345\217\243\347\256\241\347\220\206.suite.yaml" @@ -0,0 +1,77 @@ +name: 窗口管理_suite +app: deepin-reader +description: '' +module: 窗口管理 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_窗口管理_s1 + name: 窗口管理测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\347\274\251\347\225\245\345\233\276/\347\274\251\347\225\245\345\233\276.suite.yaml" "b/tests/at/yaml/\347\274\251\347\225\245\345\233\276/\347\274\251\347\225\245\345\233\276.suite.yaml" new file mode 100644 index 00000000..b2b01762 --- /dev/null +++ "b/tests/at/yaml/\347\274\251\347\225\245\345\233\276/\347\274\251\347\225\245\345\233\276.suite.yaml" @@ -0,0 +1,125 @@ +name: 缩略图_suite +app: deepin-reader +description: '' +module: 缩略图 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_缩略图_s1 + name: 缩略图测试 + description: '' + tags: [] + steps: + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\350\247\246\346\221\270\345\261\217/\350\247\246\346\221\270\345\261\217.suite.yaml" "b/tests/at/yaml/\350\247\246\346\221\270\345\261\217/\350\247\246\346\221\270\345\261\217.suite.yaml" new file mode 100644 index 00000000..107824f9 --- /dev/null +++ "b/tests/at/yaml/\350\247\246\346\221\270\345\261\217/\350\247\246\346\221\270\345\261\217.suite.yaml" @@ -0,0 +1,108 @@ +name: 触摸屏_suite +app: deepin-reader +description: '' +module: 触摸屏 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_触摸屏_s1 + name: 触摸屏测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + - action: element_action + selector: + name: BrowserPage + role: panel + do: click + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\350\247\246\346\221\270\346\235\277/\350\247\246\346\221\270\346\235\277.suite.yaml" "b/tests/at/yaml/\350\247\246\346\221\270\346\235\277/\350\247\246\346\221\270\346\235\277.suite.yaml" new file mode 100644 index 00000000..a2d01204 --- /dev/null +++ "b/tests/at/yaml/\350\247\246\346\221\270\346\235\277/\350\247\246\346\221\270\346\235\277.suite.yaml" @@ -0,0 +1,81 @@ +name: 触摸板_suite +app: deepin-reader +description: '' +module: 触摸板 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_触摸板_s1 + name: 触摸板测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop diff --git "a/tests/at/yaml/\351\224\256\347\233\230\344\272\244\344\272\222/\351\224\256\347\233\230\344\272\244\344\272\222.suite.yaml" "b/tests/at/yaml/\351\224\256\347\233\230\344\272\244\344\272\222/\351\224\256\347\233\230\344\272\244\344\272\222.suite.yaml" new file mode 100644 index 00000000..c8928372 --- /dev/null +++ "b/tests/at/yaml/\351\224\256\347\233\230\344\272\244\344\272\222/\351\224\256\347\233\230\344\272\244\344\272\222.suite.yaml" @@ -0,0 +1,666 @@ +name: 键盘交互_suite +app: deepin-reader +description: '' +module: 键盘交互 +tags: [] +fast_fail: false +env_check: [] +setup: +- action: session_start + command: deepin-reader + wait: 3.0 +suites: +- id: suite_键盘交互_s1 + name: 键盘交互测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_main_menu + items: + - 保存 + - action: dtk_main_menu + items: + - 保存 + - action: dtk_main_menu + items: + - 保存 + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_键盘交互_s2 + name: 键盘交互测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_type + text: test_input + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_main_menu + items: + - 保存 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: dtk_context_menu + selector: + name: BrowserPage + role: panel + items: + - 复制 + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_press + key: delete + - action: keyboard_press + key: delete + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_type + text: test_input + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: element_action + selector: + name: ReaderTitle + role: label + do: click + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_键盘交互_1_s1 + name: 键盘交互测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: mouse_click + selector: + name: ReaderTitle + role: label + - action: keyboard_type + text: test_input + - action: keyboard_type + text: test_input + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +- id: suite_键盘交互_1_s2 + name: 键盘交互测试 + description: '' + tags: [] + steps: + - action: mouse_click + selector: + name: ReaderTitle + role: label + assert_steps: + - action: assert_element + selector: + name: ReaderTitle + role: label + - action: assert_element + selector: + name: ReaderTitle + role: label +teardown: +- action: session_stop