Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

kuto

Package Overview
Dependencies
Maintainers
1
Versions
69
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

kuto - npm Package Compare versions

Comparing version
0.0.67
to
0.0.70
+1
-1
kuto.egg-info/PKG-INFO
Metadata-Version: 2.1
Name: kuto
Version: 0.0.67
Version: 0.0.70
Summary: 全平台自动化测试框架

@@ -5,0 +5,0 @@ Home-page: https://gitee.com/bluepang2021/kuto

@@ -13,3 +13,3 @@ from allure import *

__version__ = "0.0.67"
__version__ = "0.0.70"
__description__ = "全平台自动化测试框架"

@@ -175,2 +175,8 @@ import os

def input(self, text, enter=False):
logger.info(f"输入文本: {text}")
self.d.send_keys(text)
if enter is True:
self.enter()
def click(self, x, y):

@@ -177,0 +183,0 @@ logger.info(f"点击坐标: {x}, {y}")

@@ -33,3 +33,3 @@ import typing

index: int = None,
debug: bool = False):
_debug: bool = False):
"""

@@ -44,3 +44,3 @@ @param AdrDriver: 安卓驱动,必填

@param index: 定位出多个元素时,指定索引,从0开始
@param debug: 是否调试
@param _debug: 是否调试
"""

@@ -68,3 +68,3 @@ self._driver = AdrDriver

self._xpath = xpath
self._debug = debug
self._debug = _debug
self._image = image

@@ -165,6 +165,7 @@ self._ocr = ocr

if self._image is not None:
return ImageElem(self._driver, file=self._image, desc=self._desc).exists(timeout=timeout)
return ImageElem(self._driver, file=self._image, desc=self._desc,
debug=self._debug).exists(timeout=timeout)
elif self._ocr is not None:
return OCRElem(self._driver, text=self._ocr, pos=self._pos, grade=self._grade, scale=self._driver.d.scale)\
.exists(timeout=timeout)
return OCRElem(self._driver, text=self._ocr, pos=self._pos,
grade=self._grade, desc=self._desc, debug=self._debug).exists(timeout=timeout)
else:

@@ -196,6 +197,7 @@ result = False

if self._image is not None:
return ImageElem(self._driver, file=self._image, desc=self._desc).click(timeout=timeout)
return ImageElem(self._driver, file=self._image, desc=self._desc, debug=self._debug)\
.click(timeout=timeout)
elif self._ocr is not None:
return OCRElem(self._driver, text=self._ocr, pos=self._pos, grade=self._grade, scale=self._driver.d.scale)\
.click(timeout=timeout)
return OCRElem(self._driver, text=self._ocr, pos=self._pos, grade=self._grade,
desc=self._desc, debug=self._debug).click(timeout=timeout)
else:

@@ -202,0 +204,0 @@ element = self.find(timeout=timeout, watch=watch)

@@ -38,15 +38,11 @@ import time

def exists(self, retry=3, timeout=3):
def exists(self, timeout=1):
logger.info(f'图像识别判断: {self._desc} 是否存在')
time.sleep(3)
for i in range(retry):
logger.info(f'第{i + 1}次查找:')
source_image = self.driver.screenshot(self._desc + f"_第{i+1}次识别")
res = ImageDiscern(self.target_image, source_image, self._grade, self._gauss_num).get_coordinate()
logger.debug(res)
if isinstance(res, tuple):
return True
time.sleep(timeout)
time.sleep(timeout)
source_image = self.driver.screenshot(self._desc + "_识别中")
res = ImageDiscern(self.target_image, source_image, self._grade, self._gauss_num).get_coordinate()
logger.debug(res)
if isinstance(res, tuple):
return True
else:
self.driver.screenshot(f'图像识别定位失败-{self._desc}')
return False

@@ -56,4 +52,4 @@

logger.info(f'图像识别点击图片: {self._desc}')
time.sleep(3)
for i in range(retry):
time.sleep(timeout)
logger.info(f'第{i + 1}次查找:')

@@ -70,6 +66,8 @@ source_image = self.driver.screenshot(self._desc)

