diff --git a/case/test_dde_1271283.py b/case/test_dde_1271283.py new file mode 100644 index 0000000000000000000000000000000000000000..b629648f4f2711693a3c8fb9a7c833f91b7f4cb0 --- /dev/null +++ b/case/test_dde_1271283.py @@ -0,0 +1,95 @@ +import pytest +from src import sleep +from src import Src +from src import CmdCtl as Cmd +from apps.dde_autotest_euler.case.base_case import BaseCase +from apps.dde_autotest_euler.method.dde_method import DdeMethod + + +class TestDdeFileManagerCase(BaseCase): + + @pytest.fixture(scope="function", autouse=True) + def setup_teardown_1271283(self): + """前置和后置""" + DdeMethod().dde_dock.click_dde_file_manager_by_attr() + sleep(3) + yield + Cmd.run_cmd("rm -rf ~/Documents/*") + Cmd.run_cmd("rm -rf /home/uos/.local/share/Trash/files/*") + Src.kill_process("dde-file-manage") + + def test_dde_1271283_1(self): + """文件管理器——还原文件""" + # 1. 在回收站中选中一个文件,点击右键-还原,查看软件提示 + # 1. 软件没有任何提示,直接还原当前文件 + Cmd.run_cmd("touch ~/Documents/test1") + euler = DdeMethod() + euler.dde_file_manager.click_document_dir_in_left_view_by_attr() + sleep(3) + euler.dde_file_manager.click_file_in_right_view_by_attr("test1") + Src.delete() + euler.dde_file_manager.click_trash_dir_in_left_view_by_attr() + sleep(3) + euler.dde_file_manager.right_click_file_in_right_view_by_attr("test1") + euler.dde_file_manager.click(*euler.ocr("还原")) + self.assert_file_exist("~/Documents/test1") + + def test_dde_1271283_2(self): + """文件管理器——还原文件""" + # 2. 假如:在还原的过程中会遇到重名冲突,查看软件显示 + # 2. 软件会弹出冲突提示对话框 + Cmd.run_cmd("touch ~/Documents/test1") + euler = DdeMethod() + euler.dde_file_manager.click_document_dir_in_left_view_by_attr() + sleep(3) + euler.dde_file_manager.click_file_in_right_view_by_attr("test1") + Src.delete() + euler.dde_file_manager.click_trash_dir_in_left_view_by_attr() + sleep(3) + # 原位置新建重名文件 + Cmd.run_cmd("touch ~/Documents/test1") + euler.dde_file_manager.right_click_file_in_right_view_by_attr("test1") + euler.dde_file_manager.click(*euler.ocr("还原")) + self.assert_ocr_exist("目标文件夹中已存在") + + def test_dde_1271283_3(self): + """文件管理器——还原文件""" + # 3. 在回收站中选中多个文件和文件夹,点击右键还原 + # 3. 软件会直接还原文件和文件夹 + Cmd.run_cmd("touch ~/Documents/test1") + Cmd.run_cmd("mkdir ~/Documents/test_dir1") + euler = DdeMethod() + euler.dde_file_manager.click_document_dir_in_left_view_by_attr() + sleep(3) + euler.dde_file_manager.click_file_in_right_view_by_attr("test1") + Src.ctrl_a() + Src.delete() + euler.dde_file_manager.click_trash_dir_in_left_view_by_attr() + sleep(3) + euler.dde_file_manager.click_file_in_right_view_by_attr("test1") + Src.ctrl_a() + Src.right_click() + euler.dde_file_manager.click(*euler.ocr("还原")) + self.assert_file_exist("~/Documents/test1") + self.assert_file_exist("~/Documents/test_dir1") + + def test_dde_1271283_4(self): + """文件管理器——还原文件""" + # 4. 从文件夹中删除文件,然后修改文件夹权限为只读权限,从回收站中还原,查看软件显示 + # 4. 弹出提示 操作失败!1个文件还原失败,目标文件夹不可写 + Cmd.run_cmd("mkdir ~/Documents/test_dir1") + Cmd.run_cmd("touch ~/Documents/test_dir1/test1") + euler = DdeMethod() + euler.dde_file_manager.click_document_dir_in_left_view_by_attr() + sleep(3) + euler.dde_file_manager.double_click_file_in_right_view_by_attr("test_dir1") + sleep(3) + euler.dde_file_manager.click_file_in_right_view_by_attr("test1") + Src.delete() + sleep(3) + Cmd.run_cmd("chmod 555 ~/Documents/test_dir1") + euler.dde_file_manager.click_trash_dir_in_left_view_by_attr() + sleep(3) + euler.dde_file_manager.right_click_file_in_right_view_by_attr("test1") + euler.dde_file_manager.click(*euler.ocr("还原")) + self.assert_ocr_exist("目标文件夹不可写") diff --git a/dde.csv b/dde.csv index 573a81ddc19ad77df63ed86614353ff17c4a76cf..699a4b018c828ccda75a116dedaef3ed2bbb140b 100644 --- a/dde.csv +++ b/dde.csv @@ -1,47 +1,48 @@ -脚本ID,跳过原因,确认修复,废弃用例 -1270985,,, -1270989,,, -1271001,,, -1271009,,, -1271011,,, -1271027,,, -1271031,skip-删除用户对系统影响太大,, -1271033,skip-删除用户对系统影响太大,, -1271035,,, -1271037,skip-修改用户名密码对系统影响太大,, -1271041,,, -1271055,,, -1271057,,, -1271059,,, -1271061,,, -1271073,,, -1271075,,, -1271077,,, -1271089,,, -1271091,,, -1271093,,, -1271123,,, -1271135,,, -1271153,,, -1271157,,, -1271159,,, -1271169,,, -1271199,,, -1271201,,, -1271213,,, -1271247,,, -1271293,,, -1271295,,, -1271297,,, -1271299,,, -1271301,,, -1271309,,, -1271311,,, -1271313,,, -1271315,,, -1271317,,, -1271319,,, -1271321,,, -1271327,,, -1271331,,, -1271175,,, +脚本ID,跳过原因,确认修复,废弃用例 +1270985,,, +1270989,,, +1271001,,, +1271009,,, +1271011,,, +1271027,,, +1271031,skip-删除用户对系统影响太大,, +1271033,skip-删除用户对系统影响太大,, +1271035,,, +1271037,skip-修改用户名密码对系统影响太大,, +1271041,,, +1271055,,, +1271057,,, +1271059,,, +1271061,,, +1271073,,, +1271075,,, +1271077,,, +1271089,,, +1271091,,, +1271093,,, +1271123,,, +1271135,,, +1271153,,, +1271157,,, +1271159,,, +1271169,,, +1271199,,, +1271201,,, +1271213,,, +1271247,,, +1271293,,, +1271295,,, +1271297,,, +1271299,,, +1271301,,, +1271309,,, +1271311,,, +1271313,,, +1271315,,, +1271317,,, +1271319,,, +1271321,,, +1271327,,, +1271331,,, +1271175,,, +1271283,,, \ No newline at end of file diff --git a/method/dde_method.py b/method/dde_method.py index f13f5893fad31cab73a0a68429cd54d65c367dbd..bd135428116dc6bc6f05d44f2ba95beac737e2ad 100644 --- a/method/dde_method.py +++ b/method/dde_method.py @@ -22,6 +22,7 @@ from apps.dde_autotest_euler.method.vender.dde_launcher_method import DdeLaunche from apps.dde_autotest_euler.method.vender.deepin_draw_method import DeepinDrawMethod from apps.dde_autotest_euler.method.vender.deepin_system_monitor_method import DeepinSystemMonitorMethod from apps.dde_autotest_euler.method.vender.deepin_terminal_method import DeepinTerminalMethod +from apps.dde_autotest_euler.method.vender.dde_file_manager_method import DdeFileManagerMethod from src import log from src.shortcut import ShortCut @@ -86,6 +87,9 @@ class DdeMethod(Src): def dde_desktop(self): return DdeDesktopMethod() + @property + def dde_file_manager(self): + return DdeFileManagerMethod() def open_software_by_launcher(self, text): """通过启动器打开软件""" diff --git a/method/vender/dde_file_manager_method.py b/method/vender/dde_file_manager_method.py new file mode 100644 index 0000000000000000000000000000000000000000..70d670dc84e0cdf0302e25bb488981db16e820d3 --- /dev/null +++ b/method/vender/dde_file_manager_method.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +from apps.dde_autotest_euler.method.base_method import BaseMethod +from src import Src, sleep, ElementNotFound +from src.depends.dogtail.tree import SearchError + +class DdeFileManagerMethod(BaseMethod): + + def __init__(self): + super().__init__( + name="dde-file-manager", + ) + + def click_by_attr(self, path): + """在文管中通过元素点击""" + self.dog.element_click(path) + + def click_center_in_right_view_by_attr(self): + """点击右侧内容区域的空白处""" + self.click(*self.dog.element_center("DMainWindow")) + + def click_trash_dir_in_left_view_by_attr(self): + """文管侧边栏点击,回收站目录""" + self.click_by_attr("回收站") + + def click_document_dir_in_left_view_by_attr(self): + """文管侧边栏点击,文档目录""" + self.click_dir_in_left_view_by_attr("文档") + + def click_dir_in_left_view_by_attr(self, _dir): + """点击文管的侧边栏目录""" + try: + self.dog.find_element_by_attr(f"$//side_bar_view//{_dir}").point() + self.click() + except SearchError: + raise ElementNotFound(_dir) + + def click_file_in_right_view_by_attr(self, file_name): + """点击打开文管右侧文件""" + try: + self.dog.find_element_by_attr(f"$//file_view//{file_name}").point() + self.click() + except ElementNotFound: + raise ElementNotFound(file_name) + + def double_click_file_in_right_view_by_attr(self, file_name): + """点击打开文管右侧文件""" + try: + self.dog.find_element_by_attr(f"$//file_view//{file_name}").point() + self.double_click() + except ElementNotFound: + raise ElementNotFound(file_name) + + def right_click_file_in_right_view_by_attr(self, file_name, computer=False): + """ + 右键点击文管右侧文件 + """ + try: + self.dog.find_element_by_attr( + f"$//file{'' if computer else '_'}view//{file_name}" + ).point() + self.right_click() + sleep(0.5) + except ElementNotFound: + try: + self.dog.find_element_by_attr(f"$//{file_name}").point() + self.right_click() + except: + raise ElementNotFound(file_name) \ No newline at end of file