mangoautomation 1.1.21__py3-none-any.whl → 1.1.23__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 (67) hide show
  1. mangoautomation/__init__.py +1 -1
  2. mangoautomation/enums/__init__.py +0 -2
  3. mangoautomation/exceptions/__init__.py +0 -3
  4. mangoautomation/exceptions/error_msg.py +4 -4
  5. mangoautomation/mangos/__init__.py +14 -0
  6. mangoautomation/mangos/__pycache__/__init__.cpython-310.pyc +0 -0
  7. mangoautomation/mangos/mangos.cp310-win_amd64.pyd +0 -0
  8. mangoautomation/mangos/mangos.cp312-win_amd64.pyd +0 -0
  9. mangoautomation/mangos/mangos.cpython-310-darwin.so +0 -0
  10. mangoautomation/mangos/mangos.cpython-310-x86_64-linux-gnu.so +0 -0
  11. mangoautomation/mangos/mangos.cpython-312-darwin.so +0 -0
  12. mangoautomation/mangos/mangos.cpython-312-x86_64-linux-gnu.so +0 -0
  13. mangoautomation/models/__init__.py +0 -2
  14. mangoautomation/models/_ui_model.py +2 -1
  15. mangoautomation/tools/__init__.py +0 -2
  16. mangoautomation/tools/_uiautodev.py +1 -3
  17. mangoautomation/uidrive/__init__.py +5 -7
  18. mangoautomation/uidrives/__init__.py +21 -0
  19. mangoautomation/{uidrive → uidrives}/_async_element.py +80 -52
  20. mangoautomation/{uidrive → uidrives}/_base_data.py +16 -4
  21. mangoautomation/{uidrive → uidrives}/_driver_object.py +2 -4
  22. mangoautomation/{uidrive → uidrives}/_sync_element.py +78 -50
  23. mangoautomation/{uidrive → uidrives}/android/__init__.py +2 -16
  24. mangoautomation/{uidrive → uidrives}/android/_application.py +1 -1
  25. mangoautomation/{uidrive → uidrives}/android/_assertion.py +1 -1
  26. mangoautomation/{uidrive → uidrives}/android/_customization.py +1 -1
  27. mangoautomation/{uidrive → uidrives}/android/_element.py +3 -3
  28. mangoautomation/{uidrive → uidrives}/android/_equipment.py +1 -1
  29. mangoautomation/{uidrive → uidrives}/android/_page.py +1 -1
  30. mangoautomation/{uidrive → uidrives}/pc/__init__.py +3 -4
  31. mangoautomation/{uidrive → uidrives}/pc/customization.py +1 -1
  32. mangoautomation/{uidrive → uidrives}/pc/element.py +1 -2
  33. mangoautomation/{uidrive → uidrives}/pc/input_device.py +1 -2
  34. mangoautomation/uidrives/web/__init__.py +10 -0
  35. mangoautomation/uidrives/web/_async_web.py +166 -0
  36. mangoautomation/uidrives/web/_sync_web.py +166 -0
  37. mangoautomation/{uidrive → uidrives}/web/async_web/__init__.py +8 -8
  38. mangoautomation/{uidrive → uidrives}/web/async_web/_assertion.py +1 -1
  39. mangoautomation/{uidrive → uidrives}/web/async_web/_browser.py +2 -2
  40. mangoautomation/{uidrive → uidrives}/web/async_web/_customization.py +1 -1
  41. mangoautomation/{uidrive → uidrives}/web/async_web/_element.py +3 -13
  42. mangoautomation/{uidrive → uidrives}/web/async_web/_input_device.py +1 -1
  43. mangoautomation/{uidrive → uidrives}/web/async_web/_page.py +1 -1
  44. mangoautomation/{uidrive → uidrives}/web/sync_web/__init__.py +8 -8
  45. mangoautomation/{uidrive → uidrives}/web/sync_web/_assertion.py +1 -1
  46. mangoautomation/{uidrive → uidrives}/web/sync_web/_browser.py +3 -3
  47. mangoautomation/{uidrive → uidrives}/web/sync_web/_customization.py +1 -1
  48. mangoautomation/{uidrive → uidrives}/web/sync_web/_element.py +3 -13
  49. mangoautomation/{uidrive → uidrives}/web/sync_web/_input_device.py +1 -1
  50. mangoautomation/{uidrive → uidrives}/web/sync_web/_page.py +2 -2
  51. {mangoautomation-1.1.21.dist-info → mangoautomation-1.1.23.dist-info}/METADATA +4 -4
  52. mangoautomation-1.1.23.dist-info/RECORD +71 -0
  53. tests/__init__.py +0 -10
  54. tests/demo1.py +21 -0
  55. tests/test_ai_element.py +36 -0
  56. tests/test_ui_web.py +31 -31
  57. mangoautomation/uidrive/web/__init__.py +0 -5
  58. mangoautomation-1.1.21.dist-info/RECORD +0 -58
  59. /mangoautomation/{uidrive → uidrives}/android/_new_android.py +0 -0
  60. /mangoautomation/{uidrive → uidrives}/ios/__init__.py +0 -0
  61. /mangoautomation/{uidrive → uidrives}/pc/assertion.py +0 -0
  62. /mangoautomation/{uidrive → uidrives}/pc/new_windows.py +0 -0
  63. /mangoautomation/{uidrive → uidrives}/web/async_web/_new_browser.py +0 -0
  64. /mangoautomation/{uidrive → uidrives}/web/sync_web/_new_browser.py +0 -0
  65. {mangoautomation-1.1.21.dist-info → mangoautomation-1.1.23.dist-info}/LICENSE +0 -0
  66. {mangoautomation-1.1.21.dist-info → mangoautomation-1.1.23.dist-info}/WHEEL +0 -0
  67. {mangoautomation-1.1.21.dist-info → mangoautomation-1.1.23.dist-info}/top_level.txt +0 -0
