mangoautomation 1.0.57__py3-none-any.whl → 1.0.59__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mangoautomation might be problematic. Click here for more details.

Files changed (38) hide show
  1. mangoautomation/exceptions/_error_msg.py +1 -1
  2. mangoautomation/exceptions/error_msg.py +68 -0
  3. mangoautomation/models/__init__.py +2 -1
  4. mangoautomation/models/_ui_model.py +14 -7
  5. mangoautomation/uidrive/_async_element.py +29 -28
  6. mangoautomation/uidrive/_base_data.py +5 -3
  7. mangoautomation/uidrive/_sync_element.py +28 -27
  8. mangoautomation/uidrive/android/__init__.py +2 -2
  9. mangoautomation/uidrive/android/_application.py +9 -9
  10. mangoautomation/uidrive/android/_assertion.py +4 -4
  11. mangoautomation/uidrive/android/_element.py +16 -16
  12. mangoautomation/uidrive/android/_equipment.py +7 -7
  13. mangoautomation/uidrive/android/_new_android.py +1 -1
  14. mangoautomation/uidrive/android/_page.py +12 -12
  15. mangoautomation/uidrive/web/async_web/__init__.py +3 -4
  16. mangoautomation/uidrive/web/async_web/_assertion.py +5 -5
  17. mangoautomation/uidrive/web/async_web/_browser.py +6 -6
  18. mangoautomation/uidrive/web/async_web/_element.py +30 -21
  19. mangoautomation/uidrive/web/async_web/_input_device.py +10 -6
  20. mangoautomation/uidrive/web/async_web/_new_browser.py +4 -2
  21. mangoautomation/uidrive/web/async_web/_page.py +2 -1
  22. mangoautomation/uidrive/web/sync_web/__init__.py +3 -4
  23. mangoautomation/uidrive/web/sync_web/_assertion.py +4 -4
  24. mangoautomation/uidrive/web/sync_web/_browser.py +7 -6
  25. mangoautomation/uidrive/web/sync_web/_element.py +30 -18
  26. mangoautomation/uidrive/web/sync_web/_input_device.py +7 -6
  27. mangoautomation/uidrive/web/sync_web/_new_browser.py +4 -2
  28. mangoautomation/uidrive/web/sync_web/_page.py +1 -1
  29. mangoautomation-1.0.59.dist-info/METADATA +34 -0
  30. mangoautomation-1.0.59.dist-info/RECORD +59 -0
  31. {mangoautomation-1.0.57.dist-info → mangoautomation-1.0.59.dist-info}/WHEEL +1 -1
  32. tests/__init__.py +5 -0
  33. tests/get_ope.py +12 -0
  34. tests/test_ui_and.py +0 -24
  35. mangoautomation-1.0.57.dist-info/METADATA +0 -42
  36. mangoautomation-1.0.57.dist-info/RECORD +0 -57
  37. {mangoautomation-1.0.57.dist-info/licenses → mangoautomation-1.0.59.dist-info}/LICENSE +0 -0
  38. {mangoautomation-1.0.57.dist-info → mangoautomation-1.0.59.dist-info}/top_level.txt +0 -0
@@ -5,12 +5,12 @@
5
5
  import os
6
6
 
7
7
  import time
8
- from playwright.sync_api import Locator, Error
8
+ from playwright.sync_api import Locator, Error, TimeoutError
9
9
 
10
10
  from mangotools.decorator import sync_method_callback
11
11
  from mangotools.models import MethodModel
12
12
  from ....exceptions import MangoAutomationError
13
- from ....exceptions._error_msg import ERROR_MSG_0024, ERROR_MSG_0056
13
+ from ....exceptions.error_msg import ERROR_MSG_0024, ERROR_MSG_0056
14
14
  from ....tools import Meta
15
15
  from ....uidrive._base_data import BaseData
16
16
 
@@ -24,11 +24,15 @@ class SyncWebElement(metaclass=Meta):
24
24
  @sync_method_callback('web', '元素操作', 0, [MethodModel(f='locating')])
25
25
  def w_click(self, locating: Locator):
26
26
  """元素单击"""
27
+ if locating.count() < 1:
28
+ raise TimeoutError('元素个数小于1,直接操作超时!')
27
29
  locating.click()
28
30
 
29
31
  @sync_method_callback('web', '元素操作', 1, [MethodModel(f='locating')])
30
32
  def w_dblclick(self, locating: Locator):
31
33
  """元素双击"""
34
+ if locating.count() < 1:
35
+ raise TimeoutError('元素个数小于1,直接操作超时!')
32
36
  locating.dblclick()
33
37
 
34
38
  @sync_method_callback('web', '元素操作', 2, [MethodModel(f='locating')])
@@ -38,9 +42,11 @@ class SyncWebElement(metaclass=Meta):
38
42
 
39
43
  @sync_method_callback('web', '元素操作', 3, [
40
44
  MethodModel(f='locating'),
41
- MethodModel(f='input_value', p='请输入输入内容', d=True)])
45
+ MethodModel(n='输入文本', f='input_value', p='请输入输入内容', d=True)])
42
46
  def w_input(self, locating: Locator, input_value: str):
43
47
  """元素输入"""
48
+ if locating.count() < 1:
49
+ raise TimeoutError('元素个数小于1,直接操作超时!')
44
50
  locating.fill(str(input_value))
45
51
 
