M8Test Help

在脚本中使用

在脚本中运用虚拟屏幕,能够让脚本在后台自动执行测试任务,且不会对前台应用造成干扰。

创建虚拟屏幕

import com.m8test.script.GlobalVariables._displays // 创建虚拟屏幕, create 方法会返回一个 Display 对象 val display = _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }
// 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }
import com.m8test.script.core.api.display.Display; import kotlin.jvm.functions.Function1; import static com.m8test.script.GlobalVariables.$displays; // 创建虚拟屏幕, create 方法会返回一个 Display 对象 Display display = $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } });
// 创建虚拟屏幕, create 方法会返回一个 Display 对象 let display = $displays.create(function(config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 })
-- 创建虚拟屏幕, create 方法会返回一个 Display 对象 local display = _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end)
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; // 创建虚拟屏幕, create 方法会返回一个 Display 对象 $display = $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 });
from m8test_java.com.m8test.script.GlobalVariables import _displays # 创建虚拟屏幕, create 方法会返回一个 Display 对象 display = _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config)
# 创建虚拟屏幕, create 方法会返回一个 Display 对象 display = $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }

销毁虚拟屏幕

import com.m8test.script.GlobalVariables._displays // 创建虚拟屏幕, create 方法会返回一个 Display 对象 val display = _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } // 判断虚拟屏幕是否被销毁 if (!display.isDestroyed()) { // 销毁虚拟屏幕 display.destroy() }
// 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } // 判断虚拟屏幕是否被销毁 if (!display.isDestroyed()) { // 销毁虚拟屏幕 display.destroy() }
import com.m8test.script.core.api.display.Display; import kotlin.jvm.functions.Function1; import static com.m8test.script.GlobalVariables.$displays; // 创建虚拟屏幕, create 方法会返回一个 Display 对象 Display display = $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); // 判断虚拟屏幕是否被销毁 if (!display.isDestroyed()) { // 销毁虚拟屏幕 display.destroy(); }
// 创建虚拟屏幕, create 方法会返回一个 Display 对象 let display = $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) // 判断虚拟屏幕是否被销毁 if (!display.isDestroyed()) { // 销毁虚拟屏幕 display.destroy() }
-- 创建虚拟屏幕, create 方法会返回一个 Display 对象 local display = _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) -- 判断虚拟屏幕是否被销毁 if not display:isDestroyed() then -- 销毁虚拟屏幕 display:destroy() end
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; // 创建虚拟屏幕, create 方法会返回一个 Display 对象 $display = $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); // 判断虚拟屏幕是否被销毁 if (!$display->isDestroyed()) { // 销毁虚拟屏幕 $display->destroy(); }
from m8test_java.com.m8test.script.GlobalVariables import _displays # 创建虚拟屏幕, create 方法会返回一个 Display 对象 display = _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 判断虚拟屏幕是否被销毁 if not display.isDestroyed(): # 销毁虚拟屏幕 display.destroy()
# 创建虚拟屏幕, create 方法会返回一个 Display 对象 display = $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } # 判断虚拟屏幕是否被销毁 unless display.isDestroyed # 销毁虚拟屏幕 display.destroy end

虚拟屏幕启动应用