@@ -14,13 +14,13 @@ from mangotools.mangos import Mango
14
14
  from ....enums import ElementExpEnum
15
15
  from ....exceptions import MangoAutomationError
16
16
  from ....exceptions.error_msg import *
17
- from ....uidrive._base_data import BaseData
18
- from ....uidrive.web.sync_web._assertion import SyncWebAssertion
19
- from ....uidrive.web.sync_web._browser import SyncWebBrowser
20
- from ....uidrive.web.sync_web._customization import SyncWebCustomization
21
- from ....uidrive.web.sync_web._element import SyncWebElement
22
- from ....uidrive.web.sync_web._input_device import SyncWebDeviceInput
23
- from ....uidrive.web.sync_web._page import SyncWebPage
17
+ from ....uidrives._base_data import BaseData
18
+ from ....uidrives.web.sync_web._assertion import SyncWebAssertion
19
+ from ....uidrives.web.sync_web._browser import SyncWebBrowser
20
+ from ....uidrives.web.sync_web._customization import SyncWebCustomization
21
+ from ....uidrives.web.sync_web._element import SyncWebElement
22
+ from ....uidrives.web.sync_web._input_device import SyncWebDeviceInput
23
+ from ....uidrives.web.sync_web._page import SyncWebPage
24
24
 
25
25
  re = re
26
26
  __all__ = [
@@ -54,7 +54,7 @@ class SyncWebDevice(SyncWebBrowser,
54
54
  try:
55
55
  Mango.s_e(self, ope_key, ope_value)
56
56
  except TimeoutError as error:
57
- self.base_data.log.error(f'WEB自动化操作失败-1,类型:{type(error)},失败详情:{error}')
57
+ self.base_data.log.debug(f'WEB自动化操作失败-1,类型:{type(error)},失败详情:{error}')
58
58
  raise MangoAutomationError(*ERROR_MSG_0011, value=(name,))
59
59
  except Error as error:
60
60
  self.base_data.log.error(f'WEB自动化操作失败-2,类型:{type(error)},失败详情:{error}')
@@ -10,7 +10,7 @@ from mangotools.exceptions.error_msg import ERROR_MSG_0021
10
10
  from mangotools.models import MethodModel
11
11
  from ....exceptions import MangoAutomationError
12
12
  from ....tools import Meta
13
- from ....uidrive._base_data import BaseData
13
+ from ....uidrives._base_data import BaseData
14
14
 
15
15
 
16
16
  class SyncWebAssertion(metaclass=Meta):
@@ -15,7 +15,7 @@ from mangotools.models import MethodModel
15
15
  from ....exceptions import MangoAutomationError
16
16
  from ....exceptions.error_msg import ERROR_MSG_0049, ERROR_MSG_0013, ERROR_MSG_0058, ERROR_MSG_0059, ERROR_MSG_0010
17
17
  from ....tools import Meta
18
- from ....uidrive._base_data import BaseData
18
+ from ....uidrives._base_data import BaseData
19
19
 
20
20
 
21
21
  class SyncWebBrowser(metaclass=Meta):
@@ -53,11 +53,11 @@ class SyncWebBrowser(metaclass=Meta):
53
53
  raise MangoAutomationError(*ERROR_MSG_0058, value=(url,))
54
54
 
55
55
  @sync_method_callback('web', '浏览器操作', 2, [
56
- MethodModel(n='保存路径', f='path', p='请输入截图保存路径', d=True)])
56
+ MethodModel(n='保存路径', f='path', p='请输入截图名称', d=True)])
57
57
  def w_screenshot(self, path: str):
58
58
  """整个页面截图"""
59
59
  try:
60
- self.base_data.page.screenshot(path=path, full_page=True, timeout=10000)
60
+ self.base_data.page.screenshot(path=os.path.join(self.base_data.screenshot_path, path), full_page=True, timeout=10000)
61
61
  except (TargetClosedError, TimeoutError) as error:
62
62
  self.base_data.log.debug(
63
63
  f'截图出现异常失败-1,类型:{type(error)},失败详情:{error},失败明细:{traceback.format_exc()}')
@@ -4,7 +4,7 @@
4
4
  # @Author : 毛鹏
5
5
 
6
6
  from ....tools import Meta
7
- from ....uidrive._base_data import BaseData
7
+ from ....uidrives._base_data import BaseData
8
8
 
9
9
 
10
10
  class SyncWebCustomization(metaclass=Meta):
@@ -12,7 +12,7 @@ from mangotools.models import MethodModel
12
12
  from ....exceptions import MangoAutomationError
13
13
  from ....exceptions.error_msg import ERROR_MSG_0024, ERROR_MSG_0056
14
14
  from ....tools import Meta
15
- from ....uidrive._base_data import BaseData
15
+ from ....uidrives._base_data import BaseData
16
16
 
17
17
 
18
18
  class SyncWebElement(metaclass=Meta):
@@ -24,15 +24,11 @@ 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,直接操作超时!')
29
27
  locating.click()
30
28
 
31
29
  @sync_method_callback('web', '元素操作', 1, [MethodModel(f='locating')])
32
30
  def w_dblclick(self, locating: Locator):