file_path = self.driver.screenshot(f'图像识别定位成功-{self._desc}')
if self._scale is not None:
_x, _y = x * self._scale, y * self._scale
draw_red_by_rect(file_path, (int(_x) - 100, int(_y) - 100, 200, 200))
draw_red_by_rect(file_path, (int(x) - 100, int(y) - 100, 200, 200))
self.driver.click(x, y)
return
time.sleep(timeout)
else:

@@ -76,0 +74,0 @@ self.driver.screenshot(f'图像识别定位失败-{self._desc}')

@@ -10,2 +10,3 @@ import shutil

from kuto.ios.common import TideviceUtil, get_connected
from kuto.utils.common import retry

@@ -125,2 +126,12 @@

@retry
def input(self, text: str, clear=False, enter=False):
logger.info(f"输入文本: {text}")
if clear is True:
self.d.send_keys("")
self.d.send_keys(text)
if enter is True:
self.enter()
@retry
def click(self, x, y):

@@ -157,7 +168,3 @@ logger.info(f"点击坐标: {x}, {y}")

if __name__ == '__main__':
driver1 = IosDriver(
device_id="00008101-000E646A3C29003A",
pkg_name="com.qizhidao.company"
)
driver1.start_app()
pass

@@ -172,1 +179,2 @@

@@ -11,2 +11,3 @@ import time

from kuto.ocr.element import OCRElem
from kuto.utils.common import retry

@@ -39,3 +40,3 @@

index: int = None,
debug: bool = False):
_debug: bool = False):
"""

@@ -51,3 +52,3 @@ param iosDriver,

param index: 索引
@param debug: 是否调试
@param _debug: 是否调试
"""

@@ -81,3 +82,3 @@ self._driver = iosDriver

self._xpath = xpath
self._debug = debug
self._debug = _debug
self._image = image

@@ -204,6 +205,7 @@ self._ocr = ocr

if self._image is not None:
return ImageElem(self._driver, file=self._image, desc=self._desc).exists(timeout=timeout)
return ImageElem(self._driver, file=self._image, desc=self._desc, scale=self._driver.d.scale,
debug=self._debug).exists(timeout=timeout)
elif self._ocr is not None:
return OCRElem(self._driver, text=self._ocr, pos=self._pos, grade=self._grade, scale=self._driver.d.scale)\
.exists(timeout=timeout)
return OCRElem(self._driver, text=self._ocr, pos=self._pos, grade=self._grade,
scale=self._driver.d.scale, desc=self._desc, debug=self._debug).exists(timeout=timeout)
else:

@@ -232,2 +234,3 @@ result = False

@retry
def click(self, timeout=5, watch=None):

@@ -241,6 +244,7 @@ """

if self._image is not None:
ImageElem(self._driver, file=self._image, desc=self._desc).click(timeout=timeout)
ImageElem(self._driver, file=self._image, desc=self._desc, scale=self._driver.d.scale,
debug=self._debug).click(timeout=timeout)
elif self._ocr is not None:
OCRElem(self._driver, text=self._ocr, pos=self._pos, grade=self._grade, scale=self._driver.d.scale)\
.click(timeout=timeout)
OCRElem(self._driver, text=self._ocr, pos=self._pos, grade=self._grade, scale=self._driver.d.scale,
desc=self._desc, debug=self._debug).click(timeout=timeout)
else:

@@ -252,2 +256,3 @@ x, y = self._adapt_center(timeout=timeout, watch=watch)

@retry
def click_exists(self, timeout=3):

@@ -263,2 +268,3 @@ logger.info(f"{self._desc} 存在才点击")

@retry
def input(self, text, enter=False):

@@ -271,2 +277,3 @@ """输入内容"""

@retry
def input_exists(self, text: str, timeout=3, enter=False):

@@ -280,2 +287,3 @@ logger.info(f"{self._desc} 存在才输入: {text}")

@retry
def assert_exists(self, timeout=3):

@@ -286,2 +294,3 @@ logger.info(f"断言 {self._desc} 存在")

@retry
def assert_text(self, text, timeout=3):

@@ -288,0 +297,0 @@ logger.info(f"断言 {self._desc} 文本属性包括: {text}")

@@ -20,3 +20,3 @@ """