import com.m8test.script.GlobalVariables.* import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 fun getDisplay(): Display { return _displays.getAll().firstOrNull() ?: _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } } // 获取一个虚拟屏幕 val display = getDisplay() // 打开应用需要使用shell命令,必须具有adb权限或者root权限的shell才可以 val shell = _shells.newAdbShell(_maps.mapOf()) // 启动app的命令, 第一个参数为要启动的应用包名,例如 "com.tencent.mm"。第二个参数为启动应用所需的用户 ID。例如 "0" 代表主用户,"999" 代表应用分身或工作资料用户。第三个参数为目标显示器的 ID。例如 "0" 代表主显示器。如果此字符串为空,则命令中不会包含 --display 参数,应用将在默认显示器上启动。 val startAppCommand = _shellCommands.launchApp("com.tencent.mm", "0", display.getId().toString()) // 通过shell执行启动app的命令 val result = shell.exec(startAppCommand!!) {} // 将启动结果打印出来 if (result.isSuccess()) { _console.log("在虚拟屏幕", display.getId(), "启动微信成功") } else { _console.log("在虚拟屏幕", display.getId(), "启动微信失败") }
import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 Display getDisplay() { def allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } return display } // 获取一个虚拟屏幕 def display = getDisplay() // 打开应用需要使用shell命令,必须具有adb权限或者root权限的shell才可以 def shell = $shells.newAdbShell($maps.mapOf()) // 启动app的命令, 第一个参数为要启动的应用包名,例如 "com.tencent.mm"。第二个参数为启动应用所需的用户 ID。例如 "0" 代表主用户,"999" 代表应用分身或工作资料用户。第三个参数为目标显示器的 ID。例如 "0" 代表主显示器。如果此字符串为空,则命令中不会包含 --display 参数,应用将在默认显示器上启动。 def startAppCommand = $shellCommands.launchApp("com.tencent.mm", "0", display.getId().toString()) // 通过shell执行启动app的命令 def result = shell.exec(startAppCommand) {} // 将启动结果打印出来 if (result.isSuccess()) { $console.log("在虚拟屏幕", display.getId(), "启动微信成功") } else { $console.log("在虚拟屏幕", display.getId(), "启动微信失败") }
import com.m8test.script.core.api.display.Display; import com.m8test.script.core.api.shell.Result; import com.m8test.script.core.api.shell.Shell; import kotlin.jvm.functions.Function1; import java.util.HashMap; import java.util.List; import static com.m8test.script.GlobalVariables.*; private static Display getDisplay() { List<Display> allDisplays = $displays.getAll(); if (allDisplays.size() > 0) return (Display) allDisplays.get(0); // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); } // 获取一个虚拟屏幕 Display display = getDisplay(); // 打开应用需要使用shell命令,必须具有adb权限或者root权限的shell才可以 Shell shell = $shells.newAdbShell(new HashMap<String, String>()); // 启动app的命令, 第一个参数为要启动的应用包名,例如 "com.tencent.mm"。第二个参数为启动应用所需的用户 ID。例如 "0" 代表主用户,"999" 代表应用分身或工作资料用户。第三个参数为目标显示器的 ID。例如 "0" 代表主显示器。如果此字符串为空,则命令中不会包含 --display 参数,应用将在默认显示器上启动。 String startAppCommand = $shellCommands.launchApp("com.tencent.mm", "0", display.getId() + ""); // 通过shell执行启动app的命令 Result result = shell.exec(startAppCommand, new Function1() { @Override public Object invoke(Object o) { return null; } }); // 将启动结果打印出来 if (result.isSuccess()) { $console.log("在虚拟屏幕", display.getId(), "启动微信成功"); } else { $console.log("在虚拟屏幕", display.getId(), "启动微信失败"); }
/** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * * @returns {Packages.com.m8test.script.core.api.display.Display} */ function getDisplay() { let allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) } // 获取一个虚拟屏幕 let display = getDisplay() // 打开应用需要使用shell命令,必须具有adb权限或者root权限的shell才可以 let shell = $shells.newAdbShell($maps.mapOf()) // 启动app的命令, 第一个参数为要启动的应用包名,例如 "com.tencent.mm"。第二个参数为启动应用所需的用户 ID。例如 "0" 代表主用户,"999" 代表应用分身或工作资料用户。第三个参数为目标显示器的 ID。例如 "0" 代表主显示器。如果此字符串为空,则命令中不会包含 --display 参数,应用将在默认显示器上启动。 let startAppCommand = $shellCommands.launchApp("com.tencent.mm", "0", display.getId().toString()) // 通过shell执行启动app的命令 let result = shell.exec(startAppCommand, function (config) { }) // 将启动结果打印出来 if (result.isSuccess()) { $console.log("在虚拟屏幕", display.getId(), "启动微信成功") } else { $console.log("在虚拟屏幕", display.getId(), "启动微信失败") }
-- 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 --- @return m8test_java.com.m8test.script.core.api.display.Display function getDisplay() local allDisplays = _displays:getAll() if not allDisplays:isEmpty() then return allDisplays:get(0) else return _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) end end -- 获取一个虚拟屏幕 local display = getDisplay() -- 打开应用需要使用shell命令,必须具有adb权限或者root权限的shell才可以 local shell = _shells:newAdbShell(_maps:mapOf()) -- 启动app的命令, 第一个参数为要启动的应用包名,例如 "com.tencent.mm"。第二个参数为启动应用所需的用户 ID。例如 "0" 代表主用户,"999" 代表应用分身或工作资料用户。第三个参数为目标显示器的 ID。例如 "0" 代表主显示器。如果此字符串为空,则命令中不会包含 --display 参数,应用将在默认显示器上启动。 local startAppCommand = _shellCommands:launchApp("com.tencent.mm", "0", display:getId() .. "") -- 通过shell执行启动app的命令 local result = shell:exec(startAppCommand, function(config) end) -- 将启动结果打印出来 if result:isSuccess() then _console:log("在虚拟屏幕", display:getId(), "启动微信成功") else _console:log("在虚拟屏幕", display:getId(), "启动微信失败") end
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; /** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * @param \m8test_java\com\m8test\script\core\api\display\Displays $displays * @return \m8test_java\com\m8test\script\core\api\display\Display */ function getDisplay($displays) { $allDisplays = $displays->getAll(); if ($allDisplays->size() > 0) { return $allDisplays->get(0); } else { return $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); } } // 获取一个虚拟屏幕 $display = getDisplay($displays); /** @var m8test_java\com\m8test\script\core\api\shell\Shells $shells */ global $shells; /** @var m8test_java\com\m8test\script\core\api\collections\Maps $maps */ global $maps; // 打开应用需要使用shell命令,必须具有adb权限或者root权限的shell才可以 $shell = $shells->newAdbShell($maps->mapOf()); /** @var m8test_java\com\m8test\script\core\api\shell\ShellCommands $shellCommands */ global $shellCommands; // 启动app的命令, 第一个参数为要启动的应用包名,例如 "com.tencent.mm"。第二个参数为启动应用所需的用户 ID。例如 "0" 代表主用户,"999" 代表应用分身或工作资料用户。第三个参数为目标显示器的 ID。例如 "0" 代表主显示器。如果此字符串为空,则命令中不会包含 --display 参数,应用将在默认显示器上启动。 $startAppCommand = $shellCommands->launchApp("com.tencent.mm", "0", (string)$display->getId()); // 通过shell执行启动app的命令 $result = $shell->exec($startAppCommand, function ($config) { }); /** @var m8test_java\com\m8test\script\core\api\console\Console $console */ global $console; // 将启动结果打印出来 if ($result->isSuccess()) { $console->log(javaString("在虚拟屏幕"), $display->getId(), javaString("启动微信成功")); } else { $console->log(javaString("在虚拟屏幕"), $display->getId(), javaString("启动微信失败")); }
from m8test_java.com.m8test.script.GlobalVariables import _console from m8test_java.com.m8test.script.GlobalVariables import _displays from m8test_java.com.m8test.script.GlobalVariables import _maps from m8test_java.com.m8test.script.GlobalVariables import _shellCommands from m8test_java.com.m8test.script.GlobalVariables import _shells # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 def getDisplay(): allDisplays = _displays.getAll() if allDisplays.size() > 0: return allDisplays.get(0) else: return _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 获取一个虚拟屏幕 display = getDisplay() # 打开应用需要使用shell命令,必须具有adb权限或者root权限的shell才可以 shell = _shells.newAdbShell(_maps.mapOf()) # 启动app的命令, 第一个参数为要启动的应用包名,例如 "com.tencent.mm"。第二个参数为启动应用所需的用户 ID。例如 "0" 代表主用户,"999" 代表应用分身或工作资料用户。第三个参数为目标显示器的 ID。例如 "0" 代表主显示器。如果此字符串为空,则命令中不会包含 #display 参数,应用将在默认显示器上启动。 startAppCommand = _shellCommands.launchApp("com.tencent.mm", "0", str(display.getId())) # 通过shell执行启动app的命令 result = shell.exec(startAppCommand, lambda c: c) # 将启动结果打印出来 if result.isSuccess(): _console.log("在虚拟屏幕", display.getId(), "启动微信成功") else: _console.log("在虚拟屏幕", display.getId(), "启动微信失败")
java_import 'com.m8test.script.core.api.display.Display' # encoding: utf-8 # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 # @return [Display] 已存在或者新创建的虚拟屏幕 def getDisplay allDisplays = $displays.getAll if allDisplays.size > 0 allDisplays.get(0) else $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } end end # 获取一个虚拟屏幕 display = getDisplay() # 打开应用需要使用shell命令,必须具有adb权限或者root权限的shell才可以 shell = $shells.newAdbShell($maps.mapOf) # 启动app的命令, 第一个参数为要启动的应用包名,例如 "com.tencent.mm"。第二个参数为启动应用所需的用户 ID。例如 "0" 代表主用户,"999" 代表应用分身或工作资料用户。第三个参数为目标显示器的 ID。例如 "0" 代表主显示器。如果此字符串为空,则命令中不会包含 --display 参数,应用将在默认显示器上启动。 startAppCommand = $shellCommands.launchApp("com.tencent.mm", "0", "#{display.getId}") # 通过shell执行启动app的命令 result = shell.exec(startAppCommand) { |config| } # 将启动结果打印出来 if result.isSuccess $console.log("在虚拟屏幕", display.getId, "启动微信成功") else $console.log("在虚拟屏幕", display.getId, "启动微信失败") end

虚拟屏幕属性