46
52
  @sync_method_callback('web', '元素操作', 4, [MethodModel(f='locating')])
@@ -51,9 +57,11 @@ class SyncWebElement(metaclass=Meta):
51
57
 
52
58
  @sync_method_callback('web', '元素操作', 5, [
53
59
  MethodModel(f='locating'),
54
- MethodModel(f='set_cache_key', p='请输入获取元素文本后存储的key', d=True)])
60
+ MethodModel(n='缓存的key', f='set_cache_key', p='请输入获取元素文本后存储的key', d=True)])
55
61
  def w_get_text(self, locating: Locator, set_cache_key=None):
56
62
  """获取元素文本"""
63
+ if locating.count() < 1:
64
+ raise TimeoutError('元素个数小于1,直接操作超时!')
57
65
  methods = [
58
66
  ("inner_text", lambda: locating.inner_text()),
59
67
  ("text_content", lambda: locating.text_content()),
@@ -75,9 +83,11 @@ class SyncWebElement(metaclass=Meta):
75
83
 
76
84
  @sync_method_callback('web', '元素操作', 5, [
77
85
  MethodModel(f='locating'),
78
- MethodModel(f='input_value', p='请输入输入内容', d=True)])
86
+ MethodModel(n='输入文本', f='input_value', p='请输入输入内容', d=True)])
79
87
  def w_clear_input(self, locating: Locator, input_value: str):
80
88
  """元素清空再输入"""
89
+ if locating.count() < 1:
90
+ raise TimeoutError('元素个数小于1,直接操作超时!')
81
91
  locating.clear()
82
92
  locating.fill(str(input_value))
83
93
 
@@ -88,37 +98,39 @@ class SyncWebElement(metaclass=Meta):
88
98
  elements = locating.all()
89
99
  for element in elements:
90
100
  element.click()
101
+ time.sleep(0.2)
91
102
 
92
103
  @sync_method_callback('web', '元素操作', 6, [
93
104
  MethodModel(f='locating'),
94
- MethodModel(f='file_path', p='请输入文件路径,参照帮助文档', d=True)])
105
+ MethodModel(n='文件名称', f='file_path', p='请输入文件路径,参照帮助文档', d=True)])
95
106
  def w_upload_files(self, locating: Locator, file_path: str | list):
96
107
  """拖拽文件上传"""
97
108
  try:
98
109
  if isinstance(file_path, str):
99
- locating.set_input_files(file_path)
110
+ locating.set_input_files(file_path, timeout=30000)
100
111
  else:
101
112
  for file in file_path:
102
- locating.set_input_files(file)
113
+ locating.set_input_files(file, timeout=30000)
103
114
  except Error:
104
115
  raise MangoAutomationError(*ERROR_MSG_0024)
105
116
 
106
117
  @sync_method_callback('web', '元素操作', 7, [
107
118
  MethodModel(f='locating'),
108
- MethodModel(f='file_path', p='请输入文件路径,参照帮助文档', d=True)])
119
+ MethodModel(n='文件名称', f='file_path', p='请输入文件路径,参照帮助文档', d=True)])
109
120
  def w_click_upload_files(self, locating: Locator, file_path: str | list):
110
121
  """点击并选择文件上传"""
111
- with self.base_data.page.expect_file_chooser() as fc_info:
122
+ with self.base_data.page.expect_file_chooser(timeout=30000) as fc_info:
112
123
  locating.click()
113
124
  file_chooser = fc_info.value
114
125
  file_chooser.set_files(file_path)
115
126
 
116
127
  @sync_method_callback('web', '元素操作', 8, [
117
128
  MethodModel(f='locating'),
118
- MethodModel(f='file_key', p='请输入文件存储路径的key,后续通过key获取文件保存的绝对路径', d=True)])
129
+ MethodModel(n='缓存的key', f='file_key', p='请输入文件存储路径的key,后续通过key获取文件保存的绝对路径',
130
+ d=True)])
119
131
  def w_download(self, locating: Locator, file_key: str):
120
132
  """下载文件"""
121
- with self.base_data.page.expect_download() as download_info:
133
+ with self.base_data.page.expect_download(timeout=30000) as download_info:
122
134
  locating.click()
123
135
  download = download_info.value
124
136
  file_name = download.suggested_filename
@@ -139,7 +151,7 @@ class SyncWebElement(metaclass=Meta):
139
151
 
140
152
  @sync_method_callback('web', '元素操作', 10, [
141
153
  MethodModel(f='locating'),
142
- MethodModel(f='n', p='请输入循环点击的时间', d=True)])
154
+ MethodModel(n='点击时间', f='n', p='请输入循环点击的时间', d=True)])
143
155
  def w_time_click(self, locating: Locator, n: int):
144
156
  """循环点击N秒"""
145
157
  try:
@@ -154,7 +166,7 @@ class SyncWebElement(metaclass=Meta):
154
166
 
155
167
  @sync_method_callback('web', '元素操作', 11, [
156
168
  MethodModel(f='locating'),
157
- MethodModel(f='n', p='请输入向上像素', d=True)])
169
+ MethodModel(n='像素大小', f='n', p='请输入向上像素', d=True)])
158
170
  def w_drag_up_pixel(self, locating: Locator, n: int):
159
171
  """往上拖动N个像素"""
160
172
  try:
@@ -172,7 +184,7 @@ class SyncWebElement(metaclass=Meta):
172
184
 