desc: str = None,
debug: bool = False):
_debug: bool = False):
self.driver = driver

@@ -28,3 +28,3 @@ if not desc:

self._coor = coor
self._debug = debug
self._debug = _debug

@@ -65,3 +65,3 @@ def __get__(self, instance, owner):

desc: str = None,
debug: bool = False):
_debug: bool = False):
self.driver = driver

@@ -73,3 +73,3 @@ if not desc:

self.target_image = image
self._debug = debug
self._debug = _debug

@@ -76,0 +76,0 @@ def __get__(self, instance, owner):

import time
from kuto.utils.exceptions import KError
from kuto.utils.log import logger

@@ -33,2 +34,3 @@ from kuto.ocr.driver import OCRDiscern

scale: int = None,
desc: str = None,
debug: bool = False):

@@ -50,2 +52,5 @@ """

self._scale = scale
self._desc = desc
if self._desc is None:
raise KError("元素描述不能为空")

@@ -62,4 +67,5 @@ def __get__(self, instance, owner):

for i in range(retry):
time.sleep(timeout)
logger.info(f"第{i+1}次识别")
info = self.driver.screenshot(self.text + f"_第{i+1}次识别",
info = self.driver.screenshot(self._desc + f"_第{i+1}次识别",
position=self._position)

@@ -101,9 +107,11 @@ if self._position is not None:

if self._debug is True:
file_path = self.driver.screenshot(f'ocr识别定位成功-{self.text}')
file_path = self.driver.screenshot(f'ocr识别定位成功-{self._desc}')
if self._scale is not None:
_x, _y = x * self._scale, y * self._scale
draw_red_by_rect(file_path, (int(_x) - 100, int(_y) - 100, 200, 200))
draw_red_by_rect(file_path, (int(x) - 100, int(y) - 100, 200, 200))
return x, y
time.sleep(timeout)
else:
self.driver.screenshot(f'ocr识别定位失败-{self.text}')
self.driver.screenshot(f'ocr识别定位失败-{self._desc}')
raise Exception('通过OCR未识别指定文字或置信度过低,无法进行点击操作!')

@@ -113,5 +121,11 @@

logger.info(f'ocr识别文本: {self.text} 是否存在')
return self.find_element(timeout=timeout)
try:
self.find_element(timeout=timeout)
except Exception as e:
logger.debug(str(e))
return False
else:
return True
def click(self, retry=3, timeout=1):
def click(self, retry=3, timeout=3):
logger.info(f'ocr点击文本: {self.text}')

@@ -118,0 +132,0 @@ x, y = self.find_element(retry=retry, timeout=timeout)

@@ -232,2 +232,27 @@ """

def retry(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
count = 0
ret = None
while count < 5:
if count > 1:
logger.info(f"操作失败,第{count}次重试.")
try:
ret = func(*args, **kwargs)
except Exception as e:
logger.debug(str(e))
time.sleep(3)
count += 1
continue
else:
break
else:
logger.info("重试5次仍然失败.")
return ret
return wrapper
if __name__ == '__main__':

@@ -234,0 +259,0 @@ print(get_free_port())

@@ -28,3 +28,3 @@ """

index: int = None,
debug: bool = False):
_debug: bool = False):
"""

@@ -38,3 +38,3 @@

@param holder: 输入框默认文案
@param debug: 是否调试
@param _debug: 是否调试
"""

@@ -51,3 +51,3 @@ self._driver = driver

self._index = index
self._debug = debug
self._debug = _debug

@@ -54,0 +54,0 @@ self._kwargs = {}

@@ -20,3 +20,3 @@ """

desc: str = None,
debug: bool = False):
_debug: bool = False):
self.driver = driver

@@ -28,3 +28,3 @@ if not desc:

self.target_image = image
self._debug = debug
self._debug = _debug

@@ -31,0 +31,0 @@ def __get__(self, instance, owner):

Metadata-Version: 2.1
Name: kuto
Version: 0.0.67
Version: 0.0.70
Summary: 全平台自动化测试框架

@@ -5,0 +5,0 @@ Home-page: https://gitee.com/bluepang2021/kuto