import com.m8test.script.GlobalVariables._console import com.m8test.script.GlobalVariables._displays import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 fun getDisplay(): Display { return _displays.getAll().firstOrNull() ?: _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } } // 获取一个虚拟屏幕 val display = getDisplay() // 获取虚拟屏幕宽度 _console.log("宽度", display.getWidth()) // 获取虚拟屏幕高度 _console.log("高度", display.getHeight()) // 获取虚拟屏幕密度 _console.log("密度", display.getDensity()) // 获取虚拟屏幕id, 这个经常用到,例如需要在虚拟屏幕启动应用或者通过无障碍实现自动化操作时都需要id作为参数 _console.log("id", display.getId())
import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 Display getDisplay() { def allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } return display } // 获取一个虚拟屏幕 def display = getDisplay() // 获取虚拟屏幕宽度 $console.log("宽度", display.getWidth()) // 获取虚拟屏幕高度 $console.log("高度", display.getHeight()) // 获取虚拟屏幕密度 $console.log("密度", display.getDensity()) // 获取虚拟屏幕id, 这个经常用到,例如需要在虚拟屏幕启动应用或者通过无障碍实现自动化操作时都需要id作为参数 $console.log("id", display.getId())
import com.m8test.script.core.api.display.Display; import kotlin.jvm.functions.Function1; import java.util.List; import static com.m8test.script.GlobalVariables.$console; import static com.m8test.script.GlobalVariables.$displays; private static Display getDisplay() { List<Display> allDisplays = $displays.getAll(); if (allDisplays.size() > 0) return (Display) allDisplays.get(0); // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); } // 获取一个虚拟屏幕 Display display = getDisplay(); // 获取虚拟屏幕宽度 $console.log("宽度", display.getWidth()); // 获取虚拟屏幕高度 $console.log("高度", display.getHeight()); // 获取虚拟屏幕密度 $console.log("密度", display.getDensity()); // 获取虚拟屏幕id, 这个经常用到,例如需要在虚拟屏幕启动应用或者通过无障碍实现自动化操作时都需要id作为参数 $console.log("id", display.getId());
/** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * * @returns {Packages.com.m8test.script.core.api.display.Display} */ function getDisplay() { let allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) } // 获取一个虚拟屏幕 let display = getDisplay() // 获取虚拟屏幕宽度 $console.log("宽度", display.getWidth()) // 获取虚拟屏幕高度 $console.log("高度", display.getHeight()) // 获取虚拟屏幕密度 $console.log("密度", display.getDensity()) // 获取虚拟屏幕id, 这个经常用到,例如需要在虚拟屏幕启动应用或者通过无障碍实现自动化操作时都需要id作为参数 $console.log("id", display.getId())
-- 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 --- @return m8test_java.com.m8test.script.core.api.display.Display function getDisplay() local allDisplays = _displays:getAll() if not allDisplays:isEmpty() then return allDisplays:get(0) else return _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) end end -- 获取一个虚拟屏幕 local display = getDisplay() -- 获取虚拟屏幕宽度 _console:log("宽度", display:getWidth()) -- 获取虚拟屏幕高度 _console:log("高度", display:getHeight()) -- 获取虚拟屏幕密度 _console:log("密度", display:getDensity()) -- 获取虚拟屏幕id, 这个经常用到,例如需要在虚拟屏幕启动应用或者通过无障碍实现自动化操作时都需要id作为参数 _console:log("id", display:getId())
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; /** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * @param \m8test_java\com\m8test\script\core\api\display\Displays $displays * @return \m8test_java\com\m8test\script\core\api\display\Display */ function getDisplay($displays) { $allDisplays = $displays->getAll(); if ($allDisplays->size() > 0) { return $allDisplays->get(0); } else { return $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); } } // 获取一个虚拟屏幕 $display = getDisplay($displays); /** @var m8test_java\com\m8test\script\core\api\console\Console $console */ global $console; // 获取虚拟屏幕宽度 $console->log(javaString("宽度"), $display->getWidth()); // 获取虚拟屏幕高度 $console->log(javaString("高度"), $display->getHeight()); // 获取虚拟屏幕密度 $console->log(javaString("密度"), $display->getDensity()); // 获取虚拟屏幕id, 这个经常用到,例如需要在虚拟屏幕启动应用或者通过无障碍实现自动化操作时都需要id作为参数 $console->log("id", $display->getId());
from m8test_java.com.m8test.script.GlobalVariables import _console from m8test_java.com.m8test.script.GlobalVariables import _displays from m8test_java.com.m8test.script.GlobalVariables import _maps from m8test_java.com.m8test.script.GlobalVariables import _shellCommands from m8test_java.com.m8test.script.GlobalVariables import _shells # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 def getDisplay(): allDisplays = _displays.getAll() if allDisplays.size() > 0: return allDisplays.get(0) else: return _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕宽度 _console.log("宽度", display.getWidth()) # 获取虚拟屏幕高度 _console.log("高度", display.getHeight()) # 获取虚拟屏幕密度 _console.log("密度", display.getDensity()) # 获取虚拟屏幕id, 这个经常用到,例如需要在虚拟屏幕启动应用或者通过无障碍实现自动化操作时都需要id作为参数 _console.log("id", display.getId())
# encoding: utf-8 java_import 'com.m8test.script.core.api.display.Display' # encoding: utf-8 # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 # @return [Display] 已存在或者新创建的虚拟屏幕 def getDisplay allDisplays = $displays.getAll if allDisplays.size > 0 allDisplays.get(0) else $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } end end # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕宽度 $console.log("宽度", display.getWidth()) # 获取虚拟屏幕高度 $console.log("高度", display.getHeight()) # 获取虚拟屏幕密度 $console.log("密度", display.getDensity()) # 获取虚拟屏幕id, 这个经常用到,例如需要在虚拟屏幕启动应用或者通过无障碍实现自动化操作时都需要id作为参数 $console.log("id", display.getId())

截取虚拟屏幕内容

