From 4b2ec7c3320265e01054988a7f0285fcb0b6ce10 Mon Sep 17 00:00:00 2001 From: mikigo Date: Thu, 7 Nov 2024 21:23:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E7=94=A8=E4=BE=8B=EF=BC=9A=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=20=20=20=20=20README.md=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde?= =?UTF-8?q?=5F1270985.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1270989.py=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20cas?= =?UTF-8?q?e/test=5Fdde=5F1271009.py=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1271027.py?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20?= =?UTF-8?q?=20=20case/test=5Fdde=5F1271031.py=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F127?= =?UTF-8?q?1055.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A?= =?UTF-8?q?=20=20=20=20=20case/test=5Fdde=5F1271057.py=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5F?= =?UTF-8?q?dde=5F1271073.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1271075.py=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20cas?= =?UTF-8?q?e/test=5Fdde=5F1271077.py=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1271089.py?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20?= =?UTF-8?q?=20=20case/test=5Fdde=5F1271091.py=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F127?= =?UTF-8?q?1093.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A?= =?UTF-8?q?=20=20=20=20=20case/test=5Fdde=5F1271123.py=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5F?= =?UTF-8?q?dde=5F1271135.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1271153.py=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20cas?= =?UTF-8?q?e/test=5Fdde=5F1271157.py=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1271159.py?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20?= =?UTF-8?q?=20=20case/test=5Fdde=5F1271169.py=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F127?= =?UTF-8?q?1175.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A?= =?UTF-8?q?=20=20=20=20=20case/test=5Fdde=5F1271199.py=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5F?= =?UTF-8?q?dde=5F1271201.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1271213.py=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20cas?= =?UTF-8?q?e/test=5Fdde=5F1271247.py=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1271297.py?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20?= =?UTF-8?q?=20=20case/test=5Fdde=5F1271309.py=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F127?= =?UTF-8?q?1313.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A?= =?UTF-8?q?=20=20=20=20=20case/test=5Fdde=5F1271317.py=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20case/test=5F?= =?UTF-8?q?dde=5F1271319.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=20=20=20=20=20case/test=5Fdde=5F1271321.py=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20cas?= =?UTF-8?q?e/test=5Fdde=5F1271331.py=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=20=20=20=20=20dde.csv=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20method/base=5Fm?= =?UTF-8?q?ethod.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9=EF=BC=9A?= =?UTF-8?q?=20=20=20=20=20method/dde=5Fmethod.py=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20method/vender/dde?= =?UTF-8?q?=5Fcontrol=5Fcenter=5Fmethod.py=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=20=20=20=20=20method/vender/dde=5Fp?= =?UTF-8?q?olkit=5Fagent=5Fmethod.py=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=EF=BC=9A=20=20=20=20=20method/vender/deepin=5Feditor?= =?UTF-8?q?=5Fmethod.py=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=20=20=20=20=20method/vender/deepin=5Flog=5Fviewer=5Fm?= =?UTF-8?q?ethod.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 52 ++++++++++++++------- case/test_dde_1270985.py | 2 +- case/test_dde_1270989.py | 3 ++ case/test_dde_1271009.py | 2 +- case/test_dde_1271027.py | 7 ++- case/test_dde_1271031.py | 1 + case/test_dde_1271055.py | 39 +++++++--------- case/test_dde_1271057.py | 7 +-- case/test_dde_1271073.py | 23 ++++++--- case/test_dde_1271075.py | 21 +++++---- case/test_dde_1271077.py | 20 ++++---- case/test_dde_1271089.py | 11 +++++ case/test_dde_1271091.py | 14 ++++-- case/test_dde_1271093.py | 41 ++++++---------- case/test_dde_1271123.py | 12 +++-- case/test_dde_1271135.py | 20 +++++--- case/test_dde_1271153.py | 13 ++++-- case/test_dde_1271157.py | 16 ++++--- case/test_dde_1271159.py | 9 ++-- case/test_dde_1271169.py | 2 +- case/test_dde_1271175.py | 2 +- case/test_dde_1271199.py | 2 +- case/test_dde_1271201.py | 6 +-- case/test_dde_1271213.py | 2 +- case/test_dde_1271247.py | 2 +- case/test_dde_1271297.py | 2 +- case/test_dde_1271309.py | 2 +- case/test_dde_1271313.py | 2 +- case/test_dde_1271317.py | 2 +- case/test_dde_1271319.py | 2 +- case/test_dde_1271321.py | 4 +- case/test_dde_1271331.py | 2 +- dde.csv | 7 +-- imgs/20241107142721.jpg | Bin 0 -> 47478 bytes method/base_method.py | 10 ++-- method/dde_method.py | 21 ++++----- method/vender/dde_control_center_method.py | 1 + method/vender/dde_polkit_agent_method.py | 11 +++++ method/vender/deepin_editor_method.py | 8 ++-- method/vender/deepin_log_viewer_method.py | 18 +++---- 40 files changed, 245 insertions(+), 176 deletions(-) create mode 100644 imgs/20241107142721.jpg diff --git a/README.md b/README.md index 69f0533..709e514 100644 --- a/README.md +++ b/README.md @@ -4,18 +4,23 @@ DDE Autotest for openEuler, based on [YouQu](https://youqu.uniontech.com/). **openEuler** 系统 **DDE** 桌面自动化测试。 -## 安装 +[![star](https://gitee.com/openeuler/dde_autotest_euler/badge/star.svg?theme=white)](https://gitee.com/openeuler/dde_autotest_euler/stargazers) +[![fork](https://gitee.com/openeuler/dde_autotest_euler/badge/fork.svg?theme=white)](https://gitee.com/openeuler/dde_autotest_euler/members) -1、安装 [欧拉](https://www.openeuler.org/zh/download/) **24.03 LTS** +## 安装系统 -2、通过以下步骤切换 DDE 桌面环境: +- 安装 [openEuler](https://www.openeuler.org/zh/download/) **24.03 LTS** -```bash -sudo yum install dde -y -sudo systemctl set-default graphical.target -sudo reboot -``` -3、修改分辨率为:1920 x 1080 +- 通过以下步骤切换 DDE 桌面环境: + + ```bash + sudo yum install dde -y + sudo systemctl set-default graphical.target + sudo reboot + ``` + + +![](./imgs/20241107142721.jpg) ## 环境部署 @@ -25,15 +30,26 @@ sudo reboot ```bash sudo pip3 install youqu - # 初始化工程 youqu-startproject dde - # 克隆用例仓库 cd dde/apps/ git clone https://gitee.com/openeuler/dde_autotest_euler.git ``` +```bash +dde/apps/ +├── dde_autotest_euler +│   ├── __init__.py +│   ├── case +│   ├── method +│   ├── config.py +│   ├── conftest.py +│   ├── dde.csv +│   ├── LICENSE +│   └── README.md +``` + **配置测试机的密码** 配置文件: @@ -65,13 +81,13 @@ python3 manage.py run ## 提交规范 -1、每次提交的 PR 只能包含一条提交。 +- 每次提交的 PR 只能包含一条提交。 -2、提交 PR 时要在标题中对提交的内容进行简单描述,要求清晰明了。 +- 提交 PR 时要在标题中对提交的内容进行简单描述,要求清晰明了。 -3、PR 的内容应当是有价值的,无关紧要的内容或非常简单的优化可以与其他内容一起提交。 +- PR 的内容应当是有价值的,无关紧要的内容或非常简单的优化可以与其他内容一起提交。 -4、提交的代码应当注重规范性,提交前要对代码的格式与内容进行检查。 +- 提交的代码应当注重规范性,提交前要对代码的格式与内容进行检查。 ## 常见问题 Q: OCR识别、图像识别服务器不可用? @@ -80,4 +96,8 @@ Q: OCR识别、图像识别服务器不可用? ## 用例列表 -[在线表格](https://doc.weixin.qq.com/sheet/e3_Ab8A1gYLABUA8lV99qfQWO7XU3Vhn?scode=AEoAsgdxAAYAl5RLlkAJgAbQaKAB8&tab=BB08J2) \ No newline at end of file +[在线表格](https://doc.weixin.qq.com/sheet/e3_Ab8A1gYLABUA8lV99qfQWO7XU3Vhn?scode=AEoAsgdxAAYAl5RLlkAJgAbQaKAB8&tab=BB08J2) + + + +[![Fork me on Gitee](https://gitee.com/openeuler/dde_autotest_euler/widgets/widget_2.svg)](https://gitee.com/openeuler/dde_autotest_euler) \ No newline at end of file diff --git a/case/test_dde_1270985.py b/case/test_dde_1270985.py index 9ab608b..8038414 100644 --- a/case/test_dde_1270985.py +++ b/case/test_dde_1270985.py @@ -27,6 +27,6 @@ class TestDdeCase(BaseCase): DdeMethod().dde_control_center.click_by_attr("Btn_确定") sleep(2) DdeMethod().dde_control_center.delete_other_time_area_by_control_center() - DdeMethod().close_window() + except: DdeMethod().dde_control_center.kill_dde_control_center() diff --git a/case/test_dde_1270989.py b/case/test_dde_1270989.py index e913ec4..8fd9ea3 100644 --- a/case/test_dde_1270989.py +++ b/case/test_dde_1270989.py @@ -1,9 +1,12 @@ from apps.dde_autotest_euler.case.base_case import BaseCase from apps.dde_autotest_euler.method.dde_method import DdeMethod from src import sleep +import pytest class TestDdeCase(BaseCase): + + @pytest.mark.timeout(100000) def test_dde_1270989(self): """控制中心中手动修改时间""" euler = DdeMethod() diff --git a/case/test_dde_1271009.py b/case/test_dde_1271009.py index c003df2..635d439 100644 --- a/case/test_dde_1271009.py +++ b/case/test_dde_1271009.py @@ -15,4 +15,4 @@ class TestDdeCase(BaseCase): def teardown_method(self): """将分辨率重置,关闭控制中心窗口""" DdeMethod().reset_resolution_by_control_center() - DdeMethod().close_window() + diff --git a/case/test_dde_1271027.py b/case/test_dde_1271027.py index 93c8935..207b905 100644 --- a/case/test_dde_1271027.py +++ b/case/test_dde_1271027.py @@ -1,3 +1,5 @@ +import pytest + from apps.dde_autotest_euler.case.base_case import BaseCase from apps.dde_autotest_euler.method.dde_method import DdeMethod from src import sleep @@ -5,14 +7,15 @@ from src import CmdCtl as Cmd class TestDdeCase(BaseCase): + def test_dde_1271027(self): """控制中心中修改非当前用户密码""" DdeMethod().add_common_account_by_control_center() sleep(6) - a = Cmd.run_cmd("echo uostest12#$ | sudo -S grep '^test:' /etc/shadow") + a = Cmd.sudo_run_cmd("grep '^test:' /etc/shadow") DdeMethod().change_other_account_password_by_control() sleep(3) - b = Cmd.run_cmd("echo uostest12#$ | sudo -S grep '^test:' /etc/shadow") + b = Cmd.sudo_run_cmd("grep '^test:' /etc/shadow") self.assert_not_equal(a, b) def teardown_method(self): diff --git a/case/test_dde_1271031.py b/case/test_dde_1271031.py index 89c8343..4b3cf5a 100644 --- a/case/test_dde_1271031.py +++ b/case/test_dde_1271031.py @@ -3,6 +3,7 @@ from apps.dde_autotest_euler.method.dde_method import DdeMethod class TestDdeCase(BaseCase): + def test_dde_1271031_1(self): """删除普通账户(非当前登陆)""" euler = DdeMethod() diff --git a/case/test_dde_1271055.py b/case/test_dde_1271055.py index 3fbd75e..70db689 100644 --- a/case/test_dde_1271055.py +++ b/case/test_dde_1271055.py @@ -9,49 +9,46 @@ from apps.dde_autotest_euler.method.dde_method import DdeMethod class TestDdeCase(BaseCase): - def test_dde_1271055_1(self, clear_process_1): + def test_dde_1271055_1(self): """启动器打开画板""" euler = DdeMethod() euler.open_software_by_launcher("huaban") sleep(5) self.assert_process_status(True, "deepin-draw") - def test_dde_1271055_2(self, clear_process_2): + def test_dde_1271055_2(self): """桌面打开画板""" euler = DdeMethod() euler.dde_dock.click_launcher_btn_by_attr() euler.dde_launcher.click_search_box_by_attr() Src.input("huaban") sleep(3) - euler.dde_dock.right_click_by_ocr("画板") + euler.dde_launcher.right_click_by_attr("画板") Src.select_menu(2) - sleep(2) - euler.deepin_draw.double_click_by_img("deepin_draw_icon.png") + sleep(1) + Src.esc() + euler.click_restore() + sleep(1) + euler.dde_dock.double_click_by_img("deepin_draw_icon.png") sleep(5) self.assert_process_status(True, "deepin-draw") - DdeMethod().deepin_draw.kill_process_by_cmd("deepin-draw") + DdeMethod().kill_process("deepin-draw") sleep(3) - euler.deepin_draw.right_click_by_img("deepin_draw_icon.png") + euler.dde_dock.right_click_by_img("deepin_draw_icon.png") Src.select_menu(1) sleep(5) self.assert_process_status(True, "deepin-draw") - def test_dde_1271055_3(self, clear_process_1): + def test_dde_1271055_3(self): """终端打开画板""" Cmd.run_cmd("deepin-draw &") - sleep(3) + sleep(5) self.assert_process_status(True, "deepin-draw") - @pytest.fixture - def clear_process_1(self): - """清理环境""" - yield - DdeMethod().deepin_draw.kill_process_by_cmd("deepin-draw") - - @pytest.fixture - def clear_process_2(self): - """清理环境""" + @pytest.fixture(autouse=True) + def clear(self): + DdeMethod().kill_process("deepin-draw") yield - DdeMethod().deepin_draw.kill_process_by_cmd("deepin-draw") - DdeMethod().deepin_draw.click_by_img("deepin_draw_icon.png") - Src.delete() + DdeMethod().kill_process("deepin-draw") + DdeMethod().click_restore() + DdeMethod().esc() diff --git a/case/test_dde_1271057.py b/case/test_dde_1271057.py index 61791f2..eb13876 100644 --- a/case/test_dde_1271057.py +++ b/case/test_dde_1271057.py @@ -22,9 +22,10 @@ class TestDdeCase(BaseCase): sleep(1) euler.click_save_btn_in_pop_window() sleep(1) - DdeMethod().dde_dock.kill_process_by_cmd("deepin-draw") + DdeMethod().kill_process("deepin-draw") sleep(2) euler.open_software_by_launcher("wenjianguanliqi") + sleep(5) euler.dde_dock.click_by_ocr("主目录") euler.dde_dock.double_click_by_ocr("未命名") sleep(5) @@ -34,6 +35,6 @@ class TestDdeCase(BaseCase): def clear_file_in_home_and_kill_process(self): """清除测试文件,关闭进程""" yield - DdeMethod().dde_dock.kill_process_by_cmd("deepin-draw") - DdeMethod().dde_dock.kill_process_by_cmd("dde-file-manager") + DdeMethod().kill_process("deepin-draw") + DdeMethod().kill_process("dde-file-manager") Cmd.run_cmd("rm ~/未命名.ddf") diff --git a/case/test_dde_1271073.py b/case/test_dde_1271073.py index 9e5c0b9..0f77d90 100644 --- a/case/test_dde_1271073.py +++ b/case/test_dde_1271073.py @@ -16,7 +16,7 @@ class TestDdeCase(BaseCase): euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() @@ -28,10 +28,13 @@ class TestDdeCase(BaseCase): def test_dde_1271073_2(self): """文本编辑器-关闭标签,打开文件进行修改后用ctrl+w关闭当前标签""" euler = DdeMethod() + euler.dde_dock.create_file_in_documents_by_cmd("test.txt") + euler.open_software_by_launcher("wenbenbianjiqi") + sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() @@ -45,10 +48,13 @@ class TestDdeCase(BaseCase): def test_dde_1271073_3(self): """文本编辑器-关闭标签,打开文件进行修改后右键关闭当前标签""" euler = DdeMethod() + euler.dde_dock.create_file_in_documents_by_cmd("test.txt") + euler.open_software_by_launcher("wenbenbianjiqi") + sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() @@ -59,13 +65,16 @@ class TestDdeCase(BaseCase): sleep(2) self.assert_element_not_exist("$/deepin-editor//test.txt") - def test_dde_1271073_4(self, clear_file_in_documents): + def test_dde_1271073_4(self): """文本编辑器-关闭标签,打开文件进行修改后点击标签右方关闭按钮关闭当前标签""" euler = DdeMethod() + euler.dde_dock.create_file_in_documents_by_cmd("test.txt") + euler.open_software_by_launcher("wenbenbianjiqi") + sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() @@ -76,10 +85,10 @@ class TestDdeCase(BaseCase): sleep(2) self.assert_element_not_exist("$/deepin-editor//test.txt") - @pytest.fixture + @pytest.fixture(autouse=True) def clear_file_in_documents(self): """清除测试文件并且关闭文本编辑器""" yield sleep(1) - DdeMethod().dde_dock.kill_process_by_cmd("deepin-editor") + DdeMethod().kill_process("deepin-editor") DdeMethod().dde_dock.delete_file_in_documents_by_cmd("test.txt") diff --git a/case/test_dde_1271075.py b/case/test_dde_1271075.py index 9f0d82f..ae411da 100644 --- a/case/test_dde_1271075.py +++ b/case/test_dde_1271075.py @@ -9,13 +9,13 @@ class TestDdeCase(BaseCase): def test_dde_1271075_1(self): """文本编辑器——另存为 非重复文件名""" euler = DdeMethod() - euler.create_file_in_documents_by_cmd("test.txt") + euler.dde_dock.create_file_in_documents_by_cmd("test.txt") euler.open_software_by_launcher("wenbenbianjiqi") sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() @@ -27,7 +27,7 @@ class TestDdeCase(BaseCase): euler.rename_file_in_pop_window_by_attr("new.txt") self.assert_file_exist("~/Documents/new.txt") - def test_dde_1271075_2(self, clear_file_in_documents): + def test_dde_1271075_2(self): """文本编辑器——另存为 重复文件名""" euler = DdeMethod() sleep(3) @@ -38,15 +38,18 @@ class TestDdeCase(BaseCase): euler.rename_file_same_name_in_pop_window_by_attr("new.txt") self.assert_image_exist_in_dde("test_dde_1271075.png") - @pytest.fixture + @pytest.fixture(autouse=True) def clear_file_in_documents(self): """清除测试文件并且关闭文本编辑器""" + DdeMethod().kill_process("dde-file-manager") + DdeMethod().kill_process("deepin-editor") yield sleep(1) - DdeMethod().close_window() + sleep(1) - DdeMethod().close_window() + sleep(1) - DdeMethod().kill_process_by_cmd("deepin-editor") - DdeMethod().delete_file_in_documents_by_cmd("new.txt") - DdeMethod().delete_file_in_documents_by_cmd("test.txt") + DdeMethod().kill_process("deepin-editor") + DdeMethod().kill_process("dde-file-manager") + DdeMethod().dde_dock.delete_file_in_documents_by_cmd("new.txt") + DdeMethod().dde_dock.delete_file_in_documents_by_cmd("test.txt") diff --git a/case/test_dde_1271077.py b/case/test_dde_1271077.py index 9d769e4..66c78a7 100644 --- a/case/test_dde_1271077.py +++ b/case/test_dde_1271077.py @@ -8,29 +8,29 @@ class TestDdeCase(BaseCase): def test_dde_1271077(self): """在文本编辑器中删除文字内容""" euler = DdeMethod() - euler.create_file_in_documents_by_cmd("test.txt") + euler.dde_dock.create_file_in_documents_by_cmd("test.txt") euler.open_software_by_launcher("wenbenbianjiqi") sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() sleep(3) - euler.right_click_by_ocr("is") + euler.dde_dock.right_click_by_ocr("is") self.assert_ocr_not_exist("除") - euler.double_click_by_img("test_txt_details.png") - euler.right_click_by_ocr("is") + euler.dde_dock.double_click_by_img("test_txt_details.png") + euler.dde_dock.right_click_by_ocr("is") sleep(1) - euler.click_by_ocr("除") + euler.dde_dock.click_by_ocr("除") self.assert_image_not_exist_in_dde("test_dde_1271077.png") sleep(2) Src.ctrl_a() - euler.right_click_by_ocr("is") + euler.dde_dock.right_click_by_ocr("is") sleep(1) - euler.click_by_ocr("除") + euler.dde_dock.click_by_ocr("除") self.assert_ocr_not_exist("is") def teardown_method(self): @@ -39,4 +39,6 @@ class TestDdeCase(BaseCase): sleep(1) DdeMethod().deepin_editor.close_tab_by_attr("test.txt") DdeMethod().deepin_editor.quit_editor_by_ocr() - DdeMethod().delete_file_in_documents_by_cmd("test.txt") + DdeMethod().dde_dock.delete_file_in_documents_by_cmd("test.txt") + DdeMethod().kill_process("dde-file-manager") + DdeMethod().kill_process("deepin-editor") diff --git a/case/test_dde_1271089.py b/case/test_dde_1271089.py index 0a3906f..f9dbfb4 100644 --- a/case/test_dde_1271089.py +++ b/case/test_dde_1271089.py @@ -1,3 +1,5 @@ +import pytest + from src import Src from apps.dde_autotest_euler.case.base_case import BaseCase from src import sleep @@ -24,3 +26,12 @@ class TestDdeCase(BaseCase): Src.alt_f4() sleep(3) self.assert_process_status(False, "deepin-editor") + + + @pytest.fixture(autouse=True) + def clear(self): + DdeMethod().kill_process("dde-file-manager") + DdeMethod().kill_process("deepin-editor") + yield + DdeMethod().kill_process("dde-file-manager") + DdeMethod().kill_process("deepin-editor") diff --git a/case/test_dde_1271091.py b/case/test_dde_1271091.py index 9d679fb..9671781 100644 --- a/case/test_dde_1271091.py +++ b/case/test_dde_1271091.py @@ -9,13 +9,13 @@ class TestDdeCase(BaseCase): def test_dde_1271091_1(self): """在文本编辑器中对修改内容进行保存""" euler = DdeMethod() - euler.create_file_in_documents_by_cmd("test.txt") + euler.dde_dock.create_file_in_documents_by_cmd("test.txt") euler.open_software_by_launcher("wenbenbianjiqi") sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() @@ -27,13 +27,13 @@ class TestDdeCase(BaseCase): def test_dde_1271091_2(self): """在文本编辑器中对修改内容进行保存""" euler = DdeMethod() - euler.create_file_in_documents_by_cmd("test.txt") + euler.dde_dock.create_file_in_documents_by_cmd("test.txt") euler.open_software_by_launcher("wenbenbianjiqi") sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() @@ -44,8 +44,12 @@ class TestDdeCase(BaseCase): @pytest.fixture(autouse=True) def clear_test_file(self): """删除测试文件,关闭文本编辑器窗口""" + DdeMethod().kill_process("dde-file-manager") + DdeMethod().kill_process("deepin-editor") yield DdeMethod().deepin_editor.close_tab_by_attr("test.txt") DdeMethod().deepin_editor.quit_editor_by_ocr() - DdeMethod().delete_file_in_documents_by_cmd("test.txt") + DdeMethod().dde_dock.delete_file_in_documents_by_cmd("test.txt") sleep(3) + DdeMethod().kill_process("dde-file-manager") + DdeMethod().kill_process("deepin-editor") diff --git a/case/test_dde_1271093.py b/case/test_dde_1271093.py index 23e6c53..fc1ed05 100644 --- a/case/test_dde_1271093.py +++ b/case/test_dde_1271093.py @@ -6,31 +6,31 @@ from apps.dde_autotest_euler.method.dde_method import DdeMethod class TestDdeCase(BaseCase): - def test_dde_1271093_1(self, clear_test_file_1): + def test_dde_1271093_1(self): """用文本编辑器打开txt文件""" euler = DdeMethod() - euler.create_file_in_documents_by_cmd("test1.txt") + euler.dde_dock.create_file_in_documents_by_cmd("test1.txt") euler.open_software_by_launcher("wenbenbianjiqi") sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() self.assert_ocr_exist("This is test message") - def test_dde_1271093_2(self, clear_test_file_2): + def test_dde_1271093_2(self): """用文本编辑器打开xml文件""" euler = DdeMethod() - euler.create_file_in_documents_by_cmd("test1.xml") + euler.dde_dock.create_file_in_documents_by_cmd("test1.xml") euler.open_software_by_launcher("wenbenbianjiqi") sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() @@ -39,37 +39,24 @@ class TestDdeCase(BaseCase): def test_dde_1271093_3(self, clear_test_file_3): """用文本编辑器打开json文件""" euler = DdeMethod() - euler.create_file_in_documents_by_cmd("test1.json") + euler.dde_dock.create_file_in_documents_by_cmd("test1.json") euler.open_software_by_launcher("wenbenbianjiqi") sleep(6) euler.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.choose_open_file_option_by_ocr() sleep(3) - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() sleep(2) Src.ctrl_a() Src.enter() self.assert_ocr_exist("This is test message") - @pytest.fixture() + @pytest.fixture(autouse=True) def clear_test_file_1(self): """删除测试文件,关闭文本编辑器窗口""" + DdeMethod().kill_process("dde-file-manager") + DdeMethod().kill_process("deepin-editor") yield - DdeMethod().delete_file_in_documents_by_cmd("test1.txt") - DdeMethod().close_window() - sleep(3) - - @pytest.fixture() - def clear_test_file_2(self): - """删除测试文件,关闭文本编辑器窗口""" - yield - DdeMethod().delete_file_in_documents_by_cmd("test1.xml") - DdeMethod().close_window() - sleep(3) - - @pytest.fixture() - def clear_test_file_3(self): - """删除测试文件,关闭文本编辑器窗口""" - yield - DdeMethod().delete_file_in_documents_by_cmd("test1.json") - DdeMethod().close_window() + DdeMethod().dde_dock.delete_file_in_documents_by_cmd("test1.txt") + DdeMethod().kill_process("dde-file-manager") + DdeMethod().kill_process("deepin-editor") diff --git a/case/test_dde_1271123.py b/case/test_dde_1271123.py index adb705c..eefdc01 100644 --- a/case/test_dde_1271123.py +++ b/case/test_dde_1271123.py @@ -1,3 +1,5 @@ +import pytest + from src import Src from apps.dde_autotest_euler.case.base_case import BaseCase from apps.dde_autotest_euler.method.dde_method import DdeMethod @@ -15,9 +17,11 @@ class TestDdeCase(BaseCase): Src.enter() sleep(6) DdeMethod().browser.click_menu_icon_by_img() - self.assert_ocr_exist("退出") + self.assert_ocr_exist("同步") - def teardown_method(self): + @pytest.fixture(autouse=True) + def clear(self): """关闭Firefox浏览器""" - DdeMethod().browser.click_close_btn_by_attr() - sleep(2) + DdeMethod().kill_process("firefox") + yield + DdeMethod().kill_process("firefox") diff --git a/case/test_dde_1271135.py b/case/test_dde_1271135.py index 8348e67..bb531b3 100644 --- a/case/test_dde_1271135.py +++ b/case/test_dde_1271135.py @@ -1,3 +1,5 @@ +import pytest + from apps.dde_autotest_euler.case.base_case import BaseCase from apps.dde_autotest_euler.method.dde_method import DdeMethod from src import sleep @@ -9,9 +11,12 @@ class TestDdeCase(BaseCase): """在浏览器中新打开网页,并且进入百度界面""" DdeMethod().open_software_by_launcher("Firefox") sleep(10) - DdeMethod().browser.right_click_by_ocr("开源社区") - sleep(3) - self.assert_image_exist_in_dde("test_dde_1271135_1.png") + res = DdeMethod().browser.ocr("开源社区", "恢复浏览状态") + for k, v in res.items(): + if v: + Src.right_click(*v) + break + sleep(2) DdeMethod().browser.click_by_attr("新建标签页") DdeMethod().browser.click_by_attr("使用 百度 搜索,或者输入网址") Src.input_message("www.baidu.com") @@ -19,6 +24,9 @@ class TestDdeCase(BaseCase): Src.enter() self.assert_image_exist_in_dde("test_dde_1271135_2.png") - def teardown_method(self): - """关闭浏览器""" - DdeMethod().browser.click_close_btn_by_attr() + @pytest.fixture(autouse=True) + def clear(self): + """关闭Firefox浏览器""" + DdeMethod().kill_process("firefox") + yield + DdeMethod().kill_process("firefox") diff --git a/case/test_dde_1271153.py b/case/test_dde_1271153.py index 26e8654..0f78bb0 100644 --- a/case/test_dde_1271153.py +++ b/case/test_dde_1271153.py @@ -1,7 +1,8 @@ +import pytest + from src import sleep from apps.dde_autotest_euler.case.base_case import BaseCase from apps.dde_autotest_euler.method.dde_method import DdeMethod -from src import Src class TestDdeCase(BaseCase): @@ -12,6 +13,10 @@ class TestDdeCase(BaseCase): sleep(2) self.assert_process_status(True, "deepin-compressor") - def teardown_method(self): - """""" - Src.alt_f4() + + @pytest.fixture(autouse=True) + def clear(self): + """关闭Firefox浏览器""" + DdeMethod().kill_process("deepin-compressor") + yield + DdeMethod().kill_process("deepin-compressor") diff --git a/case/test_dde_1271157.py b/case/test_dde_1271157.py index cc5d6a9..e26cccb 100644 --- a/case/test_dde_1271157.py +++ b/case/test_dde_1271157.py @@ -1,6 +1,8 @@ -from src import sleep +import pytest + from apps.dde_autotest_euler.case.base_case import BaseCase from apps.dde_autotest_euler.method.dde_method import DdeMethod +from src import sleep class TestDdeCase(BaseCase): @@ -9,11 +11,13 @@ class TestDdeCase(BaseCase): euler = DdeMethod() euler.open_software_by_launcher("rizhishoujigongju") sleep(6) - euler.deepin_log_viewer.deepin_log_viewer_input_root_password() + euler.dde_polkit_agent.input_password() euler.export_all_log_by_attr() self.assert_image_exist_in_dde("test_dde_1271169") - def teardown_method(self): - """通过命令关闭日志收集工具""" - DdeMethod().dde_dock.kill_process_by_cmd("deepin-log-viewer") - DdeMethod().dde_dock.delete_all_file_in_documents_by_cmd() + @pytest.fixture(autouse=True) + def clear(self): + """关闭Firefox浏览器""" + DdeMethod().kill_process("deepin-log-viewer") + yield + DdeMethod().kill_process("deepin-log-viewer") diff --git a/case/test_dde_1271159.py b/case/test_dde_1271159.py index 83142f4..6d27ba9 100644 --- a/case/test_dde_1271159.py +++ b/case/test_dde_1271159.py @@ -12,8 +12,9 @@ class TestDdeCase(BaseCase): euler.open_software_by_launcher("rizhishoujigongju") sleep(6) euler.dde_polkit_agent.click_by_attr("EditableText_passwordinput") - Src.input_message(conf.PASSWORD) - Src.enter() + euler.input_message("1") + sleep(3) + euler.enter() sleep(2) self.assert_image_exist_in_dde("test_dde_1271159_1") @@ -22,9 +23,9 @@ class TestDdeCase(BaseCase): euler = DdeMethod() euler.open_software_by_launcher("rizhishoujigongju") sleep(6) - euler.deepin_log_viewer.deepin_log_viewer_input_root_password() + euler.dde_polkit_agent.input_password() self.assert_ocr_exist("状态") def teardown_method(self): """通过命令关闭日志收集工具""" - DdeMethod().kill_process_by_cmd("deepin-log-viewer") + DdeMethod().kill_process("deepin-log-viewer") diff --git a/case/test_dde_1271169.py b/case/test_dde_1271169.py index ff61a24..8e9ef68 100644 --- a/case/test_dde_1271169.py +++ b/case/test_dde_1271169.py @@ -14,5 +14,5 @@ class TestDdeCase(BaseCase): def teardown_method(self): """通过命令关闭日志收集工具""" - DdeMethod().dde_dock.kill_process_by_cmd("deepin-log-viewer") + DdeMethod().kill_process("deepin-log-viewer") DdeMethod().dde_dock.delete_all_file_in_documents_by_cmd() diff --git a/case/test_dde_1271175.py b/case/test_dde_1271175.py index e4c5ff6..fe9da60 100644 --- a/case/test_dde_1271175.py +++ b/case/test_dde_1271175.py @@ -26,4 +26,4 @@ class TestDdeCase(BaseCase): def clear_file_in_home_and_kill_process(self): """关闭进程""" yield - DdeMethod().kill_process_by_cmd("deepin-system-monitor") + DdeMethod().kill_process("deepin-system-monitor") diff --git a/case/test_dde_1271199.py b/case/test_dde_1271199.py index 340be43..6d0b9e1 100644 --- a/case/test_dde_1271199.py +++ b/case/test_dde_1271199.py @@ -40,5 +40,5 @@ class TestDdeCase(BaseCase): def teardown_method(self): """通过命令关闭启动器""" - DdeMethod().dde_dock.kill_process_by_cmd("deepin-devicemanager") + DdeMethod().kill_process("deepin-devicemanager") sleep(3) diff --git a/case/test_dde_1271201.py b/case/test_dde_1271201.py index 7a3eb48..8c88bd5 100644 --- a/case/test_dde_1271201.py +++ b/case/test_dde_1271201.py @@ -15,7 +15,7 @@ class TestDdeCase(BaseCase): sleep(6) euler.deepin_editor.deepin_editor.click_menu_btn_by_attr() euler.deepin_editor.deepin_editor.choose_open_file_option_by_ocr() - euler.deepin_editor.click_documents_in_pop_window_by_img() + euler.click_documents_in_pop_window_by_img() Src.ctrl_a() Src.enter() sleep(2) @@ -23,7 +23,7 @@ class TestDdeCase(BaseCase): def teardown_method(self): """通过命令删除测试文件,关闭设备管理器以及文本编辑器器""" - DdeMethod().dde_dock.kill_process_by_cmd("deepin-devicemanager") - DdeMethod().dde_dock.kill_process_by_cmd("deepin-editor") + DdeMethod().kill_process("deepin-devicemanager") + DdeMethod().kill_process("deepin-editor") DdeMethod().dde_dock.delete_all_file_in_documents_by_cmd() sleep(3) diff --git a/case/test_dde_1271213.py b/case/test_dde_1271213.py index e5bfd36..e39f813 100644 --- a/case/test_dde_1271213.py +++ b/case/test_dde_1271213.py @@ -20,4 +20,4 @@ class TestDdeCase(BaseCase): def teardown_method(self): """关闭字体管理器""" - DdeMethod().dde_dock.kill_process("deepin-font-manager") + DdeMethod().kill_process("deepin-font-manager") diff --git a/case/test_dde_1271247.py b/case/test_dde_1271247.py index bdb93a4..5ba39c4 100644 --- a/case/test_dde_1271247.py +++ b/case/test_dde_1271247.py @@ -8,7 +8,7 @@ class TestDdeCase(BaseCase): def test_dde_1271247(self): """终端关闭""" app_name = "deepin-terminal" - DdeMethod().dde_dock.kill_process_by_cmd(app_name) + DdeMethod().kill_process(app_name) Src.ctrl_alt_t() sleep(6) DdeMethod().deepin_terminal.click_option_by_attr() diff --git a/case/test_dde_1271297.py b/case/test_dde_1271297.py index 7faa989..3200703 100644 --- a/case/test_dde_1271297.py +++ b/case/test_dde_1271297.py @@ -15,4 +15,4 @@ class TestDdeCase(BaseCase): def teardown_method(self): """关闭控制中心""" - DdeMethod().close_window() + diff --git a/case/test_dde_1271309.py b/case/test_dde_1271309.py index 4cd9c2c..cf65250 100644 --- a/case/test_dde_1271309.py +++ b/case/test_dde_1271309.py @@ -12,7 +12,7 @@ class TestDdeCase(BaseCase): sleep(1) # 等待 1 秒,判断launcher是否启动 self.assert_image_exist_in_dde("test_dde_1271309.png") - DdeMethod().dde_dock.kill_process_by_cmd("dde-launcher") + DdeMethod().kill_process("dde-launcher") sleep(3) self.assert_image_not_exist_in_dde("test_dde_1271309.png") sleep(3) diff --git a/case/test_dde_1271313.py b/case/test_dde_1271313.py index 97a09c6..26d5981 100644 --- a/case/test_dde_1271313.py +++ b/case/test_dde_1271313.py @@ -34,5 +34,5 @@ class TestDdeCase(BaseCase): def teardown_method(self): """通过命令关闭启动器""" - DdeMethod().dde_dock.kill_process_by_cmd("dde-launcher") + DdeMethod().kill_process("dde-launcher") sleep(3) diff --git a/case/test_dde_1271317.py b/case/test_dde_1271317.py index 8e1cfbc..de45f87 100644 --- a/case/test_dde_1271317.py +++ b/case/test_dde_1271317.py @@ -31,5 +31,5 @@ class TestDdeCase(BaseCase): def teardown_method(self): """通过命令关闭启动器""" - DdeMethod().dde_dock.kill_process_by_cmd("dde-launcher") + DdeMethod().kill_process("dde-launcher") sleep(3) diff --git a/case/test_dde_1271319.py b/case/test_dde_1271319.py index 8df2e82..cfdd23f 100644 --- a/case/test_dde_1271319.py +++ b/case/test_dde_1271319.py @@ -42,5 +42,5 @@ class TestDdeCase(BaseCase): def teardown_method(self): """通过命令关闭启动器""" - DdeMethod().dde_dock.kill_process_by_cmd("dde-launcher") + DdeMethod().kill_process("dde-launcher") sleep(3) diff --git a/case/test_dde_1271321.py b/case/test_dde_1271321.py index ca22282..0056368 100644 --- a/case/test_dde_1271321.py +++ b/case/test_dde_1271321.py @@ -13,7 +13,7 @@ class TestDdeCase(BaseCase): sleep(2) self.assert_ocr_exist("日历") sleep(1) - DdeMethod().dde_dock.kill_process("dde-calendar") + DdeMethod().kill_process("dde-calendar") sleep(1) euler.dde_dock.right_click_datetime_icon_by_attr() Src.select_menu(1) @@ -30,4 +30,4 @@ class TestDdeCase(BaseCase): def teardown_method(self): """通过命令关闭控制中心窗口""" - DdeMethod().dde_dock.kill_process("dde-calendar") + DdeMethod().kill_process("dde-calendar") diff --git a/case/test_dde_1271331.py b/case/test_dde_1271331.py index 5998774..a816d3a 100644 --- a/case/test_dde_1271331.py +++ b/case/test_dde_1271331.py @@ -19,5 +19,5 @@ class TestDdeCase(BaseCase): def teardown_method(self): """关闭窗口""" - DdeMethod().dde_dock.kill_process("deepin-terminal") + DdeMethod().kill_process("deepin-terminal") time.sleep(2) diff --git a/dde.csv b/dde.csv index 32f7d20..573a81d 100644 --- a/dde.csv +++ b/dde.csv @@ -5,10 +5,10 @@ 1271009,,, 1271011,,, 1271027,,, -1271031,,, -1271033,,, +1271031,skip-删除用户对系统影响太大,, +1271033,skip-删除用户对系统影响太大,, 1271035,,, -1271037,,, +1271037,skip-修改用户名密码对系统影响太大,, 1271041,,, 1271055,,, 1271057,,, @@ -44,3 +44,4 @@ 1271321,,, 1271327,,, 1271331,,, +1271175,,, diff --git a/imgs/20241107142721.jpg b/imgs/20241107142721.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d1a80d3263a8948e340127842886dc9e1eae952 GIT binary patch literal 47478 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

3Ti5FulAiU5?w@56beu|!_CW@|qE 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%0D^0>H5!+QEf z*L2&Bgt4u<29uA5OvjHCG#pfe+cz6jOF8>*cqOpdB>|~se5MMbgSuUB`cpZ z%Z+Qlal1mKvFpP&`_KD^>bN;Z1Dk8iRdId$#Wi=FDLgHb8fSm``4;1i{QY}BC`$hE zz^x{+d(Dt(@u{%aru(&;+c&-zFzW^fa&5aw(u>O%ul9S9(*jo>e0ow@Ge6|p)|c(V z4jn@=hO-+s-rK$`>ZD`+$-6z$roM;w`}K-;Y7=~BmG%cLHKe|qU;X^s{Grs%G~@c| zSDo3?*Bs+M-EiJ@mLPCoplVN)zuOQ#hukvRLA-q7lqh9aq~`zE-jzl*aYoU>AXq&j zD1uNR3J6GqqU=rEh&3Q6t85l3BC;w_Spp%3xUflrVKGV!8W4mkn`i_J2m+!3*%eVD z0umAx*@7lul1ZoS>5tfR$e;f7|D5l;^WOK~z3SKw`crxtJ+!P8*jT5Ve>YX#uLc~ zzEkyesc@&h3g@mm7qyTD_Z9X^gmY<*o0X6ur+$EgYTpqF3~*H3kidx=nVc05J$)j) zCqldBpkAgY{0G-y>9*BBf(o)S_n-q`nFbL1&1%+lOjTTGR~1(N`N# zs$S5-BmFB(IK}Ct0tv82OW9G2-wt5@RVp+Wve<)AZv>m1CBk_J;^~5G5&*KX;c6&$ z=@e=fEdij1$N;}tN`dUp=^LUh`m`s*=TNC17}~KOYJ%EsE4DIoNx>)B)=MwjPIN2? zR2w>jdJEyo%_GdK%Dp@uVBP(qDa2~_vCYSBr2Z#MsG+qE&pC)8ImPpc26f4ceuq{; zw=oJjL7v*f1CcdG*K3BoOq{x_w~&moNHK~m!;z>}Eg}iv#6gWmChCD_2}|3c9aJ1d zCe`wUzGw-s)c|tHjELbQ8@vl5T3Y?gLxnphz>^FKAp8JL1*(J)e?sp?x&*+}LEW0> zPuUkk=)#Jo64Q?TqK0uEw6Vneg-Csz+mp@sunur>F z?7wh%d1S_04Gl4v{_C1%ZfVSyLve0;`Uu$JBH&}@?Nn2{H);9_+bb}sVCj*v!DZj7Ucb9}!cWxc%; z=68QF;yg6*-W?-U@zxalmQ1wGI>|I7eY9 z<7>vK6v!4Mt+`G8Fj`WJYZJG=Iu)8 zf6CH(6-zHAH|&LDA@KJ7(^19icZ)s2lq5|yWaloE+HH?qOs9UcRCk`&&OroKQ&nc# z+h`2a_7h#$9xM7`V?1him}wTL2yZE7QrN_9l>W-kDe}2CKumHzr)JqxgDCawyiG>n z_>OYJ?*0K^9H}pY7;{?oH2~&toGSFP#T*HxQ7WwjAXZDh*`5S)ON%V2o?`nwMu`VA{BnlH!dD<57F* zNEcSdIIZf(dsRNtBqz<6r;vtwE?S*O``E8M=zCN-=?vn@-RjfB=uZ=`!jn>l!(#K) zFL59d*1+7HY)~fylPbT@o`8!WFga0bCxFIoqWx{(-|HkQB+(pL1JKZl#w z8}BL8bRgg(F&V7>(5I8xh@?|NV++rVX>ZoGA@fTzaWvbY3&u=xDYK12n!#=3tADM%9vLB3* zNauHuD`U&vpxTO~wP0?kx}-pr?WJzTo5uoeE+NBZ&*++Aw=z7Sl+NXS4Ch;GMtVspHtK zS%(i#oxK$(nBW}G;eFgBs7i)s(3MQ4*>!24d|fusN7SfQAq7Qs$xYATBN9QQMFoSk zI^~*XcAF5vW?LN4!Yc}{s&cRTWuAM;i(Wn2Had5S(CRqp%hLyF;)t_$}`)>~`86%PN&A0=ZfaK+$r*)Jh literal 0 HcmV?d00001 diff --git a/method/base_method.py b/method/base_method.py index bf89e35..8ef7c5f 100644 --- a/method/base_method.py +++ b/method/base_method.py @@ -32,11 +32,11 @@ class BaseMethod(Src): def click_by_ocr(self, text): """通过ocr识别点击""" - self.ocrx(text).click() + self.click(*self.ocr(text)) def double_click_by_ocr(self, text): """通过ocr识别双击""" - self.ocrx(text).double_click() + self.double_click(*self.ocr(text)) def click_by_img(self, img_name): """通过图像识别点击""" @@ -48,7 +48,7 @@ class BaseMethod(Src): def right_click_by_ocr(self, text): """通过ocr识别右键点击""" - self.ocrx(text).right_click() + self.right_click(*self.ocr(text)) def right_click_by_img(self, img_name): """通过图片识别右键点击""" @@ -67,10 +67,6 @@ class BaseMethod(Src): """通过给定名称在 文档 目录下删除所有文件""" self.run_cmd(f"rm ~/Documents/*") - def kill_process_by_cmd(self, process): - """通过命令关闭进程""" - self.run_cmd(f"killall {process}") - @classmethod def get_process_status(cls, app: str, grep_list: str = None) -> bool: """ diff --git a/method/dde_method.py b/method/dde_method.py index e30e2d1..c7af39c 100644 --- a/method/dde_method.py +++ b/method/dde_method.py @@ -95,13 +95,6 @@ class DdeMethod(Src): ShortCut.enter() sleep(2) - def close_window(self): - """关闭窗口""" - try: - self.dde_control_center.click_by_img("close_window_btn.png") - except custom_exception.TemplateElementNotFound: - self.dde_control_center.click_by_img(f"close_window_btn_1.png") - def delete_keyboard_layout_in_control_center(self): """在控制中心的键盘布局视图删除除选中之外的布局""" self.dde_control_center.click_edit_btn_in_keyboard_layout() @@ -182,7 +175,8 @@ class DdeMethod(Src): sleep(3) self.dde_control_center.click_by_attr("Btn_创建") sleep(1) - self.input_message(self.account_message) + from setting import conf + self.input_message(conf.PASSWORD) sleep(3) self.enter() sleep(5) @@ -243,7 +237,7 @@ class DdeMethod(Src): def change_resolution_by_control_center(self): """在控制中心中修改屏幕分辨率""" self.dde_control_center.enter_view_by_search_box("xianshi") - self.dde_control_center.click_by_attr("1920×1080") + self.dde_control_center.click_by_attr("1024×768 (推荐)") self.dde_control_center.click_by_attr("1280×800") sleep(1) self.dde_control_center.click_by_attr("Btn_保存") @@ -252,7 +246,7 @@ class DdeMethod(Src): def reset_resolution_by_control_center(self): """在控制中心中将修改的分辨率调回1920x1080""" self.dde_control_center.click_by_attr("1280×800") - self.dde_control_center.click_by_attr("1920×1080") + self.dde_control_center.click_by_attr("1024×768 (推荐)") sleep(1) self.dde_control_center.click_by_attr("Btn_保存") sleep(2) @@ -322,8 +316,8 @@ class DdeMethod(Src): def click_documents_in_pop_window_by_img(self): """在文本编辑器的文件管理器弹窗中点击左侧 文档 目录""" - self.click_by_ocr("系统盘") - self.deepin_editor.click_by_img("file_manager_left_view_documents.png") + self.dde_desktop.click_by_ocr("系统盘") + self.dde_desktop.click_by_img("file_manager_left_view_documents.png") def rename_file_in_pop_window_by_attr(self, filename): """在弹出的文件保存窗口中对文件进行重命名并且保存,文件名需要包含后缀名,且文件名不可与文档目录下其他文件重复""" @@ -374,7 +368,8 @@ class DdeMethod(Src): """导出所有的日志""" self.deepin_log_viewer.click_by_img("deepin_log_viewer_export_all_log_icon.png") sleep(2) - self.deepin_log_viewer.deepin_log_viewer_input_root_password() + from apps.dde_autotest_euler.method.vender.dde_polkit_agent_method import DdePolkitAgentMethod + DdePolkitAgentMethod().input_password() self.click_documents_in_pop_window_by_img() self.click_save_btn_in_pop_window() sleep(1) diff --git a/method/vender/dde_control_center_method.py b/method/vender/dde_control_center_method.py index 6e9d244..d780bc5 100644 --- a/method/vender/dde_control_center_method.py +++ b/method/vender/dde_control_center_method.py @@ -83,3 +83,4 @@ class DdeControlCenterMethod(BaseMethod): def kill_dde_control_center(self): self.kill_process("dde-control-center") + self.esc() diff --git a/method/vender/dde_polkit_agent_method.py b/method/vender/dde_polkit_agent_method.py index d922cce..fad033a 100644 --- a/method/vender/dde_polkit_agent_method.py +++ b/method/vender/dde_polkit_agent_method.py @@ -1,4 +1,5 @@ from apps.dde_autotest_euler.method.base_method import BaseMethod +from src import sleep class DdePolkitAgentMethod(BaseMethod): @@ -9,3 +10,13 @@ class DdePolkitAgentMethod(BaseMethod): def click_by_attr(self, path): """在终端界面内点击右上角的【设置】按钮""" self.dog.element_click(path) + + def input_password(self): + """弹出鉴权窗口后输入管理员密码""" + sleep(2) + self.click_by_attr("EditableText_passwordinput") + from setting import conf + self.input_message(conf.PASSWORD) + sleep(3) + self.enter() + sleep(2) diff --git a/method/vender/deepin_editor_method.py b/method/vender/deepin_editor_method.py index 7398b86..825c922 100644 --- a/method/vender/deepin_editor_method.py +++ b/method/vender/deepin_editor_method.py @@ -21,21 +21,21 @@ class DeepinEditorMethod(BaseMethod): def choose_open_file_option_by_ocr(self): """在文本编辑器的菜单栏中选择 打开文件 选项""" - self.ocrx("打开文件").click() + self.click(*self.ocr("打开文件")) def choose_save_as_option_by_ocr(self): """在文本编辑器的的菜单栏中选择 另存为 选项""" - self.ocrx("另存为").click() + self.click(*self.ocr("另存为")) def choose_save_option_by_ocr(self): """在文本编辑器的的菜单栏中选择 保存 选项""" - self.ocrx("保存").click() + self.click(*self.ocr("保存")) def quit_editor_by_ocr(self): """通过菜单栏退出文本编辑器""" self.click_menu_btn_by_attr() sleep(2) - self.ocrx("退出").click() + self.click(*self.ocr("退出")) def close_tab_by_attr(self, tab_name): """在文本编辑器中通过元素,通过右键关闭标签(适用于修改,不适用于新建的标签)""" diff --git a/method/vender/deepin_log_viewer_method.py b/method/vender/deepin_log_viewer_method.py index 2194bfd..282c3ec 100644 --- a/method/vender/deepin_log_viewer_method.py +++ b/method/vender/deepin_log_viewer_method.py @@ -18,11 +18,13 @@ class DeepinLogViewerMethod(BaseMethod): """在日志收集工具中通过元素点击导出按钮""" self.click_by_attr("导 出") - def deepin_log_viewer_input_root_password(self): - """在日志收集工具弹出鉴权窗口后输入管理员密码""" - sleep(2) - self.click_by_attr("EditableText_passwordinput") - self.input_message(BaseMethod.account_message) - sleep(3) - self.enter() - sleep(2) + # def deepin_log_viewer_input_root_password(self): + # """在日志收集工具弹出鉴权窗口后输入管理员密码""" + # sleep(2) + # from apps.dde_autotest_euler.method.vender.dde_polkit_agent_method import DdePolkitAgentMethod + # DdePolkitAgentMethod().click_by_attr("EditableText_passwordinput") + # from setting import conf + # self.input_message(conf.PASSWORD) + # sleep(3) + # self.enter() + # sleep(2) -- Gitee