更改ios、harmony自动化截图

hz_1122
yineng.huang 2025-04-18 15:45:25 +08:00
parent 28be3a4f12
commit b1e29fd073
10 changed files with 323 additions and 35 deletions

View File

@ -41,4 +41,9 @@ public class UpperComputerConstant {
*/
public static final String IOS = "1";
/**
* harmony
*/
public static final String HARMONY = "2";
}

View File

@ -31,6 +31,9 @@ public class EngineController {
@Resource(name = "iosService")
private DebuggerService iosService;
@Resource(name = "harmonyService")
private DebuggerService harmonyService;
@ApiOperation(value = "获取设备驱动")
@PostMapping("/getDriver")
@ -83,8 +86,10 @@ public class EngineController {
logger.info("screen shot in device[{}]...............",info.getDeviceId());
if (UpperComputerConstant.IOS.equals(info.getPlatform())) {
result = iosService.getScreenShot(info);
} else {
} else if (UpperComputerConstant.ANDROID.equals(info.getPlatform())){
result = androidService.getScreenShot(info);
} else if (UpperComputerConstant.HARMONY.equals(info.getPlatform())) {
result = harmonyService.getScreenShot(info);
}
return result;
}
@ -146,17 +151,31 @@ public class EngineController {
@ApiOperation(value = "android清除数据")
@PostMapping("/cleanData")
public boolean cleanData(@RequestBody DebuggerDeviceInfo info){
return androidService.cleanData(info.getDeviceId(), info.getAppPackage());
boolean success = true;
if (UpperComputerConstant.ANDROID.equals(info.getPlatform())) {
success = androidService.cleanData(info.getDeviceId(),info.getAppPackage());
} else if (UpperComputerConstant.IOS.equals(info.getPlatform())){
success = iosService.cleanData(info.getDeviceId(), info.getAppPackage());
} else if (UpperComputerConstant.HARMONY.equals(info.getPlatform())) {
success = harmonyService.cleanData(info.getDeviceId(), info.getAppPackage());
} else {
logger.warn("设备【{}】在获取应用版本的时候设备的类型未定义,类型:{}", info.getDeviceId(), info.getPlatform());
}
return success;
}
@ApiOperation(value = "获取包版本")
@PostMapping("/getPackageVersion")
public String getPackageVersion(@RequestBody DebuggerDeviceInfo info){
String version = "";
if (UpperComputerConstant.IOS.equals(info.getPlatform())) {
if (UpperComputerConstant.ANDROID.equals(info.getPlatform())) {
version = androidService.getPackageVersion(info.getDeviceId(),info.getAppPackage());
} else if (UpperComputerConstant.IOS.equals(info.getPlatform())){
version = iosService.getPackageVersion(info.getDeviceId(), info.getAppPackage());
} else if (UpperComputerConstant.HARMONY.equals(info.getPlatform())) {
version = harmonyService.getPackageVersion(info.getDeviceId(), info.getAppPackage());
} else {
version = androidService.getPackageVersion(info.getDeviceId(), info.getAppPackage());
logger.warn("设备【{}】在获取应用版本的时候设备的类型未定义,类型:{}", info.getDeviceId(), info.getPlatform());
}
return version;
}
@ -173,8 +192,12 @@ public class EngineController {
boolean result = false;
if (UpperComputerConstant.IOS.equals(info.getPlatform())) {
result = iosService.startRecord(info);
} else {
} else if (UpperComputerConstant.ANDROID.equals(info.getPlatform())) {
result = androidService.startRecord(info);
} else if (UpperComputerConstant.HARMONY.equals(info.getPlatform())){
result = harmonyService.startRecord(info);
} else {
logger.warn("设备【{}】在开启录屏的类型未定义,类型:{}", info.getDeviceId(), info.getPlatform());
}
return result;
}
@ -183,11 +206,14 @@ public class EngineController {
@PostMapping("/endRecord")
public String endRecord(@RequestBody DebuggerDeviceInfo info){
String result = null;
logger.info("收到引擎结束记录的入参:{}", JSONObject.toJSONString(info));
if (UpperComputerConstant.IOS.equals(info.getPlatform())) {
result = iosService.endRecord(info);
} else {
} else if (UpperComputerConstant.ANDROID.equals(info.getPlatform())){
result = androidService.endRecord(info);
}else if (UpperComputerConstant.HARMONY.equals(info.getPlatform())){
result = harmonyService.endRecord(info);
} else {
logger.warn("设备【{}】在结束录屏的类型未定义,类型:{}", info.getDeviceId(), info.getPlatform());
}
return result;
}
@ -200,7 +226,18 @@ public class EngineController {
@ApiOperation(value = "ios是否安装某一个包")
@PostMapping("/isAppInstalled")
public boolean isAppInstalled(@RequestBody DebuggerDeviceInfo info){
return iosService.isAppInstalled(info.getDeviceId(), info.getAppPackage());
String platform = info.getPlatform();
boolean isInstalled = false;
if (UpperComputerConstant.ANDROID.equals(platform)) {
isInstalled = androidService.isAppInstalled(info.getDeviceId(), info.getAppPackage());
} else if (UpperComputerConstant.IOS.equals(platform)) {
isInstalled = iosService.isAppInstalled(info.getDeviceId(), info.getAppPackage());
} else if (UpperComputerConstant.HARMONY.equals(platform)) {
isInstalled = harmonyService.isAppInstalled(info.getDeviceId(), info.getAppPackage());
} else {
logger.warn("设备【{}】在判断应用是否安装的类型未定义,类型:{}", info.getDeviceId(), platform);
}
return isInstalled;
}
/**
@ -211,7 +248,18 @@ public class EngineController {
@ApiOperation(value = "移除ios某一个包")
@PostMapping("/removeApp")
public boolean removeApp(@RequestBody DebuggerDeviceInfo info){
return iosService.removeApp(info.getDeviceId(), info.getAppPackage());
String platform = info.getPlatform();
boolean remove = false;
if (UpperComputerConstant.ANDROID.equals(platform)) {
remove = androidService.removeApp(info.getDeviceId(), info.getAppPackage());
} else if (UpperComputerConstant.IOS.equals(platform)) {
remove = iosService.removeApp(info.getDeviceId(), info.getAppPackage());
} else if (UpperComputerConstant.HARMONY.equals(platform)) {
remove = harmonyService.removeApp(info.getDeviceId(), info.getAppPackage());
} else {
logger.warn("设备【{}】在移除应用的类型未定义,类型:{}", info.getDeviceId(), platform);
}
return remove;
}
/**
@ -225,10 +273,14 @@ public class EngineController {
boolean result = false;
int times = 0;
while (times < 3) {
if (UpperComputerConstant.IOS.equals(info.getPlatform())) {
result = iosService.installApp(info.getDeviceId(), info.getAppPath(), info.getAppPackage());
if (UpperComputerConstant.ANDROID.equals(info.getPlatform())) {
result = androidService.installApp(info.getDeviceId(), info.getAppPath(),info.getAppPackage());
} else if (UpperComputerConstant.IOS.equals(info.getPlatform())) {
result = iosService.installApp(info.getDeviceId(), info.getAppPath(),info.getAppPackage());
} else if (UpperComputerConstant.HARMONY.equals(info.getPlatform())) {
result = harmonyService.installApp(info.getDeviceId(), info.getAppPath(),info.getAppPackage());
} else {
result = androidService.installApp(info.getDeviceId(), info.getAppPath(), info.getAppPackage());
logger.warn("设备【{}】在安装应用的类型未定义,类型:{}", info.getDeviceId(), info.getPlatform());
}
if (result) {
break;
@ -247,8 +299,12 @@ public class EngineController {
}
if (UpperComputerConstant.ANDROID.equals(info.getPlatform())) {
success = androidService.activeApp(info.getDeviceId(),info.getAppPackage());
} else {
} else if (UpperComputerConstant.IOS.equals(info.getPlatform())){
success = iosService.activeApp(info.getDeviceId(), info.getAppPackage());
} else if (UpperComputerConstant.HARMONY.equals(info.getPlatform())) {
success = harmonyService.activeApp(info.getDeviceId(), info.getAppPackage());
} else {
logger.warn("设备【{}】在启动应用的类型未定义,类型:{}", info.getDeviceId(), info.getPlatform());
}
return success;
}
@ -312,7 +368,17 @@ public class EngineController {
@ApiOperation(value = "关闭App")
@PostMapping("/terminateApp")
public boolean terminateApp(@RequestBody DebuggerDeviceInfo info){
return iosService.terminateApp(info.getDeviceId(), info.getAppPackage());
boolean success = false;
if (UpperComputerConstant.ANDROID.equals(info.getPlatform())) {
success = androidService.terminateApp(info.getDeviceId(),info.getAppPackage());
} else if (UpperComputerConstant.IOS.equals(info.getPlatform())){
success = iosService.terminateApp(info.getDeviceId(), info.getAppPackage());
} else if (UpperComputerConstant.HARMONY.equals(info.getPlatform())) {
success = harmonyService.terminateApp(info.getDeviceId(), info.getAppPackage());
} else {
logger.warn("设备【{}】在关闭应用的时候设备的类型未定义,类型:{}", info.getDeviceId(), info.getPlatform());
}
return success;
}
@PostMapping("/releaseAdbForwardPort")

View File

@ -199,4 +199,9 @@ public abstract class AbstractDeviceManager extends Thread implements DeviceMana
public void setScreenInfo(String deviceId, ScreenInfo screenInfo) {
this.screenInfoMap.put(deviceId, screenInfo);
}
@Override
public ScreenInfo getScreenInfo(String deviceId) {
return screenInfoMap.get(deviceId);
}
}

View File

@ -59,6 +59,7 @@ public interface DeviceManager {
public boolean checkMobileIsOnline(String serial);
public ScreenInfo getScreenInfo(String deviceId);
public void setScreenInfo(String deviceId, ScreenInfo screenInfo);
}

View File

@ -1,6 +1,7 @@
package net.northking.cctp.upperComputer.deviceManager.thread;
import com.alibaba.fastjson.JSON;
import net.northking.cctp.upperComputer.automation.entity.ScreenInfo;
import net.northking.cctp.upperComputer.config.BuildWdaConfig;
import net.northking.cctp.upperComputer.deviceManager.IOSDeviceManager;
import net.northking.cctp.upperComputer.deviceManager.UpperComputerManager;
@ -200,6 +201,18 @@ public class MacIosDeviceInitThread extends IosDeviceInitThread {
// return;
// }
logger.debug("注册设备信息:{}", JSON.toJSONString(deviceInfo));
phone.setStatus(true);
ScreenInfoData screenInfoData = nkAgent.screenInfo();
logger.debug("获取设备【{}】的初始屏幕参数:{}",phone.getUdid(),JSON.toJSONString(screenInfoData));
ScreenInfo screenInfo = new ScreenInfo();
Double width = screenInfoData.getWidth() * screenInfoData.getScale();
Double height = screenInfoData.getHeight() * screenInfoData.getScale();
Double scale = screenInfoData.getScale();
screenInfo.setWidth(width.intValue());
screenInfo.setHeight(height.intValue());
screenInfo.setScale(scale.intValue());
screenInfo.setRotation((Integer) deviceInfo.get("rotation"));
IOSDeviceManager.getInstance().setScreenInfo(phone.getUdid(),screenInfo);
IOSDeviceManager.getInstance().registerDeviceToDeviceManager(deviceInfo);
phone.setStatus(true);
IOSDeviceManager.getInstance().publishDeviceAgentAlready(phone.getUdid());

View File

@ -2,6 +2,7 @@ package net.northking.cctp.upperComputer.deviceManager.thread;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import net.northking.cctp.upperComputer.automation.entity.ScreenInfo;
import net.northking.cctp.upperComputer.deviceManager.IOSDeviceManager;
import net.northking.cctp.upperComputer.deviceManager.UpperComputerManager;
import net.northking.cctp.upperComputer.driver.usbmuxd.AppleDevice;
@ -194,6 +195,12 @@ public class WindowsAndLinuxIosDeviceInitThread extends IosDeviceInitThread {
logger.warn("设备【{}】请求创建session时出错待会再试", phone.getUdid());
return;
}
ScreenInfo screenInfo = new ScreenInfo();
screenInfo.setWidth(width*scale);
screenInfo.setHeight(height*scale);
screenInfo.setScale(scale);
screenInfo.setRotation((Integer) deviceInfo.get("rotation"));
IOSDeviceManager.getInstance().setScreenInfo(phone.getUdid(),screenInfo);
IOSDeviceManager.getInstance().publishDeviceAgentAlready(phone.getUdid());
}).start();
}

View File

@ -1,13 +1,17 @@
package net.northking.cctp.upperComputer.service;
import com.alibaba.fastjson.JSON;
import net.northking.cctp.upperComputer.config.MobileProperty;
import net.northking.cctp.upperComputer.deviceManager.UpperComputerManager;
import net.northking.cctp.upperComputer.entity.DebuggerDeviceInfo;
import net.northking.cctp.upperComputer.utils.ios.IosDeviceHandleHelper;
import net.northking.cctp.upperComputer.utils.ios.LinuxAndWindowsIosHandleHelper;
import net.northking.cctp.upperComputer.utils.ios.MacIosHandleHelper;
import net.northking.cctp.upperComputer.exception.ExecuteException;
import net.northking.cctp.upperComputer.utils.HttpUtils;
import net.northking.cctp.upperComputer.utils.deviceHepler.DeviceHelper;
import net.northking.cctp.upperComputer.utils.deviceHepler.ios.LinuxAndWindowsIosHandleHelper;
import net.northking.cctp.upperComputer.utils.deviceHepler.ios.MacIosHandleHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.util.CollectionUtils;
import java.io.*;
@ -21,7 +25,7 @@ public abstract class AbstractDebuggerService implements DebuggerService {
protected MobileProperty mobileProperty;
protected IosDeviceHandleHelper deviceHandleHelper;
protected DeviceHelper deviceHandleHelper;
private final Logger logger = LoggerFactory.getLogger(AbstractDebuggerService.class);
@ -43,10 +47,6 @@ public abstract class AbstractDebuggerService implements DebuggerService {
this.mobileProperty = mobileProperty;
}
@Override
public boolean isAppInstalled(String deviceId, String appPackage) {
return false;
}
@Override
public boolean removeApp(String deviceId, String appPackage) {
@ -134,4 +134,57 @@ public abstract class AbstractDebuggerService implements DebuggerService {
public boolean releaseAdbForwardPort(String deviceId) {
return false;
}
protected String getScreenShot(DebuggerDeviceInfo info,int width,int height) {
File shotFile = deviceHandleHelper.getScreenShotFile(info.getDeviceId(),info.getX(),info.getY(),info.getLength(),info.getWidth(),info.getScreenLength(),info.getScreenWidth(),width,height);
String path = uploadScreenToServer(shotFile,info);
return path;
}
protected String uploadScreenToServer(File file, DebuggerDeviceInfo info){
String path = null;
try {
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + info.getUserToken());
path = HttpUtils.doUpload(mobileProperty.getServerAddr()+mobileProperty.getFileUploadAddr(), file,headers);
logger.info("上传截图完成:{}",path);
Map map = JSON.parseObject(path, Map.class);
if ((boolean) map.get("success")) {
path = (String) map.get("data");
}
} catch (ExecuteException e) {
logger.error("截图失败",e);
throw e;
} catch (Exception e) {
logger.error("截图失败",e);
throw new ExecuteException("截取图片失败");
}finally {
// if (file.exists()) {
// boolean delete = file.delete();
// if (!delete) {
// logger.warn("临时文件【{}】删除失败",file.getAbsolutePath());
// }
// }
}
return path;
}
@Override
public boolean cleanData(String deviceId, String packageName) {
return deviceHandleHelper.cleanData(deviceId,packageName);
}
@Override
public boolean isAppInstalled(String deviceId, String appPackage) {
return deviceHandleHelper.isAppInstalled(deviceId, appPackage);
}
@Override
public String getPackageVersion(String deviceId, String packageName) {
return deviceHandleHelper.getOldPackageCode(deviceId,packageName);
}
@Override
public boolean terminateApp(String deviceId, String appPackage) {
return deviceHandleHelper.terminateApp(deviceId,appPackage);
}
}

View File

@ -0,0 +1,135 @@
package net.northking.cctp.upperComputer.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.appium.java_client.AppiumDriver;
import net.northking.cctp.upperComputer.automation.entity.ScreenInfo;
import net.northking.cctp.upperComputer.deviceManager.HarmonyDeviceManager;
import net.northking.cctp.upperComputer.deviceManager.screen.HarmonyScreenResponseThread;
import net.northking.cctp.upperComputer.deviceManager.thread.HarmonyProvider;
import net.northking.cctp.upperComputer.driver.harmony.HarmonyDevice;
import net.northking.cctp.upperComputer.entity.DebuggerDeviceInfo;
import net.northking.cctp.upperComputer.utils.deviceHepler.harmony.HarmonyHandlerHelper;
import org.openqa.selenium.WebElement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* @author : yineng.huang
* @date : 2024/10/31 16:54
*/
@Service("harmonyService")
public class HarmonyDebuggerServiceImpl extends AbstractDebuggerService {
private final Logger logger = LoggerFactory.getLogger(HarmonyDebuggerServiceImpl.class);
public HarmonyDebuggerServiceImpl() {
this.deviceHandleHelper = new HarmonyHandlerHelper();
}
@Override
public Object getUiTree(String deviceId) {
return null;
}
@Override
public AppiumDriver<WebElement> getDriver(DebuggerDeviceInfo info) {
return null;
}
@Override
public boolean initApp(DebuggerDeviceInfo info) {
return false;
}
@Override
public String getScreenShot(DebuggerDeviceInfo info) {
ScreenInfo screenInfo = HarmonyDeviceManager.getInstance().getScreenInfo(info.getDeviceId());
String path = getScreenShot(info, screenInfo.getWidth(), screenInfo.getHeight());
return path;
}
@Override
public boolean destroyDriver(String deviceId) {
return false;
}
@Override
public String getScreenShotToBase64(DebuggerDeviceInfo info) {
return null;
}
@Override
public String shotAllScreen(DebuggerDeviceInfo info) {
return null;
}
@Override
public String uploadShotAllScreen(DebuggerDeviceInfo info) {
return null;
}
@Override
public boolean startRecord(DebuggerDeviceInfo info) {
logger.info("收到设备【{}】在任务【{}】开启录屏的请求............",info.getDeviceId(),info.getTaskId());
HarmonyScreenResponseThread screenThread = HarmonyDeviceManager.getInstance().getScreenThread(info.getDeviceId());
if (null == screenThread) {
HarmonyProvider provider = HarmonyDeviceManager.getInstance().getCurrentDeviceProvider(info.getDeviceId());
if (null == provider) {
logger.error("当前设备【{}】不在线,无法开启录频",info.getDeviceId());
return false;
}
HarmonyDevice currentDevice = HarmonyDeviceManager.getInstance().getCurrentDevice(info.getDeviceId());
if (null == currentDevice) {
logger.error("当前设备【{}】不在线,无法开启录频",info.getDeviceId());
return false;
}
screenThread = new HarmonyScreenResponseThread(currentDevice);
HarmonyDeviceManager.getInstance().saveScreenThread(info.getDeviceId(), screenThread);
//开启手机端的屏幕
boolean success = provider.startCaptureScreenImageStream(0.5f, screenThread);
logger.info("开始拉取设备【{}】的屏幕,结果:{}",info.getDeviceId(),success);
if (!success) {
logger.error("拉取设备【{}】的屏幕失败",info.getDeviceId());
return false;
}
}
String taskId = info.getTaskId();
String tenantId = info.getTenantId();
String resolution = info.getResolution();
String[] split = resolution.split("\\*");
int width = Integer.parseInt(split[0]);
int height = Integer.parseInt(split[1]);
int isBigger = height - width;
if (isBigger < 0) { //高比宽小,换一下
int temp = width;
width = height;
height = temp;
}
screenThread.startRecordScreen(tenantId, width, height,taskId);
return true;
}
@Override
public String endRecord(DebuggerDeviceInfo info) {
String videoUrl = null;
logger.info("收到设备【{}】在任务【{}】关闭录屏的请求............",info.getDeviceId(),info.getTaskId());
HarmonyScreenResponseThread screenThread = HarmonyDeviceManager.getInstance().getScreenThread(info.getDeviceId());
if (null != screenThread) {
String result = screenThread.stopRecord(info);
JSONObject jsonObject = JSON.parseObject(result, JSONObject.class);
videoUrl = jsonObject.getString("videoUrl");
} else {
logger.info("设备【{}】在任务【{}】录屏不存在............",info.getDeviceId(),info.getTaskId());
}
logger.info("设备【{}】在任务【{}】录屏保存的地址:{}............",info.getDeviceId(),info.getTaskId(),videoUrl);
return videoUrl;
}
@Override
public String getCurrentMessage(String deviceId) {
return null;
}
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.appium.java_client.AppiumDriver;
import net.northking.cctp.upperComputer.automation.entity.ScreenInfo;
import net.northking.cctp.upperComputer.config.MobileProperty;
import net.northking.cctp.upperComputer.deviceManager.common.PyMobileDevice;
import net.northking.cctp.upperComputer.deviceManager.screen.IosScreenResponseThread;
@ -21,7 +22,7 @@ import net.northking.cctp.upperComputer.service.thread.IOSDeviceInfoByPackageThr
import net.northking.cctp.upperComputer.deviceManager.IOSDeviceManager;
import net.northking.cctp.upperComputer.utils.HttpUtils;
import net.northking.cctp.upperComputer.utils.ScreenShotUtils;
import net.northking.cctp.upperComputer.utils.ios.MacIosHandleHelper;
import net.northking.cctp.upperComputer.utils.deviceHepler.ios.MacIosHandleHelper;
import org.apache.commons.lang3.StringUtils;
import org.openqa.selenium.WebElement;
import org.slf4j.Logger;
@ -102,7 +103,8 @@ public class IosDebuggerServiceImpl extends AbstractDebuggerService {
@Override
public String getScreenShot(DebuggerDeviceInfo info) {
File shotFile = deviceHandleHelper.getScreenShotFile(info.getDeviceId(),info.getX(),info.getY(),info.getLength(),info.getWidth(),info.getScreenLength(),info.getScreenWidth());
ScreenInfo screenInfo = IOSDeviceManager.getInstance().getScreenInfo(info.getDeviceId());
File shotFile = deviceHandleHelper.getScreenShotFile(info.getDeviceId(),info.getX(),info.getY(),info.getLength(),info.getWidth(),info.getScreenLength(),info.getScreenWidth(),screenInfo.getWidth(), screenInfo.getHeight());
String path = null;
try {
HttpHeaders headers = new HttpHeaders();
@ -155,7 +157,8 @@ public class IosDebuggerServiceImpl extends AbstractDebuggerService {
@Override
public String getScreenShotToBase64(DebuggerDeviceInfo info) {
File screenShotFile = deviceHandleHelper.getScreenShotFile(info.getDeviceId(),info.getX(),info.getY(),info.getLength(),info.getWidth(),info.getScreenLength(),info.getScreenWidth());
ScreenInfo screenInfo = IOSDeviceManager.getInstance().getScreenInfo(info.getDeviceId());
File screenShotFile = deviceHandleHelper.getScreenShotFile(info.getDeviceId(),info.getX(),info.getY(),info.getLength(),info.getWidth(),info.getScreenLength(),info.getScreenWidth(),screenInfo.getWidth(), screenInfo.getHeight());
String imgBase64 = null;
try {
imgBase64 = Base64.encode(screenShotFile);

View File

@ -586,13 +586,13 @@ public class CommonTools {
return aBoolean;
}
/**
* <p></p>
*
* @param text
* @param cleanStr 0-1-
* @param deviceDriver
* @param targets
/**
* * <p></p>
* *
* * @param text
* * @param cleanStr 0-1-
* * @param deviceDriver
* * @param targets
* @param waitTimeout
* @param waitStatusStr
* @param swipe 0-up-down-left-,right-
@ -600,8 +600,8 @@ public class CommonTools {
* @param preExecuteWait
* @param sufExecuteWait
* @return
*/
/*@Keyword(alias = "输入文本", category = "0", attributes = "45", commonlyUse = true)
* */
@Keyword(alias = "输入文本", category = "0", attributes = "45", commonlyUse = true)
@Return(name = "result", comment = "输入的结果", type = DataType.BOOLEAN)
public boolean inputText(IExecuteContext context,
@Argument(name = "text", scope = ParamScope.VARIABLES, comment = "输入的文本", type = DataType.STRING) String text,
@ -654,7 +654,7 @@ public class CommonTools {
throw new ExecuteException("用户取消,执行失败");
}
return aBoolean;
}*/
}
/**
* <p></p>