import com.m8test.script.GlobalVariables.* import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 fun getDisplay(): Display { return _displays.getAll().firstOrNull() ?: _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } } // 获取一个虚拟屏幕 val display = getDisplay() // 默认情况下虚拟屏幕是没有启用解码, 这是为了减少系统资源的使用,如果需要截屏,那么必须开启解码 if (!display.isDecodingEnabled()) { // 启动解码 display.setDecodingEnabled(true) // 启用后可能需要等待一段时间才能截取到屏幕内容 _threads.sleep(3000) } val file = _files.buildFile { setPath("/sdcard", "M8Test/kotlin-screenshot.png") } // 截取屏幕, 接受一个文件对象作为参数,也就是需要保存截屏到哪个文件 display.screenshot(file.getFile())
import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 Display getDisplay() { def allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } return display } // 获取一个虚拟屏幕 def display = getDisplay() // 默认情况下虚拟屏幕是没有启用解码, 这是为了减少系统资源的使用,如果需要截屏,那么必须开启解码 if (!display.isDecodingEnabled()) { // 启动解码 display.setDecodingEnabled(true) // 启用后可能需要等待一段时间才能截取到屏幕内容 $threads.sleep(3000) } def file = $files.buildFile { it.setPath("/sdcard", "M8Test/groovy-screenshot.png") } // 截取屏幕, 接受一个文件对象作为参数,也就是需要保存截屏到哪个文件 display.screenshot(file.getFile())
import com.m8test.script.core.api.display.Display; import kotlin.jvm.functions.Function1; import java.io.File; import java.util.List; import static com.m8test.script.GlobalVariables.$displays; import static com.m8test.script.GlobalVariables.$threads; private static Display getDisplay() { List<Display> allDisplays = $displays.getAll(); if (allDisplays.size() > 0) return (Display) allDisplays.get(0); // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); } // 获取一个虚拟屏幕 Display display = getDisplay(); // 默认情况下虚拟屏幕是没有启用解码, 这是为了减少系统资源的使用,如果需要截屏,那么必须开启解码 if (!display.isDecodingEnabled()) { // 启动解码 display.setDecodingEnabled(true); // 启用后可能需要等待一段时间才能截取到屏幕内容 $threads.sleep(3000); } File file = new File("/sdcard", "M8Test/java-screenshot.png"); // 截取屏幕, 接受一个文件对象作为参数,也就是需要保存截屏到哪个文件 display.screenshot(file);
/** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * * @returns {Packages.com.m8test.script.core.api.display.Display} */ function getDisplay() { let allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) } // 获取一个虚拟屏幕 let display = getDisplay() // 默认情况下虚拟屏幕是没有启用解码, 这是为了减少系统资源的使用,如果需要截屏,那么必须开启解码 if (!display.isDecodingEnabled()) { // 启动解码 display.setDecodingEnabled(true) // 启用后可能需要等待一段时间才能截取到屏幕内容 $threads.sleep(3000) } let file = $files.buildFile(function (fb) { fb.setPath("/sdcard", "M8Test/javascript-screenshot.png") }) // 截取屏幕, 接受一个文件对象作为参数,也就是需要保存截屏到哪个文件 display.screenshot(file.getFile())
-- 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 --- @return m8test_java.com.m8test.script.core.api.display.Display function getDisplay() local allDisplays = _displays:getAll() if not allDisplays:isEmpty() then return allDisplays:get(0) else return _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) end end -- 获取一个虚拟屏幕 local display = getDisplay() -- 默认情况下虚拟屏幕是没有启用解码, 这是为了减少系统资源的使用,如果需要截屏,那么必须开启解码 if not display:isDecodingEnabled() then -- 启动解码 display:setDecodingEnabled(true) -- 启用后可能需要等待一段时间才能截取到屏幕内容 _threads:sleep(3000) end local file = _files:buildFile(function(fb) fb:setPath("/sdcard", "M8Test/lua-screenshot.png") end) -- 截取屏幕, 接受一个文件对象作为参数,也就是需要保存截屏到哪个文件 display:screenshot(file:getFile())
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; /** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * @param \m8test_java\com\m8test\script\core\api\display\Displays $displays * @return \m8test_java\com\m8test\script\core\api\display\Display */ function getDisplay($displays) { $allDisplays = $displays->getAll(); if ($allDisplays->size() > 0) { return $allDisplays->get(0); } else { return $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); } } // 获取一个虚拟屏幕 $display = getDisplay($displays); /** @var m8test_java\com\m8test\script\core\api\thread\Threads $threads */ global $threads; /** @var m8test_java\com\m8test\script\core\api\file\Files $files */ global $files; // 默认情况下虚拟屏幕是没有启用解码, 这是为了减少系统资源的使用,如果需要截屏,那么必须开启解码 if (!$display->isDecodingEnabled()) { // 启动解码 $display->setDecodingEnabled(true); // 启用后可能需要等待一段时间才能截取到屏幕内容 $threads->sleep(3000); } $file = $files->buildFile(function ($it) { $it->setPath("/sdcard", "M8Test/php-screenshot.png"); }); // 截取屏幕, 接受一个文件对象作为参数,也就是需要保存截屏到哪个文件 $display->screenshot($file->getFile());
from m8test_java.com.m8test.script.GlobalVariables import _displays from m8test_java.com.m8test.script.GlobalVariables import _files from m8test_java.com.m8test.script.GlobalVariables import _threads # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 def getDisplay(): allDisplays = _displays.getAll() if allDisplays.size() > 0: return allDisplays.get(0) else: return _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 获取一个虚拟屏幕 display = getDisplay() # 默认情况下虚拟屏幕是没有启用解码, 这是为了减少系统资源的使用,如果需要截屏,那么必须开启解码 if not display.isDecodingEnabled(): # 启动解码 display.setDecodingEnabled(True) # 启用后可能需要等待一段时间才能截取到屏幕内容 _threads.sleep(3000) file = _files.buildFile(lambda fb: fb.setPath("/sdcard", "M8Test/python-screenshot.png")) # 截取屏幕, 接受一个文件对象作为参数,也就是需要保存截屏到哪个文件 display.screenshot(file.getFile())
# encoding: utf-8 java_import 'com.m8test.script.core.api.display.Display' java_import 'com.m8test.script.core.api.file.FileBuilder' # encoding: utf-8 # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 # @return [Display] 已存在或者新创建的虚拟屏幕 def getDisplay allDisplays = $displays.getAll if allDisplays.size > 0 allDisplays.get(0) else $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } end end # 获取一个虚拟屏幕 display = getDisplay() # 默认情况下虚拟屏幕是没有启用解码, 这是为了减少系统资源的使用,如果需要截屏,那么必须开启解码 unless display.isDecodingEnabled() # 启动解码 display.setDecodingEnabled(true) # 启用后可能需要等待一段时间才能截取到屏幕内容 $threads.sleep(3000) end file = $files.buildFile { # @type fb [FileBuilder] |fb| fb.setPath("/sdcard", "M8Test/ruby-screenshot.png") } # 截取屏幕, 接受一个文件对象作为参数,也就是需要保存截屏到哪个文件 display.screenshot(file.getFile())

操控虚拟屏幕

你通过虚拟屏幕 API 对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。

输入文本

import com.m8test.script.GlobalVariables._displays import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 fun getDisplay(): Display { return _displays.getAll().firstOrNull() ?: _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } } // 获取一个虚拟屏幕 val display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 val controller = display.getController() // 模拟文本输入, 前提是输入框已经获取焦点 controller.inputText("kotlin")
import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 Display getDisplay() { def allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } return display } // 获取一个虚拟屏幕 def display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 def controller = display.getController() // 模拟文本输入, 前提是输入框已经获取焦点 controller.inputText("groovy")
import com.m8test.script.core.api.display.Display; import com.m8test.script.core.api.display.control.Controller; import kotlin.jvm.functions.Function1; import java.util.List; import static com.m8test.script.GlobalVariables.$displays; private static Display getDisplay() { List<Display> allDisplays = $displays.getAll(); if (allDisplays.size() > 0) return (Display) allDisplays.get(0); // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); } // 获取一个虚拟屏幕 Display display = getDisplay(); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 Controller controller = display.getController(); // 模拟文本输入, 前提是输入框已经获取焦点 controller.inputText("java");
/** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * * @returns {Packages.com.m8test.script.core.api.display.Display} */ function getDisplay() { let allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) } // 获取一个虚拟屏幕 let display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 let controller = display.getController() // 模拟文本输入, 前提是输入框已经获取焦点 controller.inputText("javascript")
-- 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 --- @return m8test_java.com.m8test.script.core.api.display.Display function getDisplay() local allDisplays = _displays:getAll() if not allDisplays:isEmpty() then return allDisplays:get(0) else return _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) end end -- 获取一个虚拟屏幕 local display = getDisplay() -- 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 local controller = display:getController() -- 模拟文本输入, 前提是输入框已经获取焦点 controller:inputText("lua")
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; /** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * @param \m8test_java\com\m8test\script\core\api\display\Displays $displays * @return \m8test_java\com\m8test\script\core\api\display\Display */ function getDisplay($displays) { $allDisplays = $displays->getAll(); if ($allDisplays->size() > 0) { return $allDisplays->get(0); } else { return $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); } } // 获取一个虚拟屏幕 $display = getDisplay($displays); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 $controller = $display->getController(); // 模拟文本输入, 前提是输入框已经获取焦点 $controller->inputText("php");
from m8test_java.com.m8test.script.GlobalVariables import _displays from m8test_java.com.m8test.script.GlobalVariables import _files from m8test_java.com.m8test.script.GlobalVariables import _threads # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 def getDisplay(): allDisplays = _displays.getAll() if allDisplays.size() > 0: return allDisplays.get(0) else: return _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 模拟文本输入, 前提是输入框已经获取焦点 controller.inputText("python")
# encoding: utf-8 java_import 'com.m8test.script.core.api.display.Display' # encoding: utf-8 # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 # @return [Display] 已存在或者新创建的虚拟屏幕 def getDisplay allDisplays = $displays.getAll if allDisplays.size > 0 allDisplays.get(0) else $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } end end # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 模拟文本输入, 前提是输入框已经获取焦点 controller.inputText("ruby")