173
185
  @sync_method_callback('web', '元素操作', 12, [
174
186
  MethodModel(f='locating'),
175
- MethodModel(f='n', p='请输入向下像素', d=True)])
187
+ MethodModel(n='像素大小', f='n', p='请输入向下像素', d=True)])
176
188
  def w_drag_down_pixel(self, locating: Locator, n: int):
177
189
  """往下拖动N个像素"""
178
190
  try:
@@ -190,7 +202,7 @@ class SyncWebElement(metaclass=Meta):
190
202
 
191
203
  @sync_method_callback('web', '元素操作', 13, [
192
204
  MethodModel(f='locating'),
193
- MethodModel(f='n', p='请输入向左像素', d=True)])
205
+ MethodModel(n='像素大小', f='n', p='请输入向左像素', d=True)])
194
206
  def w_drag_left_pixel(self, locating: Locator, n: int):
195
207
  """往左拖动N个像素"""
196
208
  try:
@@ -208,7 +220,7 @@ class SyncWebElement(metaclass=Meta):
208
220
 
209
221
  @sync_method_callback('web', '元素操作', 14, [
210
222
  MethodModel(f='locating'),
211
- MethodModel(f='n', p='请输入向右像素', d=True)])
223
+ MethodModel(n='像素大小', f='n', p='请输入向右像素', d=True)])
212
224
  def w_drag_right_pixel(self, locating: Locator, n: int):
213
225
  """往右拖动N个像素"""
214
226
  try:
@@ -225,7 +237,7 @@ class SyncWebElement(metaclass=Meta):
225
237
 
226
238
  @sync_method_callback('web', '元素操作', 15, [
227
239
  MethodModel(f='locating'),
228
- MethodModel(f='path', p='请输入截图保存路径', d=True)])
240
+ MethodModel(n='截图路径', f='path', p='请输入截图保存路径', d=True)])
229
241
  def w_ele_screenshot(self, locating: Locator, path: str):
230
242
  """元素截图"""
231
243
  locating.screenshot(path=path)
@@ -15,19 +15,19 @@ class SyncWebDeviceInput(metaclass=Meta):
15
15
  self.base_data = base_data
16
16
 
17
17
  @sync_method_callback('web', '输入设备', 0, [
18
- MethodModel(f='keyboard', p='请输入键盘名称,首字母大写', d=True)])
18
+ MethodModel(n='按键值', f='keyboard', p='请输入键盘名称,首字母大写', d=True)])
19
19
  def w_keys(self, keyboard: str):
20
20
  """模拟按下指定的键"""
21
21
  self.base_data.page.keyboard.press(str(keyboard))
22
22
 
23
23
  @sync_method_callback('web', '输入设备', 1, [
24
- MethodModel(f='y', p='请输入向上滚动像素', d=True)])
24
+ MethodModel(n='y坐标', f='y', p='请输入向上滚动像素', d=True)])
25
25
  def w_wheel(self, y):
26
26
  """鼠标上下滚动像素,负数代表向上"""
27
27
  self.base_data.page.mouse.wheel(0, y)
28
28
 
29
29
  @sync_method_callback('web', '输入设备', 2, [
30
- MethodModel(f='x', p='请输入点击的x轴', d=True), MethodModel(f='y', p='请输入点击的y轴', d=True)])
30
+ MethodModel(n='x坐标', f='x', p='请输入点击的x轴', d=True), MethodModel(n='y坐标', f='y', p='请输入点击的y轴', d=True)])
31
31
  def w_mouse_click(self, x: float, y: float):
32
32
  """鼠标点击坐标"""
33
33
  self.base_data.page.mouse.click(x, y)
@@ -60,19 +60,20 @@ class SyncWebDeviceInput(metaclass=Meta):
60
60
  center_y = viewport_size['height'] / 2
61
61
  self.base_data.page.mouse.click(center_x, center_y)
62
62
 
63
- @sync_method_callback('web', '输入设备', 5, [MethodModel(f='text', p='请输入键盘输入的内容', d=True)])
63
+ @sync_method_callback('web', '输入设备', 5, [
64
+ MethodModel(n='输入文本', f='text', p='请输入键盘输入的内容', d=True)])
64
65
  def w_keyboard_type_text(self, text: str):
65
66
  """模拟人工输入文字"""
66
67
  self.base_data.page.keyboard.type(str(text))
67
68
 
68
69
  @sync_method_callback('web', '输入设备', 6, [
69
- MethodModel(f='text', p='请输入键盘输入的内容', d=True)])
70
+ MethodModel(n='输入文本', f='text', p='请输入键盘输入的内容', d=True)])
70
71
  def w_keyboard_insert_text(self, text: str):
71
72
  """直接输入文字"""
72
73
  self.base_data.page.keyboard.insert_text(str(text))
73
74
 
74
75
  @sync_method_callback('web', '输入设备', 7, [
75
- MethodModel(f='count', p='请输入要删除字符串的个数', d=True)])
76
+ MethodModel(n='删除个数', f='count', p='请输入要删除字符串的个数', d=True)])
76
77
  def w_keyboard_delete_text(self, count: int):
77
78
  """删除光标左侧的字符"""
78
79
  for _ in range(0, int(count) + 1):
@@ -21,7 +21,7 @@ from playwright.sync_api import sync_playwright, Page, BrowserContext, Browser,
21
21
 
22
22
  from ....enums import BrowserTypeEnum
23
23
  from ....exceptions import MangoAutomationError