33
31
  """元素双击"""
34
- if locating.count() < 1:
35
- raise TimeoutError('元素个数小于1,直接操作超时!')
36
32
  locating.dblclick()
37
33
 
38
34
  @sync_method_callback('web', '元素操作', 2, [MethodModel(f='locating')])
@@ -45,8 +41,6 @@ class SyncWebElement(metaclass=Meta):
45
41
  MethodModel(n='输入文本', f='input_value', p='请输入输入内容', d=True)])
46
42
  def w_input(self, locating: Locator, input_value: str):
47
43
  """元素输入"""
48
- if locating.count() < 1:
49
- raise TimeoutError('元素个数小于1,直接操作超时!')
50
44
  locating.fill(str(input_value))
51
45
 
52
46
  @sync_method_callback('web', '元素操作', 4, [MethodModel(f='locating')])
@@ -60,8 +54,6 @@ class SyncWebElement(metaclass=Meta):
60
54
  MethodModel(n='缓存的key', f='set_cache_key', p='请输入获取元素文本后存储的key', d=True)])
61
55
  def w_get_text(self, locating: Locator, set_cache_key=None):
62
56
  """获取元素文本"""
63
- if locating.count() < 1:
64
- raise TimeoutError('元素个数小于1,直接操作超时!')
65
57
  methods = [
66
58
  ("inner_text", lambda: locating.inner_text()),
67
59
  ("text_content", lambda: locating.text_content()),
@@ -86,8 +78,6 @@ class SyncWebElement(metaclass=Meta):
86
78
  MethodModel(n='输入文本', f='input_value', p='请输入输入内容', d=True)])
87
79
  def w_clear_input(self, locating: Locator, input_value: str):
88
80
  """元素清空再输入"""
89
- if locating.count() < 1:
90
- raise TimeoutError('元素个数小于1,直接操作超时!')
91
81
  locating.clear()
92
82
  locating.fill(str(input_value))
93
83
 
@@ -237,10 +227,10 @@ class SyncWebElement(metaclass=Meta):
237
227
 
238
228
  @sync_method_callback('web', '元素操作', 15, [
239
229
  MethodModel(f='locating'),
240
- MethodModel(n='截图路径', f='path', p='请输入截图保存路径', d=True)])
230
+ MethodModel(n='截图路径', f='path', p='请输入截图名称', d=True)])
241
231
  def w_ele_screenshot(self, locating: Locator, path: str):
242
232
  """元素截图"""
243
- locating.screenshot(path=path)
233
+ locating.screenshot(path=os.path.join(self.base_data.download_path, path))
244
234
 
