UiAuto предоставляет фреймворк для разработки плагинов, который упрощает процесс разработки плагинов UiAuto. Он помогает разработчикам плагинов упростить процесс разработки и снизить вероятность ошибок при определении параметров, что позволяет разработчикам сосредоточиться на реализации кода.
Выполните команду в командной строке:
npm install -g uiauto-cli// глобальная установка CLI
uiauto init "pluginName"// инициализация проекта плагина с именем pluginName в текущем каталоге
После выполнения этой команды командная строка будет запрашивать ввод данных от разработчика до тех пор, пока конфигурация не будет завершена. После завершения настройки CLI автоматически создаст папку проекта с именем «plugin_name» в текущем пути.
uiauto add// добавьте новые функции в текущий проект плагина в текущем каталоге
После выполнения этой команды командная строка продолжит запрашивать данные от разработчика. После того как настройка будет завершена, CLI добавит новую функцию в конфигурацию существующего проекта плагина. Однако параметры, необходимые для новой функции, всё ещё необходимо настроить вручную. Для получения дополнительной информации о настройке параметров продолжайте читать ниже.
demo
└─ 1.0.0 // версия плагина, должна соответствовать описанию в package.json
├─ index.js // файл логики входа на JavaScript, должен называться index
├─ index.py // файл логики входа на Python, должен называться index
├─ node_modules // зависимости Node.js
├─ requirements.txt // зависимости Python
├─ package-lock.json
├─ package.json
├─ packages
└─ util.js // пользовательский файл логики
Плагин состоит из файла описания и программы входа. Программа входа является основным методом, предоставляющим доступ к каждой операции плагина (для плагинов на основе Java, программа входа представляет собой скомпилированный и упакованный jar-файл).
Для плагинов на Python зависимости настраиваются через файл requirements.txt. Для плагинов на Node.JS зависимости настраиваются в файле package.json в свойстве dependencies. Для плагинов на Java зависимости должны быть упакованы вместе с jar-файлом во время компиляции.
Содержание файла описания представлено в стандартном формате JSON. Комментарии предназначены для облегчения понимания значений переменных.
{
"id": "hello-world",
"name": "hello-world", // название проекта
"description": "say hello from UiAuto!",
"version": "1.0.0",
"author": "UiAuto",
"language": "nodejs",
"license": "MIT",
"dependencies": {
"lodash": "4.17.11" // зависимости плагина
},
"uiauto_config": {
"attribution_id": "software_automation", // категория первого уровня
"attribution_name": "программное обеспечение автоматизации", // имя категории первого уровня
"operations": [{
"category_id": "plugin-template", // класс операции, операции сортируются по этому параметру
"category_name": "шаблонный плагин", // имя класса, если category_id выше еще не существует, это имя будет отображаться на интерфейсе
"operation_id": "plugin-one",
"operation_name": "плагин один",
"method": "sayHello", // при выполнении этой операции активируется функция с именем sayHello в "./index.js" ("./index.py" в Python)
"type": "Convention", // у нас есть следующие типы => [Start, Condition, Convention, Circulation, Script, End]. Только Condition и Convention могут быть определены
"input": [{
"name": "обязательные атрибуты", // метка этой группы ввода
"id": "required_params",
"properties": [{
"id": "addressee", // идентификатор этого ввода
"name": "имя пользователя", // ярлык этого ввода
"type": "text", // тип этого ввода, вы можете прочитать подробности различных типов ниже
"required": true, // требуется ли значение
"value": "uiauto_group" // значение по умолчанию
},
{
"id": "file",
"name": "файл",
"type": "file",
"required": true,
"value": ""
}
]
}, {
"name": "необязательные атрибуты",
"id": "unrequired_params",
"properties": [{
"id": "drink",
"name": "напиток",
"required": false,
"type": "select",
"value": "tea" // значение по умолчанию
"options": {
"multiple": true, // обязательный параметр, может ли пользователь сделать несколько вариантов выбора или нет
"choices": [{
"value": "juice",
"label": "фруктовый сок"
}, {
"value": "coffee",
"label": "кофе"
}, {
"value": "tea",
"label": "чай"
}] // перечислить группы значений и меток
}
}]
}],
"output": { **Свойства типов**
* **text**: тип «текст».
``` javascript
{
"type": "text",
"value": "default value"// 默认值
}
Результат: <String>
.
{
"type": "password",
"value": "default value"// 默认值
}
Результат: <String>
.
{
"type": "string",
"value": "value which can not be edited"
}
Результат: null
.
{
"type": "file"
}
Результат: <String <filePath>>
.
#c71585
.
Поддерживает выбор цвета из списка или ввод значения в формате #rrggbb
или #rgb
.{
"type": "color",
"value": "#c71585"// default value 「默认值」,
"options": {
"predefineColors": [
"#ff4500",
"#ff8c00",
"#ffd700",
"#90ee90",
"#00ced1",
"#1e90ff",
"#c71585",
"rgba(255, 69, 0, 0.68)",
"rgb(255, 120, 0)",
"hsv(51, 100, 98)",
"hsva(120, 40, 94, 0.5)",
"hsl(181, 100%, 37%)",
"hsla(209, 100%, 56%, 0.73)",
"#c7158577"
]
}
}
Результат: <String>
.
{
"type": "checkbox",
"value": [],// default value 「默认值」
"options": {
"checked": [] // 默认选中
}
}
Результат: <Array>
.
{
"type": "dateTimeRange",
"value": ["2019-05-01 00:00:00", "2019-10-01 12:00:00"]// default value 「默认值」
"options": {
"type": "daterange" // "datetimerange" | "daterange" | "monthrange"
}
}
Результат: <Array(2)>
.
{
"type": "inputNumber",
"value": 10 // 默认值
}
Результат: <Number>
.
value1 > 10
, value2 < 50
.{
"type": "conditions",
"value": ["value1 > 10", "value2 < 50"] // 默认值
}
Результат: <Array>
.
{
"type": "dateTime",
"value": "2019-05-01 00:00:00"// default value 「默认值」
"options": {
"type": "datetime" // "datetime" | "date" | "time"
}
}
Результат: <String>
.
{
"type": "radio",
"value": "tea"// default value 「默认值」
"options": {
"choices": ["juice", "coffee", "tea"] // enumerations
}
}
Результат: <String>
.
{
"type": "select",
"value": "tea"// default value 「默认值」
"options": {
"multiple": true, // required option, could the user make multiple choices or not
"choices": [{
"value":"juice",
"label":"果汁"
}, {
"value":"coffee",
"label":"咖啡"
}, {
"value":"tea",
"label":"茶"
}] // enumerate groups of value and label
}
}
!options.multiple: результат — <String>
;
options.multiple: результат — <Array>
.
{
"type": "slider",
"value": 10// default value 「默认值」
"options": {
"step": 10, // unrequired option, default 0
"max": 100, // maximum, default 100
"min": 0 // minimum, defalut 0
"precision": 1 // precision, defalut 1
}
Результат: <String>
.
{
"type": "switch",
"value": false// default value 「默认值」
}
Результат: <Boolean>
.
{demo_key: demo_value}
.{
"type": "json",
"value": {
"demo_key": "demo_value"
}// default value 「默认值」
}
Результат: <Boolean>
.
print('Hello World!')
.{
"type": "code",
"value": "print('Hello World!')"// default value 「默认值」
}
Результат: <Boolean>
.
{
"type": "screenshot",
"value: "" // image path
}
Результат: <String>
.
{
"type": "uiselector",
"value": {
"system": {
"DesktopSize": "1920, 960",
"Radio": 1,
"PointInScreen": "601,
Здесь приведён перевод текста без учёта контекста. Для точного перевода необходимо больше информации о контексте использования данных свойств. ## Свойства типа общей конфигурации
### Связанное с вводом свойств
> Если вы используете UiAuto для разработки и вам нужно динамически отображать/скрывать некоторые поля ввода или реализовывать другие сложные входные конфигурации, требующие взаимодействия, вы можете настроить их с помощью параметра «show_if».
``` javascript
{
...
"uiauto_config": {
"operations": [{
...
"input": [{
"name": "Обязательные свойства",
"id": "required_params",
"properties": [{
"id": "dishType",
"name": "Тип блюда",
"required": true,
"type": "select",
"value": "single" // default value
"options": {
"multiple": false, // required option, could the user make multiple choices or not
"choices": [{
"value": "single",
"label": "Один пункт"
}, {
"value": "package",
"label": "Набор"
}] // enumerate groups of value and label
}
}, {
"id": "stapleFood",
"name": "Основное блюдо",
"required": true,
"type": "select",
"value": "friedRice" // default value
"options": {
"multiple": false, // required option, could the user make multiple choices or not
"choices": [{
"value": "pasta",
"label": "Паста"
}, {
"value": "friedRice",
"label": "Жареный рис"
}, {
"value": "steak",
"label": "Стейк"
}] // enumerate groups of value and label
}
}]
}, {
"name": "Необязательные свойства",
"id": "unrequired_params",
"properties": [{
"id": "drink",
"name": "Напиток",
"show_if": "$input.required.dishType==='package'",
"required": false,
"type": "select",
"value": "tea" // default value
"options": {
"multiple": false, // required option, could the user make multiple choices or not
"choices": [{
"value": "juice",
"label": "Сок"
}, {
"value": "coffee",
"label": "Кофе"
}, {
"value": "tea",
"label": "Чай"
}] // enumerate groups of value and label
}
}]
}],
"output": {
"is_allow_global_use": true,
"description":
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )