- Notas relacionadas
- Primeros pasos
- Instalación y configuración
- Proyectos de automatización
- Dependencias
- Tipos de flujos de trabajo
- Flujo de control
- Comparación de archivos
- Mejores prácticas de automatización
- Integración del control de código fuente
- Depuración
- Registro
- La herramienta de diagnóstico
- Analizador de flujo de trabajo
- Acerca del analizador de flujo de trabajo
- ST-NMG-001: convención sobre nombres de variables
- ST-NMG-002: convención de nombres de argumentos
- ST-NMG-004: duplicación de nombres de visualización
- ST-NMG-005: anulación de variables
- ST-NMG-006: argumentos de anulación de variables
- ST-NMG-008: longitud variable excedida
- ST-NMG-009: variables de datos prefijados
- ST-NMG-011: argumentos de prefijo Datatable
- ST-NMG-012: valores predeterminados de los argumentos
- ST-NMG-016: longitud del argumento excedida
- ST-NMG-017: el nombre de la clase coincide con el espacio de nombres predeterminado
- ST-DBP-002: recuento de Argumentos elevado
- ST-DBP-003: bloque de Catch vacío
- ST-DBP-007: múltiples capas de diagramas de flujo
- ST-DPB-010: varias instancias de [flujo de trabajo] o [caso de prueba]
- ST-DBP-020: propiedades de salida no definidas
- ST-DBP-021: tiempo de espera codificado
- ST-DBP-023: flujo de trabajo vacío
- ST-DBP-024: comprobación de actividad de persistencia
- ST-DBP-025: requisito previo para la serialización de variables
- ST-DBP-026: retraso en el uso de la actividad
- ST-DBP-027: mejor práctica de persistencia
- ST-DBP-028: requisito de serialización de argumentos
- ST-USG-005: argumentos de actividad codificados
- ST-USG-009: variables no utilizadas
- ST-USG-010: dependencias sin utilizar
- ST-USG-014: restricciones de los paquetes
- ST-USG-017: modificador de parámetro no válido
- ST-USG-020: mensajes de registro mínimos
- ST-USG-024: guardado sin usar para más adelante
- ST-USG-025: uso incorrecto de los valores guardados
- ST-USG-026: restricciones de actividad
- ST-USG-027: paquetes necesarios
- ST-USG-028: Restringir la invocación de plantillas de archivo
- ST-USG-032 - Etiquetas obligatorias
- ST-USG-034 - URL Automation Hub
- Variables
- Argumentos
- Espacios de nombres importados
- Automatizaciones codificadas
- Introducción
- Registrar servicios personalizados
- Contextos Antes y Después
- Generando código
- Generar casos de prueba codificados a partir de casos de prueba manuales
- Integración de OpenAI con los flujos de trabajo codificados
- Solicita un préstamo con UiBank
- Generación de colas con flujos de trabajo codificados y API de Orchestrator
- Utilizar proyectos de biblioteca importados en automatizaciones codificadas
- Uso de la autenticación de dos factores dentro de automatizaciones codificadas
- Automatización atendida basada en desencadenadores
- Grabación
- Elementos de la IU
- Selectores
- Repo. de objetos
- Extracción de datos
- Automatización de imágenes y texto
- Acerca de la automatización de imágenes y texto
- Actividades con el ratón y el teclado
- Ejemplo de uso de la automatización de ratón y teclado
- Actividades de texto
- Ejemplo de uso de la automatización de texto
- Actividades de OCR
- Actividades de imagen
- Ejemplo de uso de la automatización de OCR y la automatización de imágenes
- Automatización de Citrix Technologies
- Automatización RDP
- Automatización de VMware Horizon
- Automatización de Salesforce
- Automatización SAP
- Automatización de IU de macOS
- La herramienta ScreenScrapeJavaSupport
- El protocolo WebDriver
- Extensiones
- Acerca de las extensiones
- Herramienta SetupExtensions
- UiPathRemoteRuntime.exe no se está ejecutando en la sesión remota
- UiPath Remote Runtime impide que la sesión de Citrix pueda cerrarse
- UiPath Remote Runtime provoca una fuga de memoria
- Las versiones del paquete UiPath.UIAutomation.Activities y UiPath Remote Runtime no coinciden
- La extensión de UiPath necesaria no está instalada en la máquina remota
- Configuración de la resolución de la pantalla
- Políticas de grupo
- No se puede comunicar con el navegador
- La extensión de Chrome se elimina automáticamente
- Es posible que la extensión se haya dañado
- Comprueba si la extensión para Chrome está instalada y habilitada
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Habilitar el acceso a las URL de archivos y el modo de incógnito
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- Lista de extensiones para Chrome
- Extensión de Chrome en Mac
- Políticas de grupo
- No se puede comunicar con el navegador
- La extensión de Edge se elimina automáticamente
- Es posible que la extensión se haya dañado
- Check if the Extension for Microsoft Edge is installed and enabled
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Enable access to file URLs and InPrivate mode
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- Lista de extensiones para Edge
- Extensión en las versiones de Firefox anteriores a la v128 o v115 ESR
- Extensión en versiones de Firefox anteriores a la 65.0
- Ventana emergente de Términos de uso y Aviso de privacidad
- Comprobación de la extensión
- Multiple browser profiles
- Extensión para Safari
- Extensión para VMware Horizon
- Extensión para Amazon WorkSpaces
- Complemento SAP Solution Manager
- Add-in de Excel
- Pruebas de Studio
- Solución de problemas
- Acerca de la resolución de problemas
- Errores de compilación del ensamblado
- Compatibilidad y limitaciones de Microsoft App-V
- Solución de problemas de Internet Explorer x64
- Problemas de Microsoft Office
- Identificación de elementos de la interfaz de usuario en PDF con opciones de accesibilidad
- Reparar Soporte Active Accessibility
- Validation of large Windows-legacy projects takes longer than expected