245
235
  @sync_method_callback('web', '元素操作', 20, [
246
236
  MethodModel(f='locating1'),
@@ -5,7 +5,7 @@
5
5
  from mangotools.decorator import sync_method_callback
6
6
  from mangotools.models import MethodModel
7
7
  from ....tools import Meta
8
- from ....uidrive._base_data import BaseData
8
+ from ....uidrives._base_data import BaseData
9
9
 
10
10
 
11
11
  class SyncWebDeviceInput(metaclass=Meta):
@@ -5,10 +5,10 @@
5
5
  import time
6
6
  from playwright.sync_api import Locator
7
7
 
8
- from ....tools import Meta
9
- from ....uidrive._base_data import BaseData
10
8
  from mangotools.decorator import sync_method_callback
11
9
  from mangotools.models import MethodModel
10
+ from ....tools import Meta
11
+ from ....uidrives._base_data import BaseData
12
12
 
13
13
 
14
14
  class SyncWebPage(metaclass=Meta):
@@ -1,16 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mangoautomation
3
- Version: 1.1.21
3
+ Version: 1.1.23
4
4
  Summary: 测试工具
5
5
  Home-page: https://gitee.com/mao-peng/testkit
6
6
  Author: 毛鹏
7
7
  Author-email: 729164035@qq.com
8
8
  Classifier: Programming Language :: Python :: 3.10
9
- Classifier: Programming Language :: Python :: 3.11
10
9
  Classifier: Programming Language :: Python :: 3.12
11
- Classifier: Programming Language :: Python :: 3.13
12
10
  License-File: LICENSE
13
- Requires-Dist: setuptools >=68.2.0
11
+ Requires-Dist: setuptools ==78.1.1
14
12
  Requires-Dist: pydantic >=2.9.2
15
13
  Requires-Dist: playwright ==1.43.0
16
14
  Requires-Dist: uiautomation >=2.0.20
@@ -18,6 +16,8 @@ Requires-Dist: uiautomator2 >=3.2.5
18
16
  Requires-Dist: mangotools >=1.1.42
19
17
  Requires-Dist: adbutils ~=2.8.9
20
18
  Requires-Dist: uiautodev >=0.9.0
19
+ Requires-Dist: beautifulsoup4 ==4.14.2
20
+ Requires-Dist: openai ==2.6.1
21
21
 
22
22
  # testkit
23
23
 
@@ -0,0 +1,71 @@
1
+ mangoautomation/__init__.py,sha256=JxPNVexFQvkBfh0awPNeHxQGU_gtVgYPwD5rYeuHWEk,125
2
+ mangoautomation/enums/__init__.py,sha256=PnOgNttAXT64elr_Fd1ZthuAddCkm7sh4xwm9Eutm_I,373
3
+ mangoautomation/enums/_base_enum.py,sha256=dpaXsdhWY08BhIzi1B1ksh_p18ZTmhWvTYhbd3n_ONQ,1176
4
+ mangoautomation/enums/_ui_enum.py,sha256=mT_MfQ7TEw-BgHIqH0wXTA_yVWsaWnd3iHSHi9E0pgA,4599
5
+ mangoautomation/exceptions/__init__.py,sha256=2j3ravPuzljR2Mbq8J2JLdXUzII7hzrjdVjmEc_NHJU,211
6
+ mangoautomation/exceptions/_exceptions.py,sha256=BiyST1QPivpfIOuKn1gKhpXOyBv6gfip_KvlQuu8ctw,385
7
+ mangoautomation/exceptions/error_msg.py,sha256=0unQ_tgrRJtVMAOXTzhQJkwO4_7lhMKAMMCfwmzQD58,5517
8
+ mangoautomation/mangos/__init__.py,sha256=gEu8lVHGXm8PDTBZ1XXWNUOAbCtHb37uKQLBRYQR4rs,644
9
+ mangoautomation/mangos/mangos.cp310-win_amd64.pyd,sha256=XkKi2OyGgDxX7lJQnNuJMGiL4b-vntDLwo4wAmOUdrg,1751552
10
+ mangoautomation/mangos/mangos.cp312-win_amd64.pyd,sha256=5ajaOne3Kb1yNEb3Eci1bvjzKIuiJaTPfwBY3f_MK0o,1879040
11
+ mangoautomation/mangos/mangos.cpython-310-darwin.so,sha256=HwZCN0lpGKdAzvygPA4O4Q_xyAd7aDcrZFUzWSqZcWI,3555568
12
+ mangoautomation/mangos/mangos.cpython-310-x86_64-linux-gnu.so,sha256=EaTWB-R4yHJYfkwF0P_YMjlBKY35KTTKrDsAaKCqAZo,10465816
13
+ mangoautomation/mangos/mangos.cpython-312-darwin.so,sha256=iG43WcChIPozrKK98MqBTqDlZFNxKjQSyB0CKu0mIaE,3456880
14
+ mangoautomation/mangos/mangos.cpython-312-x86_64-linux-gnu.so,sha256=P1Hax5huyMm-7eeuWby9mWmTI2HW3JEA8mSvIl65aAk,10670984
15
+ mangoautomation/mangos/__pycache__/__init__.cpython-310.pyc,sha256=kQcwQCOca8l62vfKIC6YKi0lEIUV3Vjnel0ox2bDbOc,608
16
+ mangoautomation/models/__init__.py,sha256=wHACwBCrd9HCvmrAkTFUV3qmK9GnOa-FJFiL0kOQjME,309
17
+ mangoautomation/models/_ui_model.py,sha256=nfxh_4TpOLzKKWC7c-IgMLVZY5wkTPfyS_Oh-SvsYsk,1825
18
+ mangoautomation/tools/__init__.py,sha256=c3IXhoodknOukOyM6db2tXIdDRodgmUZorEAkkruQf0,282
19
+ mangoautomation/tools/_mate.py,sha256=9lk_EJnAX_OyXbe5WacyHkkcEr2ScBgasl6eUnlklWA,405
20
+ mangoautomation/tools/_uiautodev.py,sha256=KYYWOQ_sp91LN_zeKAuIvCqjabb2_1-VhgOg1K7cQrw,1372
21
+ mangoautomation/uidrive/__init__.py,sha256=9N2DTDyLcmgxAHctBjZOb8LwdDeKQnwEOWZ9kNcM4Uw,350
22
+ mangoautomation/uidrives/__init__.py,sha256=JEoWqpoDIch8JiQ7WcnuDh3Bjg0Yqo_xfkbqY5iHSa8,617
23
+ mangoautomation/uidrives/_async_element.py,sha256=87BhadK9BJtcv_VzJUM3kX5sdp8b8Kk-abkU9oE3T7M,16206
24
+ mangoautomation/uidrives/_base_data.py,sha256=gp9730Hd8uarRv8xARIddgMWGhaJ_RKDd_gjewwWr04,4436
25
+ mangoautomation/uidrives/_driver_object.py,sha256=VnnmXO-BODhqEDmqwb2U0G5FwLRdrBKvkrLE2mwC6gs,1951
26
+ mangoautomation/uidrives/_sync_element.py,sha256=TU2E7AKz0Ku4qXLEtxx-whJPJ4KLYLK_EuKgChpcedM,15906
27
+ mangoautomation/uidrives/android/__init__.py,sha256=i6WjXlNq6oUZ4y79Gih_XzI9tV7du-Jrm9IAuROgSzo,5180
28
+ mangoautomation/uidrives/android/_application.py,sha256=G94m53cUzzGuXxPIsvoMuFwJ5RWL_xW5HHFE0TIkrBI,2855
29
+ mangoautomation/uidrives/android/_assertion.py,sha256=FH8sxJC4ZXCbVA9KFBp49Tu8LPWyO26EZYAK7cYaoYE,4350
30
+ mangoautomation/uidrives/android/_customization.py,sha256=7C8j2rv2wDkNu425ooxLSDrGHr_CxJ82sXz1-64id_8,382
31
+ mangoautomation/uidrives/android/_element.py,sha256=ggWEFUbrAGWPQXNvD9JpudwowwvYJrgHdrNXyytAEVw,7213
32
+ mangoautomation/uidrives/android/_equipment.py,sha256=Ul61jpoVr162FIu_2QcJtqWil82ZBC-Kn7_VFQWCUsQ,5216
33
+ mangoautomation/uidrives/android/_new_android.py,sha256=WldFsGm5QnJ9QVPtWxRgwCiWSX3jYObFxAPCQ5xSKyg,1636
34
+ mangoautomation/uidrives/android/_page.py,sha256=IaWiN3kniv2GKfudMLRdvyaqbFLuIfGh7H0HeQrDyVA,4621
35
+ mangoautomation/uidrives/ios/__init__.py,sha256=SdxI8e5AOoAb8JTaDoMkObezIluJ50nm2b6zeDHv1PI,125
36
+ mangoautomation/uidrives/pc/__init__.py,sha256=Jphhspu-3AHCyDX5ZM_-DWeC9ZerWy2Omb3MOck6CI4,2210
37
+ mangoautomation/uidrives/pc/assertion.py,sha256=mH25hZ2i4T8kA1F2loW_nuPJ-Hb0z1pwILTJqkwwpLA,125
38
+ mangoautomation/uidrives/pc/customization.py,sha256=UkpHWFSYsu_t-GmMRDmii1Bs_Y1eKD34oZfJBFHV2Ng,240
39
+ mangoautomation/uidrives/pc/element.py,sha256=OGbJHbgJPBjRjXqM-NIWUnScn7lIHoBxnrakog_s4l8,465
40
+ mangoautomation/uidrives/pc/input_device.py,sha256=k-v7tRW8NkJxzcezqSIfICGRBqEdsssBeRTmtupVTU8,299
41
+ mangoautomation/uidrives/pc/new_windows.py,sha256=lETHZa7cW8Z0iUShzgVTRxqivkYaOo8WIE58q_8KYfQ,2338
42
+ mangoautomation/uidrives/web/__init__.py,sha256=TJyYt6EUoRfWYrV193RHpopKfixipVUp4TrhB5DoEKA,434
43
+ mangoautomation/uidrives/web/_async_web.py,sha256=Uwta7cIYo-0Qe5RbaIvRSQ-IvOxCNtbH_RcIm1JNxEQ,8204
44
+ mangoautomation/uidrives/web/_sync_web.py,sha256=NCF97mYWQBLsOkcEXHKbAGLYGt4rK7NSjks6PubLe_k,8049
45
+ mangoautomation/uidrives/web/async_web/__init__.py,sha256=_jG4DvEbNe4EZTFEBKQhgwRxxIzrdK7APmIicFb0zMk,8379
46
+ mangoautomation/uidrives/web/async_web/_assertion.py,sha256=cG8g_iFMlWcAMDyIfPTJ5lx73BpbGZV5PoAbe1uAy4Q,12821
47
+ mangoautomation/uidrives/web/async_web/_browser.py,sha256=xAaawPbY-rj-HZtcy5LcWUQ_jmdN9Dj4yNUxWxXGCbQ,5421
48
+ mangoautomation/uidrives/web/async_web/_customization.py,sha256=LakibDXpSc-MMxMiwDiktoFccgyiUmWxAVpMOobY9_A,347
49
+ mangoautomation/uidrives/web/async_web/_element.py,sha256=fVJWBUI0C2eFYP8XhLkW2Cez2gdYP1j0PcIBVDzUEk4,10507
50
+ mangoautomation/uidrives/web/async_web/_input_device.py,sha256=wd36vTwsWdq7f52HmEnAF2sNiFVwNxJ2J5bq-lcuuVk,3441
51
+ mangoautomation/uidrives/web/async_web/_new_browser.py,sha256=v-OXD-uYD7XagupxSlG4g_ZBsRq_Jpo88iwE_A_Ilfs,6202
52
+ mangoautomation/uidrives/web/async_web/_page.py,sha256=B1RbnPWaQWa3Sp57ue2sTgcgEr4kTgSEz0DcpA5lOug,2176
53
+ mangoautomation/uidrives/web/sync_web/__init__.py,sha256=gThDpZPtCFdKrxnVYgAsj_6oha9lMed7xoU4XTsLOys,7945
54
+ mangoautomation/uidrives/web/sync_web/_assertion.py,sha256=GEUGvYd3LgisMTgiinFF-Z6nWqxA4EUbvHenw7rPaW0,12595
55
+ mangoautomation/uidrives/web/sync_web/_browser.py,sha256=_Z6NhhP_6N-cxak3X8yUnPzUet7b1tBpI85iAbzwoyQ,5286
56
+ mangoautomation/uidrives/web/sync_web/_customization.py,sha256=Wir5CIGN6YiyVj1-D_zvSWcFuUvQMP8rJ-8boUaU1Bs,356
57
+ mangoautomation/uidrives/web/sync_web/_element.py,sha256=T8Za5wTzSlPleJMz0XkRCbnqSk8OpLHMs3_TalF7xrE,10157
58
+ mangoautomation/uidrives/web/sync_web/_input_device.py,sha256=SwsFi4PiS3sg45MPl_NV88nDrg4SmJ14fV8sODByQ58,3288
59
+ mangoautomation/uidrives/web/sync_web/_new_browser.py,sha256=APGUFhOVAW68x-6y9tQLZJkn2utfR-PrpjgP8WE38SE,6149
60
+ mangoautomation/uidrives/web/sync_web/_page.py,sha256=GbVsK7ZBcoMBnKw2VMPWy3Yt9Jqa84qxrB2Ar2d8aR8,2046
61
+ tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
+ tests/demo1.py,sha256=5iK5kqaMkebTk-Z4HoMnfi88CRUIBKwT8PVQXFaqgD4,736
63
+ tests/get_ope.py,sha256=SVhSowMNa87hjzGhFlS0vp-t0RB9yKHOC52FsO93UG4,236
64
+ tests/test_ai_element.py,sha256=k__iifxebvPPfGdRS-yzkEH80fBIlKJcZ-m3N6Xkz6Q,1437
65
+ tests/test_ui_and.py,sha256=A_0pqG6s5Ts02He7P3NwuDSK3g9Q3VP1Sb_P8wq6g0Q,125
66
+ tests/test_ui_web.py,sha256=RBACNYc7XdvENHzg4YElsSQlEmPVa_AyOKWTYTPXM14,2578
67
+ mangoautomation-1.1.23.dist-info/LICENSE,sha256=03WP-mgFmo8ofRYDe1HVDQUEUKQZ2q6P6Q-2A4c-46A,1085
68
+ mangoautomation-1.1.23.dist-info/METADATA,sha256=wbPR7Rb4WurD4bh8nDEoKhLSumkIIMM2008pk-Skvso,783
69
+ mangoautomation-1.1.23.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
70
+ mangoautomation-1.1.23.dist-info/top_level.txt,sha256=g-uCmjvEODG8WFbmwbGM0-G0zHntHv8ZsS0PQRaMGtE,22
71
+ mangoautomation-1.1.23.dist-info/RECORD,,
tests/__init__.py CHANGED
@@ -1,10 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # @Project: 芒果测试平台
3
- # @Description:
4
- # @Time : 2024-09-07 23:25
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/demo1.py ADDED
@@ -0,0 +1,21 @@
1
+ from openai import OpenAI
2
+
3
+ client = OpenAI(api_key="sk-rruuhjnqawsvduyxlcqckbtgwkprctgkvwcelenooixbhthy",
4
+ base_url="https://api.siliconflow.cn/v1")
5
+ response = client.chat.completions.create(
6
+ # model='Pro/deepseek-ai/DeepSeek-R1',
7
+ model="THUDM/GLM-Z1-9B-0414",
8
+ messages=[
9
+ {'role': 'user',
10
+ 'content': "推理模型会给市场带来哪些新的机会"}
11
+ ],
12
+ stream=True
13
+ )
14
+
15
+ for chunk in response:
16
+ if not chunk.choices:
17
+ continue
18
+ if chunk.choices[0].delta.content:
19
+ print(chunk.choices[0].delta.content, end="", flush=True)
20
+ if chunk.choices[0].delta.reasoning_content:
21
+ print(chunk.choices[0].delta.reasoning_content, end="", flush=True)
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ # @Project: 芒果测试平台
3
+ # @Description:
4
+ # @Time : 2025-10-28 10:32
5
+ # @Author : 毛鹏
6
+ import unittest
7
+
8
+ import time
9
+
10
+ from .demo1 import WebAIFinder
11
+ from mangoautomation.uidrive import BaseData, DriverObject, SyncElement
12
+ from mangoautomation.uidrives import AsyncElement
13
+ from mangotools.data_processor import DataProcessor
14
+ from mangotools.log_collector import set_log
15
+ # api_key = 'sk-'
16
+ # b = 'https://api.siliconflow.cn/v1'
17
+ # model = 'THUDM/GLM-Z1-9B-0414'
18
+ log = set_log('D:\code\mango_automation\logs')
19
+ log.set_debug(True)
20
+ test_data = DataProcessor()
21
+
22
+
23
+ class TestUi(unittest.IsolatedAsyncioTestCase):
24
+ async def test_a(self):
25
+ driver_object = DriverObject(log, is_async=True)
26
+ driver_object.set_web(0, r"C:\Program Files\Google\Chrome\Application\chrome.exe")
27
+ base_data = BaseData(test_data, log)
28
+ base_data.url = 'https://www.baidu.com/'
29
+ base_data.context, base_data.page = await driver_object.web.new_web_page()
30
+ element = AsyncElement(base_data, 0)
31
+ await element.open_url()
32
+ loc = await WebAIFinder(log, api_key, b, model).ai_find_element_async(base_data.page, '设置', '设置在右上角', ['//*[text()="设置"]'])
33
+ await element.w_hover(loc)
34
+ print('获取元素名称:', await element.w_get_text(loc))
35
+ time.sleep(5)
36
+ assert await element.w_get_text(loc) == '设置'
tests/test_ui_web.py CHANGED
@@ -11,67 +11,67 @@ from mangoautomation.uidrive import AsyncElement, BaseData, DriverObject, SyncEl
11
11
  from mangotools.data_processor import DataProcessor
12
12
  from mangotools.log_collector import set_log
13
13
 
14
- log = set_log('D:\GitCode\mango_automation\logs')
14
+ log = set_log('D:\code\mango_automation\logs')
15
+ log.set_debug(True)
15
16
  test_data = DataProcessor()
16
- element_model_1 = ElementModel(**{
17
- "id": 9,
17
+ element_model = ElementModel(**{
18
+ "id": 3,
18
19
  "type": 0,
19
- "name": "搜索结果",
20
- "loc": "get_by_role(\"link\", name=\"芒果自动化测试平台: 芒果测试平台是UI和API的自动化测试\")",
21
- "exp": 2,
20
+ "name": "设置",
21
+ "elements": [
22
+ {
23
+ "exp": 0,
24
+ "loc": "//span[@name=\"tj_settingicons\"]",
25
+ "sub": None,
26
+ "is_iframe": 0,
27
+ "prompt": "设置"
28
+ }
29
+ ],
22
30
  "sleep": None,
23
- "sub": None,
24
- "is_iframe": 0,
25
- "ope_key": "w_open_new_tab_and_switch",
31
+ "ope_key": "w_hover",
26
32
  "ope_value": [
27
33
  {
28
34
  "f": "locating",
35
+ "n": None,
29
36
  "p": None,
30
37
  "d": False,
31
38
  "v": ""
32
39
  }
33
40
  ],
34
- "key_list": None,
35
- "sql": None,
36
- "key": None,
37
- "value": None
38
- })
39
- element_model_2 = ElementModel(**{
40
- "id": 10, "type": 2, "name": "结果内容", "loc": "get_by_role(\"heading\", name=\"芒果测试平台是集UI,API\")",
41
- "exp": 0,
42
- "sleep": None, "sub": None, "is_iframe": 0, "ope_key": "w_get_text",
43
- "ope_value": [{"f": "locating", "p": None, "d": False, "v": ""},
44
- {"f": "set_cache_key", "p": None, "d": True, "v": "结果内容"}]
41
+ "sql_execute": None,
42
+ "custom": None,
43
+ "condition_value": None,
44
+ "func": None
45
45
  })
46
46
 
47
47
 
48
48
  class TestUi(unittest.IsolatedAsyncioTestCase):
49
49
  async def test_a(self):
50
- driver_object = DriverObject(True)
50
+ driver_object = DriverObject(log, True)
51
51
  driver_object.set_web(0, r"C:\Program Files\Google\Chrome\Application\chrome.exe")
52
- base_data = BaseData(test_data, log)
52
+ base_data = BaseData(test_data, log).set_agent(True, 'sk-rruuhjnqawsvduyxlcqckbtgwkprctgkvwcelenooixbhthy')
53
+ base_data.screenshot_path = r'D:\code\mango_automation\logs'
53
54
  base_data.log = log
54
55
  base_data.url = 'https://www.baidu.com/'
55
56
 
56
57
  base_data.context, base_data.page = await driver_object.web.new_web_page()
57
- element = AsyncElement(base_data, element_model_1, 0)
58
+ element = AsyncElement(base_data, 0)
58
59
  await element.open_url()
59
60
  await asyncio.sleep(5)
60
- await element.element_main()
61
- print(element.element_result_model.model_dump())
62
- element = AsyncElement(base_data, element_model_2, 0)
63
- await element.element_main()
64
- print(element.element_result_model.model_dump())
61
+ await element.element_main(element_model, )
62
+ print(element.element_result_model.model_dump_json())
63
+ assert element.element_result_model.elements[0].element_text == '设置'
65
64
 
66
65
 
67
66
  class TestUi2(unittest.TestCase):
68
67
 
69
68
  def test_s(self):
70
- driver_object = DriverObject()
69
+ driver_object = DriverObject(log)
71
70
  driver_object.set_web(0, r"C:\Program Files\Google\Chrome\Application\chrome.exe")
72
71
  base_data = BaseData(test_data, log)
73
72
  base_data.url = 'https://www.baidu.com/'
74
73
  base_data.context, base_data.page = driver_object.web.new_web_page()
75
- element = SyncElement(base_data, element_model_1, 0)
74
+ element = SyncElement(base_data, 0)
76
75
  element.open_url()
77
- element.element_main()
76
+ element.element_main(element_model, )
77
+ assert element.element_result_model.elements[0].element_text == '设置'
@@ -1,5 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # @Project: 芒果测试平台
3
- # @Description:
4
- # @Time : 2023/5/16 14:50
5
- # @Author : 毛鹏
@@ -1,58 +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=mT_MfQ7TEw-BgHIqH0wXTA_yVWsaWnd3iHSHi9E0pgA,4599
5
- mangoautomation/exceptions/__init__.py,sha256=4CmTPcSFypENe3zXzsBUjA5MxXLugnP14dlakmItVjs,227
6
- mangoautomation/exceptions/_exceptions.py,sha256=BiyST1QPivpfIOuKn1gKhpXOyBv6gfip_KvlQuu8ctw,385
7
- mangoautomation/exceptions/error_msg.py,sha256=0jSdviYbhJS0-xB-IvgRnxteM1ArIcFCIsDdbbVZ-RA,5332
8
- mangoautomation/models/__init__.py,sha256=25zmLzbB4gObJ6nqN7jPYP9LcdlixDKBGVoc7JrwggI,323
9
- mangoautomation/models/_ui_model.py,sha256=6v2nUL41ZJnHX_UEx_C7aAT-QYnDmtKtXyo7V4yvEKg,1787
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=rx5CBqXDgZoY7l_oNdbPE8GnBzF_EOE0_jeDkb8RQJ0,15092
15
- mangoautomation/uidrive/_base_data.py,sha256=xDjgBJ6CDFajUy18ft-NKe-7vKe7WtgMC9zV6gRrmPY,3946
16
- mangoautomation/uidrive/_driver_object.py,sha256=7RGiAIPHU_bQtwVPEprnXt-HOzoKuKn_Bu2RZxjSAVs,2055
17
- mangoautomation/uidrive/_sync_element.py,sha256=9YVegi_mCqgb_JwoagsDqhQTmnAem4zrNzVphrqM24s,14861
18
- mangoautomation/uidrive/android/__init__.py,sha256=HBYY1L-g7OASchquaUXH7NcpxXpuJVx6Zuw0JbNgq-Y,5524
19
- mangoautomation/uidrive/android/_application.py,sha256=ic9RbiOAft3wWi6QH6PgcRVN8kiahe3wMyErxsHp3FU,2854
20
- mangoautomation/uidrive/android/_assertion.py,sha256=ps6uBP4KxcBGJkrlG7m-Caq1rz4UfJhKUNU2YBetu-c,4349
21
- mangoautomation/uidrive/android/_customization.py,sha256=pCLMmruozOyCJQZWAYupxxKqpWmZyCYsfSBw3XW7vf0,381
22
- mangoautomation/uidrive/android/_element.py,sha256=3IEUCh9nzgB0hFG0nMcoPC28wMAoDxMS2Tf3gcmm80g,7212
23
- mangoautomation/uidrive/android/_equipment.py,sha256=TeVFB5QzKTNIAfcV7DMYkQZVzgIGx4_hWQ3Z1RsIKXc,5215
24
- mangoautomation/uidrive/android/_new_android.py,sha256=WldFsGm5QnJ9QVPtWxRgwCiWSX3jYObFxAPCQ5xSKyg,1636
25
- mangoautomation/uidrive/android/_page.py,sha256=Ep9btx-2dgaEmjHAVExjB35HQx29PGZ0DHNndIYNpJc,4620
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=1HoxtHLxVOSwrsquoUTwU29DJcYCcQg89p_DOyZ9tJU,8372
35
- mangoautomation/uidrive/web/async_web/_assertion.py,sha256=2tPSGiJSKmrkiM0bvOd6nfTKTAjDAlosgXcn-oiN0zM,12820
36
- mangoautomation/uidrive/web/async_web/_browser.py,sha256=mx1m4bPZSdvNOD_8V3gcFUjGMfU3oXj6IJJdlT4ukD0,5381
37
- mangoautomation/uidrive/web/async_web/_customization.py,sha256=uw6p9uLHLXglgSkH4qjDl1v0iGlaNjvf8LljRH5cAHU,347
38
- mangoautomation/uidrive/web/async_web/_element.py,sha256=qEwvGZGzDBNhvYiKB3rlgtTS9D07ln-5iPOUIwKzIdI,11064
39
- mangoautomation/uidrive/web/async_web/_input_device.py,sha256=0EjGkCQWjKY69bTIILNoX7p_6VVfYAVgjNaj4t2r6nk,3440
40
- mangoautomation/uidrive/web/async_web/_new_browser.py,sha256=v-OXD-uYD7XagupxSlG4g_ZBsRq_Jpo88iwE_A_Ilfs,6202
41
- mangoautomation/uidrive/web/async_web/_page.py,sha256=DIdyu-TmAUmgkwXDeNzB0p9bqc0Csomj_7ahWcO8ZH0,2175
42
- mangoautomation/uidrive/web/sync_web/__init__.py,sha256=wV1_y-lsX5qW30ERIvP-X0eRdnwVV3L7uTRCMiowqfo,7938
43
- mangoautomation/uidrive/web/sync_web/_assertion.py,sha256=2GOhwD7CKtUbsdWmo0aT9pxfBFUQ_bYrjdvRoIBwDNs,12594
44
- mangoautomation/uidrive/web/sync_web/_browser.py,sha256=b-nBdskqKTFX4Y7xRs8NqEXYulJj9CP2hgLJ9qWnWlQ,5245
45
- mangoautomation/uidrive/web/sync_web/_customization.py,sha256=E_pfI8gKd0O6r4huJIvA6hoW-X9fSDVL4zEUqhHgxwE,355
46
- mangoautomation/uidrive/web/sync_web/_element.py,sha256=QIwgQ0cdMc9-oa5TwRTKxxwndUgvVCTogTohSNKhzRs,10683
47
- mangoautomation/uidrive/web/sync_web/_input_device.py,sha256=zPFd8xFuLeem9Io0ZBkiaJlFoPSHea-A87_vnYHEg80,3287
48
- mangoautomation/uidrive/web/sync_web/_new_browser.py,sha256=APGUFhOVAW68x-6y9tQLZJkn2utfR-PrpjgP8WE38SE,6149
49
- mangoautomation/uidrive/web/sync_web/_page.py,sha256=LC7FWr6Exv-KSiSU0y2Zxjd39_QLohe_UD5nvA8htUM,2045
50
- tests/__init__.py,sha256=fdlqghHH7eXneovXweQjn6gVb8jwm6wprtPw5ksV_IA,350
51
- tests/get_ope.py,sha256=SVhSowMNa87hjzGhFlS0vp-t0RB9yKHOC52FsO93UG4,236
52
- tests/test_ui_and.py,sha256=A_0pqG6s5Ts02He7P3NwuDSK3g9Q3VP1Sb_P8wq6g0Q,125
53
- tests/test_ui_web.py,sha256=MFaUN8O5qKOMMgyk2eelhKZsYcSJm0Do6pCgsdBZEH4,2765
54
- mangoautomation-1.1.21.dist-info/LICENSE,sha256=03WP-mgFmo8ofRYDe1HVDQUEUKQZ2q6P6Q-2A4c-46A,1085
55
- mangoautomation-1.1.21.dist-info/METADATA,sha256=4HkJR-sB5b2mJfzCJ2Qzv6y3KiJSOlVKFPKUtPKhPqE,816
56
- mangoautomation-1.1.21.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
57
- mangoautomation-1.1.21.dist-info/top_level.txt,sha256=g-uCmjvEODG8WFbmwbGM0-G0zHntHv8ZsS0PQRaMGtE,22
58
- mangoautomation-1.1.21.dist-info/RECORD,,
File without changes
File without changes
File without changes