按键按下/释放

import com.m8test.script.GlobalVariables._displays import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 fun getDisplay(): Display { return _displays.getAll().firstOrNull() ?: _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } } // 获取一个虚拟屏幕 val display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 val controller = display.getController() // 按键按下 controller.keyDown { // KEYCODE_VOLUME_UP 音量加键 setCode(24) } // 按键释放 controller.keyUp { // KEYCODE_VOLUME_UP 音量加键 setCode(24) } // 上面按键按下和释放就实现了音量加键的功能
import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 Display getDisplay() { def allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } return display } // 获取一个虚拟屏幕 def display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 def controller = display.getController() // 按键按下 controller.keyDown { // KEYCODE_VOLUME_UP 音量加键 it.setCode(24) } // 按键释放 controller.keyUp { // KEYCODE_VOLUME_UP 音量加键 it.setCode(24) } // 上面按键按下和释放就实现了音量加键的功能
import com.m8test.script.core.api.display.Display; import com.m8test.script.core.api.display.control.Controller; import com.m8test.script.core.api.display.control.Key; import kotlin.jvm.functions.Function1; import java.util.List; import static com.m8test.script.GlobalVariables.$displays; private static Display getDisplay() { List<Display> allDisplays = $displays.getAll(); if (allDisplays.size() > 0) return (Display) allDisplays.get(0); // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); } // 获取一个虚拟屏幕 Display display = getDisplay(); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 Controller controller = display.getController(); // 按键按下 controller.keyDown(new Function1() { @Override public Object invoke(Object o) { Key it = (Key) o; // KEYCODE_VOLUME_UP 音量加键 it.setCode(24); return null; } }); // 按键释放 controller.keyUp(new Function1() { @Override public Object invoke(Object o) { Key it = (Key) o; // KEYCODE_VOLUME_UP 音量加键 it.setCode(24); return null; } }); // 上面按键按下和释放就实现了音量加键的功能
/** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * * @returns {Packages.com.m8test.script.core.api.display.Display} */ function getDisplay() { let allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) } // 获取一个虚拟屏幕 let display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 let controller = display.getController() // 按键按下 controller.keyDown(function (key) { // KEYCODE_VOLUME_UP 音量加键 key.setCode(24) }) // 按键释放 controller.keyUp(function (key) { // KEYCODE_VOLUME_UP 音量加键 key.setCode(24) }) // 上面按键按下和释放就实现了音量加键的功能
-- 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 --- @return m8test_java.com.m8test.script.core.api.display.Display function getDisplay() local allDisplays = _displays:getAll() if not allDisplays:isEmpty() then return allDisplays:get(0) else return _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) end end -- 获取一个虚拟屏幕 local display = getDisplay() -- 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 local controller = display:getController() -- 按键按下 controller:keyDown(function(key) -- KEYCODE_VOLUME_UP 音量加键 key:setCode(24) end) -- 按键释放 controller:keyUp(function(key) -- KEYCODE_VOLUME_UP 音量加键 key:setCode(24) end) -- 上面按键按下和释放就实现了音量加键的功能
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; /** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * @param \m8test_java\com\m8test\script\core\api\display\Displays $displays * @return \m8test_java\com\m8test\script\core\api\display\Display */ function getDisplay($displays) { $allDisplays = $displays->getAll(); if ($allDisplays->size() > 0) { return $allDisplays->get(0); } else { return $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); } } // 获取一个虚拟屏幕 $display = getDisplay($displays); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 $controller = $display->getController(); // 按键按下 $controller->keyDown(function ($it) { // KEYCODE_VOLUME_UP 音量加键 $it->setCode(24); }); // 按键释放 $controller->keyUp(function ($it) { // KEYCODE_VOLUME_UP 音量加键 $it->setCode(24); }); // 上面按键按下和释放就实现了音量加键的功能
from m8test_java.com.m8test.script.GlobalVariables import _displays # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 def getDisplay(): allDisplays = _displays.getAll() if allDisplays.size() > 0: return allDisplays.get(0) else: return _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 按键按下 controller.keyDown(lambda key: # KEYCODE_VOLUME_UP 音量加键 key.setCode(24)) # 按键释放 controller.keyUp(lambda key: # KEYCODE_VOLUME_UP 音量加键 key.setCode(24)) # 上面按键按下和释放就实现了音量加键的功能
# encoding: utf-8 java_import 'com.m8test.script.core.api.display.Display' # encoding: utf-8 # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 # @return [Display] 已存在或者新创建的虚拟屏幕 def getDisplay allDisplays = $displays.getAll if allDisplays.size > 0 allDisplays.get(0) else $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } end end # 获取一个虚拟屏幕 display = getDisplay() java_import 'com.m8test.script.core.api.display.control.Key' # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 按键按下 controller.keyDown { # @type it [key] |it| # KEYCODE_VOLUME_UP 音量加键 it.setCode(24) } # 按键释放 controller.keyUp { # @type it [key] |it| # KEYCODE_VOLUME_UP 音量加键 it.setCode(24) } # 上面按键按下和释放就实现了音量加键的功能

返回键