24
- from ....exceptions._error_msg import ERROR_MSG_0057, ERROR_MSG_0008, ERROR_MSG_0062, ERROR_MSG_0009, ERROR_MSG_0055
24
+ from ....exceptions.error_msg import ERROR_MSG_0057, ERROR_MSG_0008, ERROR_MSG_0062, ERROR_MSG_0009, ERROR_MSG_0055
25
25
 
26
26
 
27
27
  class SyncWebNewBrowser:
@@ -114,7 +114,9 @@ class SyncWebNewBrowser:
114
114
  args_dict["no_viewport"] = True
115
115
  if self.web_recording and self.videos_path:
116
116
  args_dict["record_video_dir"] = self.videos_path
117
- return self.browser.new_context(**args_dict)
117
+ context = self.browser.new_context(**args_dict)
118
+ context.set_default_timeout(3000)
119
+ return context
118
120
 
119
121
  def new_page(self, context: BrowserContext) -> Page:
120
122
  try:
@@ -18,7 +18,7 @@ class SyncWebPage(metaclass=Meta):
18
18
  self.base_data = base_data
19
19
 
20
20
  @sync_method_callback('web', '页面操作', 0, [
21
- MethodModel(f='individual', p='请输入页签下标,从1开始数', d=True)])
21
+ MethodModel(n='页签下标', f='individual', p='请输入页签下标,从1开始数', d=True)])
22
22
  def w_switch_tabs(self, individual: int):
23
23
  """切换页签"""
24
24
  pages = self.base_data.context.pages