Guía de usuario de Studio
- Si la extensión ya está instalada en Firefox, seguirá funcionando incluso después de que expire el certificado raíz.
- Si la extensión se instala después de que caduque el certificado raíz, se deshabilitará y no funcionará.
Puedes aplicar ciertas soluciones, pero esto depende de la antigüedad de tu versión de Firefox y de si es o no una versión ESR (siglas en inglés de Versión de soporte extendido).
Solución para Firefox ESR
- Dirígete a
about:config
. - Alternar el error
xpinstall.signatures.required
afalse
.
Es preferible que esta configuración se aplique automáticamente a todos los perfiles utilizando uno de los métodos enumerados a continuación.
Firefox v102.10 ESR o más reciente
xpinstall.signatures.required
para todos los usuarios y perfiles automáticamente. Para obtener más información, consulta las Plantillas de Política para Firefox.
Firefox anterior a v102.10 ESR
xpinstall.signatures.required
mediante la Política de grupo. Como alternativa, puedes usar los archivos de AutoConfig:
- Guarda lo siguiente dentro de un archivo de texto:
// First line must be a comment. pref("xpinstall.signatures.required", false);
// First line must be a comment. pref("xpinstall.signatures.required", false); - Ponle nombre al archivo de texto
allow-unsigned-extensions.cfg
. - Guarda lo siguiente dentro de un archivo de texto:
// First line must be a comment. pref("general.config.filename", "allow-unsigned-extensions.cfg"); pref("general.config.obscure_value", 0);
// First line must be a comment. pref("general.config.filename", "allow-unsigned-extensions.cfg"); pref("general.config.obscure_value", 0); - Ponle nombre al archivo de texto
allow-unsigned-extensions.js
. - Busca el directorio de instalación de Firefox, por lo general
C:\Program Files\Mozilla Firefox
. - Copia
allow-unsigned-extensions.cfg
enC:\Program Files\Mozilla Firefox
. - Copia
allow-unsigned-extensions.js
enC:\Program Files\Mozilla Firefox\pref
.
Firefox: versiones normales
Para las versiones no ESR de Firefox, debes usar los archivos de AutoConfig.
- Guarda lo siguiente dentro de un archivo de texto:
// First line must be a comment. // In Firefox 55+, settings to configure add-on signing (and legacy add-ons) are stored in AddonSettings.jsm // The module exports an object with read-only properties, but that is not an issue since we can just replace // the exported object. // https://searchfox.org/mozilla-central/rev/2e08acdf8862e68b13166970e17809a3b5d6a555/toolkit/mozapps/extensions/internal/AddonSettings.jsm Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); function patchAddonSettings(modulePath) { var Module = Components.utils.import(modulePath, {}); // Note: we read the data from preferences instead of hard-coding a "true", so // that by default legacy add-ons are disabled. This enables the user to only // enable legacy add-ons for specific Firefox profiles when really needed. var AddonSettings; if ("lazy" in Module) { AddonSettings = Object.create(Module.lazy.AddonSettings); } else { AddonSettings = Object.create(Module.AddonSettings); } XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "REQUIRE_SIGNING", "xpinstall.signatures.required", false); XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "ALLOW_LEGACY_EXTENSIONS", "extensions.legacy.enabled", true); XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "LANGPACKS_REQUIRE_SIGNING", "extensions.langpacks.signatures.required", false); if ("lazy" in Module) { Module.lazy.AddonSettings = AddonSettings; } else { Module.AddonSettings = AddonSettings; } } // This is necessary to allow legacy add-ons via preferences. try { patchAddonSettings("resource://gre/modules/addons/XPIProvider.jsm"); } catch (e) { // AddonSettings is not in this file starting with Firefox 61, // but it comes back in Firefox 74 } try { patchAddonSettings("resource://gre/modules/addons/XPIDatabase.jsm"); } catch (e) { // AddonSettings is not in this file until Firefox 61 } // This override is needed to enable unsigned add-ons via preferences. patchAddonSettings("resource://gre/modules/addons/XPIInstall.jsm"); // This override is needed to allow unsigned add-ons to show up without warning in about:addons. // (this is UI-only, the add-on is not actually disabled despite what the UI claims). patchAddonSettings("resource://gre/modules/addons/AddonSettings.jsm"); Components.classes['@mozilla.org/consoleservice;1'] .getService(Components.interfaces.nsIConsoleService) .logStringMessage("enablelegacy.cfg: the extensions.legacy.enabled preference is working again."); pref("xpinstall.signatures.required", false);
// First line must be a comment. // In Firefox 55+, settings to configure add-on signing (and legacy add-ons) are stored in AddonSettings.jsm // The module exports an object with read-only properties, but that is not an issue since we can just replace // the exported object. // https://searchfox.org/mozilla-central/rev/2e08acdf8862e68b13166970e17809a3b5d6a555/toolkit/mozapps/extensions/internal/AddonSettings.jsm Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); function patchAddonSettings(modulePath) { var Module = Components.utils.import(modulePath, {}); // Note: we read the data from preferences instead of hard-coding a "true", so // that by default legacy add-ons are disabled. This enables the user to only // enable legacy add-ons for specific Firefox profiles when really needed. var AddonSettings; if ("lazy" in Module) { AddonSettings = Object.create(Module.lazy.AddonSettings); } else { AddonSettings = Object.create(Module.AddonSettings); } XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "REQUIRE_SIGNING", "xpinstall.signatures.required", false); XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "ALLOW_LEGACY_EXTENSIONS", "extensions.legacy.enabled", true); XPCOMUtils.defineLazyPreferenceGetter(AddonSettings, "LANGPACKS_REQUIRE_SIGNING", "extensions.langpacks.signatures.required", false); if ("lazy" in Module) { Module.lazy.AddonSettings = AddonSettings; } else { Module.AddonSettings = AddonSettings; } } // This is necessary to allow legacy add-ons via preferences. try { patchAddonSettings("resource://gre/modules/addons/XPIProvider.jsm"); } catch (e) { // AddonSettings is not in this file starting with Firefox 61, // but it comes back in Firefox 74 } try { patchAddonSettings("resource://gre/modules/addons/XPIDatabase.jsm"); } catch (e) { // AddonSettings is not in this file until Firefox 61 } // This override is needed to enable unsigned add-ons via preferences. patchAddonSettings("resource://gre/modules/addons/XPIInstall.jsm"); // This override is needed to allow unsigned add-ons to show up without warning in about:addons. // (this is UI-only, the add-on is not actually disabled despite what the UI claims). patchAddonSettings("resource://gre/modules/addons/AddonSettings.jsm"); Components.classes['@mozilla.org/consoleservice;1'] .getService(Components.interfaces.nsIConsoleService) .logStringMessage("enablelegacy.cfg: the extensions.legacy.enabled preference is working again."); pref("xpinstall.signatures.required", false); - Ponle nombre al archivo de texto
enable-legacy.cfg
. - Guarda lo siguiente dentro de un archivo de texto:
// First line must be a comment. pref("general.config.filename", "enablelegacy.cfg"); pref("general.config.obscure_value", 0); pref("general.config.sandbox_enabled", false);
// First line must be a comment. pref("general.config.filename", "enablelegacy.cfg"); pref("general.config.obscure_value", 0); pref("general.config.sandbox_enabled", false); - Ponle nombre al archivo de texto
enablelegacy-prefs.js
. - Busca el directorio de instalación de Firefox, por lo general
C:\Program Files\Mozilla Firefox
. - Copia
allow-unsigned-extensions.cfg
enC:\Program Files\Mozilla Firefox
. - Copia
allow-unsigned-extensions.js
enC:\Program Files\Mozilla Firefox\defaults\pref
.
Las versiones recientes de Firefox, como 102.10 ESR, vuelven a habilitar la extensión automáticamente una vez que se establece el marcador. En versiones anteriores como 68.0.2 ESR, puede ser necesario reinstalar la extensión.
El método de instalación de la Política de grupo sin conexión no funciona con Firefox 68.0.2 ESR y posiblemente versiones anteriores. Las alternativas temporales implican añadir lo siguiente a un script de PowerShell y ejecutarlo con privilegios de administrador:
# Define the registry path
$regPath = "HKLM:\SOFTWARE\Policies\Mozilla\Firefox\Extensions\Install"
function Convert-WindowsPathToFileUrl($path) {
$unixPath = $path -replace '\\', '/'
$escapedPath = $unixPath -replace ' ', '%20'
return "file:///" + $escapedPath
}
function Fix-FirefoxProfile($prefsPath, $fileUrl) {
if (-not (Test-Path $prefsPath)) {
Write-Host "prefs.js not found: $prefsPath"
return
}
Write-Host "Processing prefs.js: $prefsPath"
$content = Get-Content -Path $prefsPath -Raw
$pattern = 'user_pref\("browser\.policies\.runOncePerModification\.extensionsInstall",\s*"(.+?)"\);'
if (-not ($content -match $pattern)) {
Write-Host " -> No matching preference found in prefs.js."
return
}
$jsonArrayString = $matches[1]
# Unescape \" to "
$jsonArrayStringUnescaped = $jsonArrayString -replace '\\\"', '"'
try {
$list = ConvertFrom-Json -InputObject $jsonArrayStringUnescaped
} catch {
Write-Host " -> Error parsing JSON inside prefs.js preference (after unescaping)."
return
}
if (-not ($list -contains $fileUrl)) {
Write-Host " -> File URL not present in extensionsInstall list."
return
}
$newList = $list | Where-Object { $_ -ne $fileUrl }
$newJsonArrayString = ($newList | ConvertTo-Json -Compress)
# prefs.js expects it wrapped as a string, escaping " as \"
$escapedNewJsonArrayString = $newJsonArrayString -replace '"', '\"'
$newPrefLine = "user_pref(""browser.policies.runOncePerModification.extensionsInstall"", `"$escapedNewJsonArrayString`");"
# Replace the old line
$oldPrefLine = $matches[0]
$content = $content -replace [regex]::Escape($oldPrefLine), $newPrefLine
Set-Content -Path $prefsPath -Value $content -Encoding UTF8
Write-Host " -> prefs.js updated."
}
function Fix-AllFirefoxProfiles($fileUrl) {
$profilesPath = "$env:APPDATA\Mozilla\Firefox\Profiles"
if (-not (Test-Path $profilesPath)) {
Write-Host "Firefox profiles directory not found: $profilesPath"
return
}
$profiles = Get-ChildItem -Path $profilesPath -Directory
foreach ($profile in $profiles) {
$prefsPath = Join-Path $profile.FullName "prefs.js"
Fix-FirefoxProfile -prefsPath $prefsPath -fileUrl $fileUrl
}
}
if (-not (Test-Path $regPath)) {
Write-Host "Registry path not found: $regPath"
return
}
$values = Get-ItemProperty -Path $regPath
foreach ($property in $values.PSObject.Properties) {
$name = $property.Name
$value = $property.Value
if ($value -notmatch "^[a-zA-Z]:\\.*\\uipath-ff\.xpi$") {
continue
}
Write-Host "Found Windows path for uipath-ff.xpi in entry '$name': $value"
$fileUrl = Convert-WindowsPathToFileUrl $value
Write-Host " -> Converted to file URL: $fileUrl"
Set-ItemProperty -Path $regPath -Name $name -Value $fileUrl
Write-Host " -> Updated registry key '$name'."
Fix-AllFirefoxProfiles -fileUrl $fileUrl
}
# Define the registry path
$regPath = "HKLM:\SOFTWARE\Policies\Mozilla\Firefox\Extensions\Install"
function Convert-WindowsPathToFileUrl($path) {
$unixPath = $path -replace '\\', '/'
$escapedPath = $unixPath -replace ' ', '%20'
return "file:///" + $escapedPath
}
function Fix-FirefoxProfile($prefsPath, $fileUrl) {
if (-not (Test-Path $prefsPath)) {
Write-Host "prefs.js not found: $prefsPath"
return
}
Write-Host "Processing prefs.js: $prefsPath"
$content = Get-Content -Path $prefsPath -Raw
$pattern = 'user_pref\("browser\.policies\.runOncePerModification\.extensionsInstall",\s*"(.+?)"\);'
if (-not ($content -match $pattern)) {
Write-Host " -> No matching preference found in prefs.js."
return
}
$jsonArrayString = $matches[1]
# Unescape \" to "
$jsonArrayStringUnescaped = $jsonArrayString -replace '\\\"', '"'
try {
$list = ConvertFrom-Json -InputObject $jsonArrayStringUnescaped
} catch {
Write-Host " -> Error parsing JSON inside prefs.js preference (after unescaping)."
return
}
if (-not ($list -contains $fileUrl)) {
Write-Host " -> File URL not present in extensionsInstall list."
return
}
$newList = $list | Where-Object { $_ -ne $fileUrl }
$newJsonArrayString = ($newList | ConvertTo-Json -Compress)
# prefs.js expects it wrapped as a string, escaping " as \"
$escapedNewJsonArrayString = $newJsonArrayString -replace '"', '\"'
$newPrefLine = "user_pref(""browser.policies.runOncePerModification.extensionsInstall"", `"$escapedNewJsonArrayString`");"
# Replace the old line
$oldPrefLine = $matches[0]
$content = $content -replace [regex]::Escape($oldPrefLine), $newPrefLine
Set-Content -Path $prefsPath -Value $content -Encoding UTF8
Write-Host " -> prefs.js updated."
}
function Fix-AllFirefoxProfiles($fileUrl) {
$profilesPath = "$env:APPDATA\Mozilla\Firefox\Profiles"
if (-not (Test-Path $profilesPath)) {
Write-Host "Firefox profiles directory not found: $profilesPath"
return
}
$profiles = Get-ChildItem -Path $profilesPath -Directory
foreach ($profile in $profiles) {
$prefsPath = Join-Path $profile.FullName "prefs.js"
Fix-FirefoxProfile -prefsPath $prefsPath -fileUrl $fileUrl
}
}
if (-not (Test-Path $regPath)) {
Write-Host "Registry path not found: $regPath"
return
}
$values = Get-ItemProperty -Path $regPath
foreach ($property in $values.PSObject.Properties) {
$name = $property.Name
$value = $property.Value
if ($value -notmatch "^[a-zA-Z]:\\.*\\uipath-ff\.xpi$") {
continue
}
Write-Host "Found Windows path for uipath-ff.xpi in entry '$name': $value"
$fileUrl = Convert-WindowsPathToFileUrl $value
Write-Host " -> Converted to file URL: $fileUrl"
Set-ItemProperty -Path $regPath -Name $name -Value $fileUrl
Write-Host " -> Updated registry key '$name'."
Fix-AllFirefoxProfiles -fileUrl $fileUrl
}