import com.m8test.script.GlobalVariables._displays import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 fun getDisplay(): Display { return _displays.getAll().firstOrNull() ?: _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } } // 获取一个虚拟屏幕 val display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 val controller = display.getController() // 按下返回键 controller.pressBack()
import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 Display getDisplay() { def allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } return display } // 获取一个虚拟屏幕 def display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 def controller = display.getController() // 按下返回键 controller.pressBack()
import com.m8test.script.core.api.display.Display; import com.m8test.script.core.api.display.control.Controller; import com.m8test.script.core.api.display.control.Key; import kotlin.jvm.functions.Function1; import java.util.List; import static com.m8test.script.GlobalVariables.$displays; private static Display getDisplay() { List<Display> allDisplays = $displays.getAll(); if (allDisplays.size() > 0) return (Display) allDisplays.get(0); // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); } // 获取一个虚拟屏幕 Display display = getDisplay(); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 Controller controller = display.getController(); // 按下返回键 controller.pressBack();
/** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * * @returns {Packages.com.m8test.script.core.api.display.Display} */ function getDisplay() { let allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) } // 获取一个虚拟屏幕 let display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 let controller = display.getController() // 按下返回键 controller.pressBack()
-- 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 --- @return m8test_java.com.m8test.script.core.api.display.Display function getDisplay() local allDisplays = _displays:getAll() if not allDisplays:isEmpty() then return allDisplays:get(0) else return _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) end end -- 获取一个虚拟屏幕 local display = getDisplay() -- 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 local controller = display:getController() -- 按下返回键 controller:pressBack()
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; /** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * @param \m8test_java\com\m8test\script\core\api\display\Displays $displays * @return \m8test_java\com\m8test\script\core\api\display\Display */ function getDisplay($displays) { $allDisplays = $displays->getAll(); if ($allDisplays->size() > 0) { return $allDisplays->get(0); } else { return $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); } } // 获取一个虚拟屏幕 $display = getDisplay($displays); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 $controller = $display->getController(); // 按下返回键 $controller->pressBack();
from m8test_java.com.m8test.script.GlobalVariables import _displays from m8test_java.com.m8test.script.GlobalVariables import _files from m8test_java.com.m8test.script.GlobalVariables import _threads # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 def getDisplay(): allDisplays = _displays.getAll() if allDisplays.size() > 0: return allDisplays.get(0) else: return _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 按下返回键 controller.pressBack()
# encoding: utf-8 java_import 'com.m8test.script.core.api.display.Display' # encoding: utf-8 # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 # @return [Display] 已存在或者新创建的虚拟屏幕 def getDisplay allDisplays = $displays.getAll if allDisplays.size > 0 allDisplays.get(0) else $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } end end # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 按下返回键 controller.pressBack()

上下左右滚动

import com.m8test.script.GlobalVariables._displays import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 fun getDisplay(): Display { return _displays.getAll().firstOrNull() ?: _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } } // 获取一个虚拟屏幕 val display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 val controller = display.getController() //// 向下滚动, 参数为滚动轨迹所经过的点的数量 //controller.scrollDown(50) // // 向上滚动, 参数为滚动轨迹所经过的点的数量 // controller.scrollUp(50) // // 向左滚动, 参数为滚动轨迹所经过的点的数量 // controller.scrollLeft(50) // 向右滚动, 参数为滚动轨迹所经过的点的数量 controller.scrollRight(50)
import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 Display getDisplay() { def allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } return display } // 获取一个虚拟屏幕 def display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 def controller = display.getController() //// 向下滚动, 参数为滚动轨迹所经过的点的数量 //controller.scrollDown(50) //// 向上滚动, 参数为滚动轨迹所经过的点的数量 //controller.scrollUp(50) //// 向左滚动, 参数为滚动轨迹所经过的点的数量 //controller.scrollLeft(50) // 向右滚动, 参数为滚动轨迹所经过的点的数量 controller.scrollRight(50)
import com.m8test.script.core.api.display.Display; import com.m8test.script.core.api.display.control.Controller; import com.m8test.script.core.api.display.control.Key; import kotlin.jvm.functions.Function1; import java.util.List; import static com.m8test.script.GlobalVariables.$displays; private static Display getDisplay() { List<Display> allDisplays = $displays.getAll(); if (allDisplays.size() > 0) return (Display) allDisplays.get(0); // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); } // 获取一个虚拟屏幕 Display display = getDisplay(); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 Controller controller = display.getController(); // 向下滚动, 参数为滚动轨迹所经过的点的数量 controller.scrollDown(50); //// 向上滚动, 参数为滚动轨迹所经过的点的数量 //controller.scrollUp(50); //// 向左滚动, 参数为滚动轨迹所经过的点的数量 //controller.scrollLeft(50); //// 向右滚动, 参数为滚动轨迹所经过的点的数量 //controller.scrollRight(50);
/** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * * @returns {Packages.com.m8test.script.core.api.display.Display} */ function getDisplay() { let allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) } // 获取一个虚拟屏幕 let display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 let controller = display.getController() // 向下滚动, 参数为滚动轨迹所经过的点的数量 controller.scrollDown(50) // // 向上滚动, 参数为滚动轨迹所经过的点的数量 // controller.scrollUp(50) // // 向左滚动, 参数为滚动轨迹所经过的点的数量 // controller.scrollLeft(50) // // 向右滚动, 参数为滚动轨迹所经过的点的数量 // controller.scrollRight(50)
-- 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 --- @return m8test_java.com.m8test.script.core.api.display.Display function getDisplay() local allDisplays = _displays:getAll() if not allDisplays:isEmpty() then return allDisplays:get(0) else return _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) end end -- 获取一个虚拟屏幕 local display = getDisplay() -- 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 local controller = display:getController() -- 向下滚动, 参数为滚动轨迹所经过的点的数量 controller:scrollDown(50) ---- 向上滚动, 参数为滚动轨迹所经过的点的数量 --controller:scrollUp(50) ---- 向左滚动, 参数为滚动轨迹所经过的点的数量 --controller:scrollLeft(50) ---- 向右滚动, 参数为滚动轨迹所经过的点的数量 --controller:scrollRight(50)
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; /** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * @param \m8test_java\com\m8test\script\core\api\display\Displays $displays * @return \m8test_java\com\m8test\script\core\api\display\Display */ function getDisplay($displays) { $allDisplays = $displays->getAll(); if ($allDisplays->size() > 0) { return $allDisplays->get(0); } else { return $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); } } // 获取一个虚拟屏幕 $display = getDisplay($displays); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 $controller = $display->getController(); // 向下滚动, 参数为滚动轨迹所经过的点的数量 $controller->scrollDown(50); //// 向上滚动, 参数为滚动轨迹所经过的点的数量 //$controller->scrollUp(50); //// 向左滚动, 参数为滚动轨迹所经过的点的数量 //$controller->scrollLeft(50); //// 向右滚动, 参数为滚动轨迹所经过的点的数量 //$controller->scrollRight(50);
from m8test_java.com.m8test.script.GlobalVariables import _displays from m8test_java.com.m8test.script.GlobalVariables import _files from m8test_java.com.m8test.script.GlobalVariables import _threads # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 def getDisplay(): allDisplays = _displays.getAll() if allDisplays.size() > 0: return allDisplays.get(0) else: return _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 向下滚动, 参数为滚动轨迹所经过的点的数量 controller.scrollDown(50) # # 向上滚动, 参数为滚动轨迹所经过的点的数量 # controller.scrollUp(50) # # 向左滚动, 参数为滚动轨迹所经过的点的数量 # controller.scrollLeft(50) # # 向右滚动, 参数为滚动轨迹所经过的点的数量 # controller.scrollRight(50)
# encoding: utf-8 java_import 'com.m8test.script.core.api.display.Display' # encoding: utf-8 # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 # @return [Display] 已存在或者新创建的虚拟屏幕 def getDisplay allDisplays = $displays.getAll if allDisplays.size > 0 allDisplays.get(0) else $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } end end # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 向下滚动, 参数为滚动轨迹所经过的点的数量 controller.scrollDown(50) # # 向上滚动, 参数为滚动轨迹所经过的点的数量 # controller.scrollUp(50) # # 向左滚动, 参数为滚动轨迹所经过的点的数量 # controller.scrollLeft(50) # # 向右滚动, 参数为滚动轨迹所经过的点的数量 # controller.scrollRight(50)