@@ -0,0 +1,34 @@
1
+ Metadata-Version: 2.1
2
+ Name: mangoautomation
3
+ Version: 1.0.59
4
+ Summary: 测试工具
5
+ Home-page: https://gitee.com/mao-peng/testkit
6
+ Author: 毛鹏
7
+ Author-email: 729164035@qq.com
8
+ Classifier: Programming Language :: Python :: 3.10
9
+ Classifier: Programming Language :: Python :: 3.11
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ License-File: LICENSE
13
+ Requires-Dist: setuptools >=68.2.0
14
+ Requires-Dist: pydantic >=2.9.2
15
+ Requires-Dist: playwright ==1.43.0
16
+ Requires-Dist: uiautomation >=2.0.20
17
+ Requires-Dist: uiautomator2 >=3.2.5
18
+ Requires-Dist: mangotools >=1.1.42
19
+ Requires-Dist: adbutils ~=2.8.9
20
+ Requires-Dist: uiautodev >=0.9.0
21
+
22
+ # testkit
23
+
24
+ #### 介绍
25
+
26
+ 测试工具
27
+
28
+ #### 安装教程
29
+
30
+ 1. pip install mangokit
31
+
32
+ #### 使用说明
33
+
34
+ 1.
@@ -0,0 +1,59 @@
1
+ mangoautomation/__init__.py,sha256=6nV7fyiPU5G-kWbrpCQUlkJdhJyPQh27qQaSvNvQkzQ,125
2
+ mangoautomation/enums/__init__.py,sha256=TZnjNeYQRysRolki82U0_s8BQamQ2EjlWFJ-RDDPel8,387
3
+ mangoautomation/enums/_base_enum.py,sha256=dpaXsdhWY08BhIzi1B1ksh_p18ZTmhWvTYhbd3n_ONQ,1176
4
+ mangoautomation/enums/_ui_enum.py,sha256=rdkejsyc4ogZbyNfZcp1q0V0bDPo14vg0A6or6ShaXA,4494
5
+ mangoautomation/exceptions/__init__.py,sha256=4CmTPcSFypENe3zXzsBUjA5MxXLugnP14dlakmItVjs,227
6
+ mangoautomation/exceptions/_error_msg.py,sha256=S51nDyUr0Jr4hE3i6D24JoGij_d_eeVNsUe2MTuRdJo,5341
7
+ mangoautomation/exceptions/_exceptions.py,sha256=BiyST1QPivpfIOuKn1gKhpXOyBv6gfip_KvlQuu8ctw,385
8
+ mangoautomation/exceptions/error_msg.py,sha256=S51nDyUr0Jr4hE3i6D24JoGij_d_eeVNsUe2MTuRdJo,5341
9
+ mangoautomation/models/__init__.py,sha256=25zmLzbB4gObJ6nqN7jPYP9LcdlixDKBGVoc7JrwggI,323
10
+ mangoautomation/models/_ui_model.py,sha256=5Fus-YwIn-Pz4KxtAJMwSkYFLTCAhXpNGts6j7d5XUw,1592
11
+ mangoautomation/tools/__init__.py,sha256=J-uPfaTZMMo7CL2PY6_5qCO24iIBTtUJTuFXDJz_AZg,296
12
+ mangoautomation/tools/_mate.py,sha256=9lk_EJnAX_OyXbe5WacyHkkcEr2ScBgasl6eUnlklWA,405
13
+ mangoautomation/tools/_uiautodev.py,sha256=RMOQMXse744xwUDb1_l7qDv9mUiqZt1Gm5sbB-nlgDk,1388
14
+ mangoautomation/uidrive/__init__.py,sha256=3xD94fw5QQvBPMPDq2o-SiJI_zt0AdJuB_X0eAFth8g,430
15
+ mangoautomation/uidrive/_async_element.py,sha256=n7WtGCseUPYqLkJD10mGJpcVH2HT6EbP8WVrmhipyAA,13885
16
+ mangoautomation/uidrive/_base_data.py,sha256=xDjgBJ6CDFajUy18ft-NKe-7vKe7WtgMC9zV6gRrmPY,3946
17
+ mangoautomation/uidrive/_driver_object.py,sha256=7RGiAIPHU_bQtwVPEprnXt-HOzoKuKn_Bu2RZxjSAVs,2055
18
+ mangoautomation/uidrive/_sync_element.py,sha256=RO-6NWhjqGo2Q5zF14wlmuv2Z2ASgQg7X9Es0eRhaws,13738
19
+ mangoautomation/uidrive/android/__init__.py,sha256=HBYY1L-g7OASchquaUXH7NcpxXpuJVx6Zuw0JbNgq-Y,5524
20
+ mangoautomation/uidrive/android/_application.py,sha256=ic9RbiOAft3wWi6QH6PgcRVN8kiahe3wMyErxsHp3FU,2854
21
+ mangoautomation/uidrive/android/_assertion.py,sha256=ps6uBP4KxcBGJkrlG7m-Caq1rz4UfJhKUNU2YBetu-c,4349
22
+ mangoautomation/uidrive/android/_customization.py,sha256=pCLMmruozOyCJQZWAYupxxKqpWmZyCYsfSBw3XW7vf0,381
23
+ mangoautomation/uidrive/android/_element.py,sha256=3IEUCh9nzgB0hFG0nMcoPC28wMAoDxMS2Tf3gcmm80g,7212
24
+ mangoautomation/uidrive/android/_equipment.py,sha256=TeVFB5QzKTNIAfcV7DMYkQZVzgIGx4_hWQ3Z1RsIKXc,5215
25
+ mangoautomation/uidrive/android/_new_android.py,sha256=WldFsGm5QnJ9QVPtWxRgwCiWSX3jYObFxAPCQ5xSKyg,1636
26
+ mangoautomation/uidrive/android/_page.py,sha256=Ep9btx-2dgaEmjHAVExjB35HQx29PGZ0DHNndIYNpJc,4620
27
+ mangoautomation/uidrive/ios/__init__.py,sha256=SdxI8e5AOoAb8JTaDoMkObezIluJ50nm2b6zeDHv1PI,125
28
+ mangoautomation/uidrive/pc/__init__.py,sha256=gp3T9C5bSA78dv1AgWXeB9yQQi6q5Tkd0NedCencGWo,2275
29
+ mangoautomation/uidrive/pc/assertion.py,sha256=mH25hZ2i4T8kA1F2loW_nuPJ-Hb0z1pwILTJqkwwpLA,125
30
+ mangoautomation/uidrive/pc/customization.py,sha256=hHf66ImrVxFlGtONrWSHUDrYjmWFc4ANJ883TIrJFG8,239
31
+ mangoautomation/uidrive/pc/element.py,sha256=LdlWHhvXsaHH6jTp6nNrF81OWPtx81dct4yDBHikQBg,519
32
+ mangoautomation/uidrive/pc/input_device.py,sha256=F6ZqKja3XkJww66x3l9Idha3R19D832J-5TfiKWmUso,353
33
+ mangoautomation/uidrive/pc/new_windows.py,sha256=lETHZa7cW8Z0iUShzgVTRxqivkYaOo8WIE58q_8KYfQ,2338
34
+ mangoautomation/uidrive/web/__init__.py,sha256=MgTklzty_SvX4UemCnqJuViq3cIjUgAjFoEtP-mcDWw,123
35
+ mangoautomation/uidrive/web/async_web/__init__.py,sha256=Xa5WwPyH_xKHJ6E3j87wYIDIA52fO9DZqkNe981vmJc,8378
36
+ mangoautomation/uidrive/web/async_web/_assertion.py,sha256=2tPSGiJSKmrkiM0bvOd6nfTKTAjDAlosgXcn-oiN0zM,12820
37
+ mangoautomation/uidrive/web/async_web/_browser.py,sha256=mx1m4bPZSdvNOD_8V3gcFUjGMfU3oXj6IJJdlT4ukD0,5381
38
+ mangoautomation/uidrive/web/async_web/_customization.py,sha256=uw6p9uLHLXglgSkH4qjDl1v0iGlaNjvf8LljRH5cAHU,347
39
+ mangoautomation/uidrive/web/async_web/_element.py,sha256=qEwvGZGzDBNhvYiKB3rlgtTS9D07ln-5iPOUIwKzIdI,11064
40
+ mangoautomation/uidrive/web/async_web/_input_device.py,sha256=0EjGkCQWjKY69bTIILNoX7p_6VVfYAVgjNaj4t2r6nk,3440
41
+ mangoautomation/uidrive/web/async_web/_new_browser.py,sha256=v-OXD-uYD7XagupxSlG4g_ZBsRq_Jpo88iwE_A_Ilfs,6202
42
+ mangoautomation/uidrive/web/async_web/_page.py,sha256=DIdyu-TmAUmgkwXDeNzB0p9bqc0Csomj_7ahWcO8ZH0,2175
43
+ mangoautomation/uidrive/web/sync_web/__init__.py,sha256=wV1_y-lsX5qW30ERIvP-X0eRdnwVV3L7uTRCMiowqfo,7938
44
+ mangoautomation/uidrive/web/sync_web/_assertion.py,sha256=2GOhwD7CKtUbsdWmo0aT9pxfBFUQ_bYrjdvRoIBwDNs,12594
45
+ mangoautomation/uidrive/web/sync_web/_browser.py,sha256=b-nBdskqKTFX4Y7xRs8NqEXYulJj9CP2hgLJ9qWnWlQ,5245
46
+ mangoautomation/uidrive/web/sync_web/_customization.py,sha256=E_pfI8gKd0O6r4huJIvA6hoW-X9fSDVL4zEUqhHgxwE,355
47
+ mangoautomation/uidrive/web/sync_web/_element.py,sha256=QIwgQ0cdMc9-oa5TwRTKxxwndUgvVCTogTohSNKhzRs,10683
48
+ mangoautomation/uidrive/web/sync_web/_input_device.py,sha256=zPFd8xFuLeem9Io0ZBkiaJlFoPSHea-A87_vnYHEg80,3287
49
+ mangoautomation/uidrive/web/sync_web/_new_browser.py,sha256=APGUFhOVAW68x-6y9tQLZJkn2utfR-PrpjgP8WE38SE,6149
50
+ mangoautomation/uidrive/web/sync_web/_page.py,sha256=LC7FWr6Exv-KSiSU0y2Zxjd39_QLohe_UD5nvA8htUM,2045
51
+ tests/__init__.py,sha256=fdlqghHH7eXneovXweQjn6gVb8jwm6wprtPw5ksV_IA,350
52
+ tests/get_ope.py,sha256=LhATAdHROfUKTmndNitFth4b845P7jDN9DugEwq8vAU,383
53
+ tests/test_ui_and.py,sha256=A_0pqG6s5Ts02He7P3NwuDSK3g9Q3VP1Sb_P8wq6g0Q,125
54
+ tests/test_ui_web.py,sha256=MFaUN8O5qKOMMgyk2eelhKZsYcSJm0Do6pCgsdBZEH4,2765
55
+ mangoautomation-1.0.59.dist-info/LICENSE,sha256=03WP-mgFmo8ofRYDe1HVDQUEUKQZ2q6P6Q-2A4c-46A,1085
56
+ mangoautomation-1.0.59.dist-info/METADATA,sha256=EzQOW-l_WBm7rXM8cy2nxm1-mm9GFcVb8KTTiTs26vQ,816
57
+ mangoautomation-1.0.59.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
58
+ mangoautomation-1.0.59.dist-info/top_level.txt,sha256=g-uCmjvEODG8WFbmwbGM0-G0zHntHv8ZsS0PQRaMGtE,22
59
+ mangoautomation-1.0.59.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: bdist_wheel (0.41.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
tests/__init__.py CHANGED
@@ -3,3 +3,8 @@
3
3
  # @Description:
4
4
  # @Time : 2024-09-07 23:25
5
5
  # @Author : 毛鹏
6
+ import random
7
+
8
+ data_list = [{'exp': 2, 'loc': 'get_by_role("textbox", name="请输入1密码")'},
9
+ {'exp': 0, 'loc': '//input[@type="password"]'}]
10
+ print(random.randint(0, len(data_list) - 1), len(data_list))
tests/get_ope.py ADDED
@@ -0,0 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+ # @Project: 芒果测试平台
3
+ # @Description:
4
+ # @Time : 2025-08-31 17:41
5
+ # @Author : 毛鹏
6
+ import json
7
+ from mangoautomation.uidrive import *
8
+ from mangotools.decorator import func_info
9
+
10
+ print(json.dumps(func_info, ensure_ascii=False, indent=4))
11
+ with open('ope.json', 'w') as f:
12
+ f.write(json.dumps(func_info, ensure_ascii=False, indent=4))
tests/test_ui_and.py CHANGED
@@ -3,27 +3,3 @@
3
3
  # @Description:
4
4
  # @Time : 2025-05-03 10:02
5
5
  # @Author : 毛鹏
6
- import traceback
7
-
8
-
9
- #
10
- # driver_object = DriverObject()
11
- # driver_object.set_android('ed789e3b')
12
- # test_data = DataProcessor()
13
- # base_data = BaseData(test_data)
14
- # base_data.android = driver_object.android.new_android()
15
- # android_driver = AndroidDriver(base_data)
16
- # android_driver.a_close_app('aaasdsadawdwadwa')
17
- #
18
-
19
-
20
- def a_ass(a, b):
21
- assert a == b, f'断言A=B失败, a的值:{a}, b的值:{b}'
22
-
23
-
24
- try:
25
- a_ass(1, 2)
26
- except AssertionError as error:
27
- print(error.args[1])
28
- print(type(error))
29
- traceback.print_exc()
@@ -1,42 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: mangoautomation
3
- Version: 1.0.57
4
- Summary: 测试工具
5
- Home-page: https://gitee.com/mao-peng/testkit
6
- Author: 毛鹏
7
- Author-email: 729164035@qq.com
8
- Classifier: Programming Language :: Python :: 3.10
9
- Classifier: Programming Language :: Python :: 3.11
10
- Classifier: Programming Language :: Python :: 3.12
11
- Classifier: Programming Language :: Python :: 3.13
12
- License-File: LICENSE
13
- Requires-Dist: setuptools>=68.2.0
14
- Requires-Dist: pydantic>=2.9.2
15
- Requires-Dist: playwright==1.43.0
16
- Requires-Dist: uiautomation>=2.0.20
17
- Requires-Dist: uiautomator2>=3.2.5
18
- Requires-Dist: mangotools>=1.1.32
19
- Requires-Dist: adbutils~=2.8.9
20
- Requires-Dist: uiautodev>=0.9.0
21
- Dynamic: author
22
- Dynamic: author-email
23
- Dynamic: classifier
24
- Dynamic: description
25
- Dynamic: home-page
26
- Dynamic: license-file
27
- Dynamic: requires-dist
28
- Dynamic: summary
29
-
30
- # testkit
31
-
32
- #### 介绍
33
-
34
- 测试工具
35
-
36
- #### 安装教程
37
-
38
- 1. pip install mangokit
39
-
40
- #### 使用说明
41
-
42
- 1.
@@ -1,57 +0,0 @@
1
- mangoautomation/__init__.py,sha256=6nV7fyiPU5G-kWbrpCQUlkJdhJyPQh27qQaSvNvQkzQ,125
2
- mangoautomation/enums/__init__.py,sha256=TZnjNeYQRysRolki82U0_s8BQamQ2EjlWFJ-RDDPel8,387
3
- mangoautomation/enums/_base_enum.py,sha256=dpaXsdhWY08BhIzi1B1ksh_p18ZTmhWvTYhbd3n_ONQ,1176
4
- mangoautomation/enums/_ui_enum.py,sha256=rdkejsyc4ogZbyNfZcp1q0V0bDPo14vg0A6or6ShaXA,4494
5
- mangoautomation/exceptions/__init__.py,sha256=4CmTPcSFypENe3zXzsBUjA5MxXLugnP14dlakmItVjs,227
6
- mangoautomation/exceptions/_error_msg.py,sha256=wnyHrBPE4ZGcWhvz8bD2K-8rMRRwcUIVVYIHWdhYM2U,5335
7
- mangoautomation/exceptions/_exceptions.py,sha256=BiyST1QPivpfIOuKn1gKhpXOyBv6gfip_KvlQuu8ctw,385
8
- mangoautomation/models/__init__.py,sha256=VaL1_5Dvm2g70NGgWCKzbje4VQzJhcnAAdg4JP1WJ_U,269
9
- mangoautomation/models/_ui_model.py,sha256=wKiBNpGDhSVCAYf798I0bMzdhCGXfSOptMCQrBLTUCM,1416
10
- mangoautomation/tools/__init__.py,sha256=J-uPfaTZMMo7CL2PY6_5qCO24iIBTtUJTuFXDJz_AZg,296
11
- mangoautomation/tools/_mate.py,sha256=9lk_EJnAX_OyXbe5WacyHkkcEr2ScBgasl6eUnlklWA,405
12
- mangoautomation/tools/_uiautodev.py,sha256=RMOQMXse744xwUDb1_l7qDv9mUiqZt1Gm5sbB-nlgDk,1388
13
- mangoautomation/uidrive/__init__.py,sha256=3xD94fw5QQvBPMPDq2o-SiJI_zt0AdJuB_X0eAFth8g,430
14
- mangoautomation/uidrive/_async_element.py,sha256=-nkYBazbYlitsTIfN8XhKIM8GitQifoZ0aTqaOH05Nk,13757
15
- mangoautomation/uidrive/_base_data.py,sha256=ur2Ts40MAhOYXb0vGVXZdSwEVCI3Csri9I9f1pw1r4Y,3766
16
- mangoautomation/uidrive/_driver_object.py,sha256=7RGiAIPHU_bQtwVPEprnXt-HOzoKuKn_Bu2RZxjSAVs,2055
17
- mangoautomation/uidrive/_sync_element.py,sha256=Zdg5LwNeZBjctpojPmjQfMgrsAAne_w_KWFwhucSlxA,13576
18
- mangoautomation/uidrive/android/__init__.py,sha256=SWn7PwRZOf34LCE9KigClDaV8R0n70rqLsG6hCeAok0,5499
19
- mangoautomation/uidrive/android/_application.py,sha256=EeEM0MPtOPeYeKx92mtMFWqGpCRmri-D_CzXvPt13RA,2800
20
- mangoautomation/uidrive/android/_assertion.py,sha256=Gzic7cH3_Vr6NLiMBPRJr7q1F8YFF2dEopINMR4XQFc,4289
21
- mangoautomation/uidrive/android/_customization.py,sha256=pCLMmruozOyCJQZWAYupxxKqpWmZyCYsfSBw3XW7vf0,381
22
- mangoautomation/uidrive/android/_element.py,sha256=lOrQyQhOoJ2LrbiQ9t0wxH7LcpwZgyDxU0iUuKaSjRo,6989
23
- mangoautomation/uidrive/android/_equipment.py,sha256=WRaXLf4DuVzxG8TL5c4lHam6hZo_jsWwitYQUun3Srk,5125
24
- mangoautomation/uidrive/android/_new_android.py,sha256=UHj2DaNBfgvnJxYIzmUNc3gqTIRXxL_5kxEDQVbzWNw,1637
25
- mangoautomation/uidrive/android/_page.py,sha256=cOPKlIucf-rqtpm9AkpZtAnDd9QGvJRGLXS15kPVhIM,4454
26
- mangoautomation/uidrive/ios/__init__.py,sha256=SdxI8e5AOoAb8JTaDoMkObezIluJ50nm2b6zeDHv1PI,125
27
- mangoautomation/uidrive/pc/__init__.py,sha256=gp3T9C5bSA78dv1AgWXeB9yQQi6q5Tkd0NedCencGWo,2275
28
- mangoautomation/uidrive/pc/assertion.py,sha256=mH25hZ2i4T8kA1F2loW_nuPJ-Hb0z1pwILTJqkwwpLA,125
29
- mangoautomation/uidrive/pc/customization.py,sha256=hHf66ImrVxFlGtONrWSHUDrYjmWFc4ANJ883TIrJFG8,239
30
- mangoautomation/uidrive/pc/element.py,sha256=LdlWHhvXsaHH6jTp6nNrF81OWPtx81dct4yDBHikQBg,519
31
- mangoautomation/uidrive/pc/input_device.py,sha256=F6ZqKja3XkJww66x3l9Idha3R19D832J-5TfiKWmUso,353
32
- mangoautomation/uidrive/pc/new_windows.py,sha256=lETHZa7cW8Z0iUShzgVTRxqivkYaOo8WIE58q_8KYfQ,2338
33
- mangoautomation/uidrive/web/__init__.py,sha256=MgTklzty_SvX4UemCnqJuViq3cIjUgAjFoEtP-mcDWw,123
34
- mangoautomation/uidrive/web/async_web/__init__.py,sha256=awtvLCGjUKIx46d2rZpO2CcuBK2WAKZ7PN6yt6ztlBA,8401
35
- mangoautomation/uidrive/web/async_web/_assertion.py,sha256=iC_j2pZN1pr2kFmxjEb8fBSX91M0BmrcRKARe3JH-kQ,12761
36
- mangoautomation/uidrive/web/async_web/_browser.py,sha256=39YroURzagpq0HoEn1RZnNf1KDKXIgWpKSvp5L_Yut0,5286
37
- mangoautomation/uidrive/web/async_web/_customization.py,sha256=uw6p9uLHLXglgSkH4qjDl1v0iGlaNjvf8LljRH5cAHU,347
38
- mangoautomation/uidrive/web/async_web/_element.py,sha256=Si0ql_vGtgzacEaSEbglGTw96qdYHcsYEbYqgtIgYCo,10150
39
- mangoautomation/uidrive/web/async_web/_input_device.py,sha256=sMAMHb_8QyPx3pKci0gRDQc2O7h1OYMGyA7fCWl81iM,3288
40
- mangoautomation/uidrive/web/async_web/_new_browser.py,sha256=eCXa_WqCZfaom-PSBR9nM5x1XBQCPswUFT4134d3WDE,6133
41
- mangoautomation/uidrive/web/async_web/_page.py,sha256=TCYf79qQdVBBTTNq2COZFJVcLCgg5Ksu9lMgmQPVInU,2147
42
- mangoautomation/uidrive/web/sync_web/__init__.py,sha256=31U15FJftsv6yyDlKT-2zN0CNPyolZPRuPh7mdeKKas,7961
43
- mangoautomation/uidrive/web/sync_web/_assertion.py,sha256=hVA7-Z3CfPgkmtnK_3M5UGo6sct88W6AJfQTnrqu9jU,12534
44
- mangoautomation/uidrive/web/sync_web/_browser.py,sha256=c7xHkIIFPawlzcVkGjwqeKfWAM--87wEJb3V3Ysi29w,5146
45
- mangoautomation/uidrive/web/sync_web/_customization.py,sha256=E_pfI8gKd0O6r4huJIvA6hoW-X9fSDVL4zEUqhHgxwE,355
46
- mangoautomation/uidrive/web/sync_web/_element.py,sha256=KkgLxGVwdl4JhRkIbGrUA12BmHohggdalEGlnztyrSE,9783
47
- mangoautomation/uidrive/web/sync_web/_input_device.py,sha256=8t6tJgMb4zgb4Sv02XP3gUU0ZVbApCs3WaILv8Fe1iY,3169
48
- mangoautomation/uidrive/web/sync_web/_new_browser.py,sha256=5gd0Z2wyou0WCTPcMTjzos_3duB59djKJyTCXyULIZ8,6080
49
- mangoautomation/uidrive/web/sync_web/_page.py,sha256=MNekcL7o5YXEloeuvi3YrpOZxGhEWfrq-5i4PbtTLFg,2027
50
- mangoautomation-1.0.57.dist-info/licenses/LICENSE,sha256=03WP-mgFmo8ofRYDe1HVDQUEUKQZ2q6P6Q-2A4c-46A,1085
51
- tests/__init__.py,sha256=UhCNFqiVjxdh4CXESNo4oE7qfjpYYVkeHbSE5-7LGDY,125
52
- tests/test_ui_and.py,sha256=4k0_3bx_k2KbZifeRWGK65sxtdiPUOjkNzZ5oxjrc18,672
53
- tests/test_ui_web.py,sha256=MFaUN8O5qKOMMgyk2eelhKZsYcSJm0Do6pCgsdBZEH4,2765
54
- mangoautomation-1.0.57.dist-info/METADATA,sha256=LzBvQcMwyNfDpuTQfEAWe68y1Lcc3iVhXZaXEXouKpI,976
55
- mangoautomation-1.0.57.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
56
- mangoautomation-1.0.57.dist-info/top_level.txt,sha256=g-uCmjvEODG8WFbmwbGM0-G0zHntHv8ZsS0PQRaMGtE,22
57
- mangoautomation-1.0.57.dist-info/RECORD,,