触摸按下/移动/释放

import com.m8test.script.GlobalVariables._displays import com.m8test.script.GlobalVariables._threads import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 fun getDisplay(): Display { return _displays.getAll().firstOrNull() ?: _displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } } // 获取一个虚拟屏幕 val display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 val controller = display.getController() // 下面是一个矩形的四个顶点x、y坐标 val width = display.getWidth() val height = display.getHeight() val leftTopX = width / 4 val leftTopY = height / 4 val rightTopX = width * 3 / 4 val rightTopY = height / 4 val leftBottomX = width / 4 val leftBottomY = height * 3 / 4 val rightBottomX = width * 3 / 4 val rightBottomY = height * 3 / 4 // 模拟触摸按下 controller.touchDown { setPointerX(leftTopX) setPointerY(leftTopY) } _threads.sleep(300) // 模拟触摸移动 controller.touchMove { setPointerX(rightTopX) setPointerY(rightTopY) } _threads.sleep(300) controller.touchMove { setPointerX(rightBottomX) setPointerY(rightBottomY) } _threads.sleep(300) controller.touchMove { setPointerX(leftBottomX) setPointerY(leftBottomY) } _threads.sleep(300) controller.touchMove { setPointerX(leftTopX) setPointerY(leftTopY) } _threads.sleep(300) // 模拟触摸抬起 controller.touchUp { setPointerX(leftTopX) setPointerY(leftTopY) }
import com.m8test.script.core.api.display.Display // 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 Display getDisplay() { def allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 def display = $displays.create { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } return display } // 获取一个虚拟屏幕 def display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 def controller = display.getController() // 下面是一个矩形的四个顶点x、y坐标 def width = display.getWidth() def height = display.getHeight() def leftTopX = width / 4 def leftTopY = height / 4 def rightTopX = width * 3 / 4 def rightTopY = height / 4 def leftBottomX = width / 4 def leftBottomY = height * 3 / 4 def rightBottomX = width * 3 / 4 def rightBottomY = height * 3 / 4 // 模拟触摸按下 controller.touchDown { it.setPointerX(leftTopX as int) it.setPointerY(leftTopY as int) } $threads.sleep(300) // 模拟触摸移动 controller.touchMove { it.setPointerX(rightTopX as int) it.setPointerY(rightTopY as int) } $threads.sleep(300) controller.touchMove { it.setPointerX(rightBottomX as int) it.setPointerY(rightBottomY as int) } $threads.sleep(300) controller.touchMove { it.setPointerX(leftBottomX as int) it.setPointerY(leftBottomY as int) } $threads.sleep(300) controller.touchMove { it.setPointerX(leftTopX as int) it.setPointerY(leftTopY as int) } $threads.sleep(300) // 模拟触摸抬起 controller.touchUp { it.setPointerX(leftTopX as int) it.setPointerY(leftTopY as int) }
import com.m8test.script.core.api.display.Display; import com.m8test.script.core.api.display.control.Controller; import com.m8test.script.core.api.display.control.Touch; import kotlin.jvm.functions.Function1; import java.util.List; import static com.m8test.script.GlobalVariables.$displays; import static com.m8test.script.GlobalVariables.$threads; private static Display getDisplay() { List<Display> allDisplays = $displays.getAll(); if (allDisplays.size() > 0) return (Display) allDisplays.get(0); // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(new Function1() { @Override public Object invoke(Object o) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 return null; } }); } private static class TouchSetter implements Function1 { private final int x; private final int y; public TouchSetter(int x, int y) { this.x = x; this.y = y; } @Override public Object invoke(Object o) { Touch touch = (Touch) o; touch.setPointerX(x); touch.setPointerY(y); return null; } } // 获取一个虚拟屏幕 Display display = getDisplay(); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 Controller controller = display.getController(); // 下面是一个矩形的四个顶点x、y坐标 int width = display.getWidth(); int height = display.getHeight(); int leftTopX = width / 4; int leftTopY = height / 4; int rightTopX = width * 3 / 4; int rightTopY = height / 4; int leftBottomX = width / 4; int leftBottomY = height * 3 / 4; int rightBottomX = width * 3 / 4; int rightBottomY = height * 3 / 4; // 模拟触摸按下 controller.touchDown(new TouchSetter(leftTopX, leftTopY)); $threads.sleep(300); // 模拟触摸移动 controller.touchMove(new TouchSetter(rightTopX, rightTopY)); $threads.sleep(300); controller.touchMove(new TouchSetter(rightBottomX, rightBottomY)); $threads.sleep(300); controller.touchMove(new TouchSetter(leftBottomX, leftBottomY)); $threads.sleep(300); controller.touchMove(new TouchSetter(leftTopX, leftTopY)); $threads.sleep(300); // 模拟触摸抬起 controller.touchUp(new TouchSetter(leftTopX, leftTopY));
/** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * * @returns {Packages.com.m8test.script.core.api.display.Display} */ function getDisplay() { let allDisplays = $displays.getAll() if (allDisplays.size() > 0) return allDisplays.get(0) // 创建虚拟屏幕, create 方法会返回一个 Display 对象 return $displays.create(function (config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }) } // 获取一个虚拟屏幕 let display = getDisplay() // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 let controller = display.getController() // 下面是一个矩形的四个顶点x、y坐标 let width = display.getWidth() let height = display.getHeight() let leftTopX = width / 4 let leftTopY = height / 4 let rightTopX = width * 3 / 4 let rightTopY = height / 4 let leftBottomX = width / 4 let leftBottomY = height * 3 / 4 let rightBottomX = width * 3 / 4 let rightBottomY = height * 3 / 4 // 模拟触摸按下 controller.touchDown(function (it) { it.setPointerX(leftTopX) it.setPointerY(leftTopY) }) $threads.sleep(300) // 模拟触摸移动 controller.touchMove(function (it) { it.setPointerX(rightTopX) it.setPointerY(rightTopY) }) $threads.sleep(300) controller.touchMove(function (it) { it.setPointerX(rightBottomX) it.setPointerY(rightBottomY) }) $threads.sleep(300) controller.touchMove(function (it) { it.setPointerX(leftBottomX) it.setPointerY(leftBottomY) }) $threads.sleep(300) controller.touchMove(function (it) { it.setPointerX(leftTopX) it.setPointerY(leftTopY) }) $threads.sleep(300) // 模拟触摸抬起 controller.touchUp(function (it) { it.setPointerX(leftTopX) it.setPointerY(leftTopY) })
-- 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 --- @return m8test_java.com.m8test.script.core.api.display.Display function getDisplay() local allDisplays = _displays:getAll() if not allDisplays:isEmpty() then return allDisplays:get(0) else return _displays:create(function(config) -- 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 end) end end -- 获取一个虚拟屏幕 local display = getDisplay() -- 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 local controller = display:getController() -- 下面是一个矩形的四个顶点x、y坐标 local width = display:getWidth() local height = display:getHeight() local leftTopX = width / 4 local leftTopY = height / 4 local rightTopX = width * 3 / 4 local rightTopY = height / 4 local leftBottomX = width / 4 local leftBottomY = height * 3 / 4 local rightBottomX = width * 3 / 4 local rightBottomY = height * 3 / 4 -- 模拟触摸按下 controller:touchDown(function(touch) touch:setPointerX(leftTopX) touch:setPointerY(leftTopY) end) _threads:sleep(300) -- 模拟触摸移动 controller:touchMove(function(touch) touch:setPointerX(rightTopX) touch:setPointerY(rightTopY) end) _threads:sleep(300) controller:touchMove(function(touch) touch:setPointerX(rightBottomX) touch:setPointerY(rightBottomY) end) _threads:sleep(300) controller:touchMove(function(touch) touch:setPointerX(leftBottomX) touch:setPointerY(leftBottomY) end) _threads:sleep(300) controller:touchMove(function(touch) touch:setPointerX(leftTopX) touch:setPointerY(leftTopY) end) _threads:sleep(300) -- 模拟触摸抬起 controller:touchUp(function(touch) touch:setPointerX(leftTopX) touch:setPointerY(leftTopY) end)
<?php /** @var m8test_java\com\m8test\script\core\api\display\Displays $displays */ global $displays; /** * 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 * @param \m8test_java\com\m8test\script\core\api\display\Displays $displays * @return \m8test_java\com\m8test\script\core\api\display\Display */ function getDisplay($displays) { $allDisplays = $displays->getAll(); if ($allDisplays->size() > 0) { return $allDisplays->get(0); } else { return $displays->create(function ($config) { // 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 }); } } // 获取一个虚拟屏幕 $display = getDisplay($displays); // 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 $controller = $display->getController(); // 向下滚动, 参数为滚动轨迹所经过的点的数量 $controller->scrollDown(50); // 下面是一个矩形的四个顶点x、y坐标 $width = $display->getWidth(); $height = $display->getHeight(); $leftTopX = $width / 4; $leftTopY = $height / 4; $rightTopX = $width * 3 / 4; $rightTopY = $height / 4; $leftBottomX = $width / 4; $leftBottomY = $height * 3 / 4; $rightBottomX = $width * 3 / 4; $rightBottomY = $height * 3 / 4; // 模拟触摸按下 $controller->touchDown(function ($it) use ($leftTopX, $leftTopY) { $it->setPointerX($leftTopX); $it->setPointerY($leftTopY); }); /** @var m8test_java\com\m8test\script\core\api\thread\Threads $threads */ global $threads; $threads->sleep(300); // 模拟触摸移动 $controller->touchMove(function ($it) use ($rightTopX, $rightTopY) { $it->setPointerX($rightTopX); $it->setPointerY($rightTopY); }); $threads->sleep(300); $controller->touchMove(function ($it) use ($rightBottomX, $rightBottomY) { $it->setPointerX($rightBottomX); $it->setPointerY($rightBottomY); }); $threads->sleep(300); $controller->touchMove(function ($it) use ($leftBottomX, $leftBottomY) { $it->setPointerX($leftBottomX); $it->setPointerY($leftBottomY); }); $threads->sleep(300); $controller->touchMove(function ($it) use ($leftTopX, $leftTopY) { $it->setPointerX($leftTopX); $it->setPointerY($leftTopY); }); $threads->sleep(300); // 模拟触摸抬起 $controller->touchUp(function ($it) use ($leftTopX, $leftTopY) { $it->setPointerX($leftTopX); $it->setPointerY($leftTopY); });
from m8test_java.com.m8test.script.GlobalVariables import _displays from m8test_java.com.m8test.script.GlobalVariables import _threads # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 def getDisplay(): allDisplays = _displays.getAll() if allDisplays.size() > 0: return allDisplays.get(0) else: return _displays.create(lambda config: # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 config) # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 下面是一个矩形的四个顶点x、y坐标 width = display.getWidth() height = display.getHeight() # 先进行浮点除法,再用 int() 转换为整数 leftTopX = int(width / 4) leftTopY = int(height / 4) rightTopX = int(width * 3 / 4) rightTopY = int(height / 4) leftBottomX = int(width / 4) leftBottomY = int(height * 3 / 4) rightBottomX = int(width * 3 / 4) rightBottomY = int(height * 3 / 4) # 模拟触摸按下 controller.touchDown(lambda it: ( it.setPointerX(leftTopX), it.setPointerY(leftTopY), )) _threads.sleep(300) # 模拟触摸移动 controller.touchMove(lambda it: ( it.setPointerX(rightTopX), it.setPointerY(rightTopY), )) _threads.sleep(300) controller.touchMove(lambda it: ( it.setPointerX(rightBottomX), it.setPointerY(rightBottomY), )) _threads.sleep(300) controller.touchMove(lambda it: ( it.setPointerX(leftBottomX), it.setPointerY(leftBottomY), )) _threads.sleep(300) controller.touchMove(lambda it: ( it.setPointerX(leftTopX), it.setPointerY(leftTopY), )) _threads.sleep(300) # 模拟触摸抬起 controller.touchUp(lambda it: ( it.setPointerX(leftTopX), it.setPointerY(leftTopY), ))
# encoding: utf-8 java_import 'com.m8test.script.core.api.display.Display' # encoding: utf-8 # 获取一个虚拟屏幕,如果已经存在的话则直接使用原有的,否则创建一个 # @return [Display] 已存在或者新创建的虚拟屏幕 def getDisplay allDisplays = $displays.getAll if allDisplays.size > 0 allDisplays.get(0) else $displays.create { |config| # 这里可以配置虚拟屏幕,推荐直接使用默认配置,如果出错的话再手动配置 } end end # 获取一个虚拟屏幕 display = getDisplay() # 获取虚拟屏幕控制器,用于控制虚拟屏幕,可以对虚拟屏幕执行输入、按键、返回、滚动、触摸等操作。 controller = display.getController() # 下面是一个矩形的四个顶点x、y坐标 width = display.getWidth() height = display.getHeight() leftTopX = width / 4 leftTopY = height / 4 rightTopX = width * 3 / 4 rightTopY = height / 4 leftBottomX = width / 4 leftBottomY = height * 3 / 4 rightBottomX = width * 3 / 4 rightBottomY = height * 3 / 4 java_import 'com.m8test.script.core.api.display.control.Touch' # 模拟触摸按下 controller.touchDown { # @type it [Touch] |it| it.setPointerX(leftTopX) it.setPointerY(leftTopY) } $threads.sleep(300) # 模拟触摸移动 controller.touchMove { # @type it [Touch] |it| it.setPointerX(rightTopX) it.setPointerY(rightTopY) } $threads.sleep(300) controller.touchMove { # @type it [Touch] |it| it.setPointerX(rightBottomX) it.setPointerY(rightBottomY) } $threads.sleep(300) controller.touchMove { # @type it [Touch] |it| it.setPointerX(leftBottomX) it.setPointerY(leftBottomY) } $threads.sleep(300) controller.touchMove { # @type it [Touch] |it| it.setPointerX(leftTopX) it.setPointerY(leftTopY) } $threads.sleep(300) # 模拟触摸抬起 controller.touchUp { # @type it [Touch] |it| it.setPointerX(leftTopX) it.setPointerY(leftTopY) }
Last modified: 08 August 2025