Opciones de Servicio
Las opciones de servicio son las opciones que se pueden configurar cuando se instancia el servicio y se utilizarán para cada llamada a método.
// wdio.conf.(js|ts)
export const config = {
// ...
// =====
// Setup
// =====
services: [
[
"visual",
{
// The options
},
],
],
// ...
};
Opciones Predeterminadas
addressBarShadowPadding
- Tipo:
number
- Obligatorio: No
- Valor predeterminado:
6
- Contextos de Aplicación Soportados: Web
El relleno que debe agregarse a la barra de direcciones en iOS y Android para hacer un recorte adecuado de la ventana.
autoElementScroll
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
true
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview)
Esta opción te permite desactivar el desplazamiento automático del elemento a la vista cuando se crea una captura de pantalla del elemento.
addIOSBezelCorners
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
false
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa
Agrega esquinas de bisel y muesca/isla dinámica a la captura de pantalla para dispositivos iOS.
Esto solo se puede hacer cuando el nombre del dispositivo PUEDE determinarse automáticamente y coincide con la siguiente lista de nombres de dispositivos normalizados. La normalización será realizada por este módulo. iPhone:
- iPhone X:
iphonex
- iPhone XS:
iphonexs
- iPhone XS Max:
iphonexsmax
- iPhone XR:
iphonexr
- iPhone 11:
iphone11
- iPhone 11 Pro:
iphone11pro
- iPhone 11 Pro Max:
iphone11promax
- iPhone 12:
iphone12
- iPhone 12 Mini:
iphone12mini
- iPhone 12 Pro:
iphone12pro
- iPhone 12 Pro Max:
iphone12promax
- iPhone 13:
iphone13
- iPhone 13 Mini:
iphone13mini
- iPhone 13 Pro:
iphone13pro
- iPhone 13 Pro Max:
iphone13promax
- iPhone 14:
iphone14
- iPhone 14 Plus:
iphone14plus
- iPhone 14 Pro:
iphone14pro
- iPhone 14 Pro Max:
iphone14promax
iPads: - iPad Mini 6th Generation:
ipadmini
- iPad Air 4th Generation:
ipadair
- iPad Air 5th Generation:
ipadair
- iPad Pro (11-inch) 1st Generation:
ipadpro11
- iPad Pro (11-inch) 2nd Generation:
ipadpro11
- iPad Pro (11-inch) 3rd Generation:
ipadpro11
- iPad Pro (12.9-inch) 3rd Generation:
ipadpro129
- iPad Pro (12.9-inch) 4th Generation:
ipadpro129
- iPad Pro (12.9-inch) 5th Generation:
ipadpro129
autoSaveBaseline
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
true
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa
Si no se encuentra una imagen de referencia durante la comparación, la imagen se copia automáticamente a la carpeta de referencia.
baselineFolder
- Tipo:
string|()=> string
- Obligatorio: No
- Valor predeterminado:
.path/to/testfile/__snapshots__/
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa
El directorio que contendrá todas las imágenes de referencia utilizadas durante la comparación. Si no se establece, se utilizará el valor predeterminado que almacenará los archivos en una carpeta __snapshots__/
junto a la especificación que ejecuta las pruebas visuales. También se puede usar una función que devuelva un string
para establecer el valor de baselineFolder
:
{
baselineFolder: path.join(process.cwd(), 'foo', 'bar', 'baseline')
},
// O
{
baselineFolder: () => {
// Hacer algo de magia aquí
return path.join(process.cwd(), 'foo', 'bar', 'baseline');
}
}
clearRuntimeFolder
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
false
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa
Eliminar la carpeta de tiempo de ejecución (actual
y diff
) al inicializar
Esto solo funcionará cuando screenshotPath
se establezca a través de las opciones del plugin, y NO FUNCIONARÁ cuando configures las carpetas en los métodos
createJsonReportFiles
(NUEVO)
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
false
Ahora tienes la opción de exportar los resultados de comparación a un archivo de informe JSON. Al proporcionar la opción createJsonReportFiles: true
, cada imagen que se compara creará un informe almacenado en la carpeta actual
, junto a cada resultado de imagen actual
. La salida se verá así:
{
"parent": "check methods",
"test": "should fail comparing with a baseline",
"tag": "examplePageFail",
"instanceData": {
"browser": {
"name": "chrome-headless-shell",
"version": "126.0.6478.183"
},
"platform": {
"name": "mac",
"version": "not-known"
}
},
"commandName": "checkScreen",
"boundingBoxes": {
"diffBoundingBoxes": [
{
"left": 1088,
"top": 717,
"right": 1186,
"bottom": 730
}
//....
],
"ignoredBoxes": [
{
"left": 159,
"top": 652,
"right": 356,
"bottom": 703
}
//...
]
},
"fileData": {
"actualFilePath": "/Users/wdio/visual-testing/.tmp/actual/desktop_chrome-headless-shellexamplePageFail-local-chrome-latest-1366x768.png",
"baselineFilePath": "/Users/wdio/visual-testing/localBaseline/desktop_chrome-headless-shellexamplePageFail-local-chrome-latest-1366x768.png",
"diffFilePath": "/Users/wdio/visual-testing/.tmp/diff/desktop_chrome-headless-shell/examplePageFail-local-chrome-latest-1366x768png",
"fileName": "examplePageFail-local-chrome-latest-1366x768.png",
"size": {
"actual": {
"height": 768,
"width": 1366
},
"baseline": {
"height": 768,
"width": 1366
},
"diff": {
"height": 768,
"width": 1366
}
}
},
"misMatchPercentage": "12.90",
"rawMisMatchPercentage": 12.900729014153246
}
Cuando todas las pruebas se ejecuten, se generará un nuevo archivo JSON con la colección de comparaciones que se puede encontrar en la raíz de tu carpeta actual
. Los datos se agrupan por:
describe
para Jasmine/Mocha oFeature
para CucumberJSit
para Jasmine/Mocha oScenario
para CucumberJS y luego se ordenan por:commandName
, que son los nombres de métodos de comparación utilizados para comparar las imágenesinstanceData
, primero el navegador, luego el dispositivo, luego la plataforma se verá así
[
{
"description": "check methods",
"data": [
{
"test": "should fail comparing with a baseline",
"data": [
{
"tag": "examplePageFail",
"instanceData": {},
"commandName": "checkScreen",
"framework": "mocha",
"boundingBoxes": {
"diffBoundingBoxes": [],
"ignoredBoxes": []
},
"fileData": {},
"misMatchPercentage": "14.34",
"rawMisMatchPercentage": 14.335403703025868
},
{
"tag": "exampleElementFail",
"instanceData": {},
"commandName": "checkElement",
"framework": "mocha",
"boundingBoxes": {
"diffBoundingBoxes": [],
"ignoredBoxes": []
},
"fileData": {},
"misMatchPercentage": "1.34",
"rawMisMatchPercentage": 1.335403703025868
}
]
}
]
}
]
Los datos del informe te darán la oportunidad de crear tu propio informe visual sin tener que hacer toda la magia y la recopilación de datos tú mismo.
Necesitas usar la versión 5.2.0
o superior de @wdio/visual-testing
disableBlinkingCursor
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
false
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview)
Activa/Desactiva el "parpadeo" del cursor en todos los elementos input
, textarea
, [contenteditable]
en la aplicación. Si se establece en true
, el cursor se configurará como transparent
antes de tomar una captura de pantalla y se restablecerá cuando termine.
disableCSSAnimation
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
false
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview)
Activa/Desactiva todas las animaciones CSS en la aplicación. Si se establece en true
, todas las animaciones se desactivarán antes de tomar una captura de pantalla y se restablecerán cuando termine.
enableLayoutTesting
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
false
- Contextos de Aplicación Soportados: Web
Esto ocultará todo el texto en una página para que solo se utilice el diseño para la comparación. El ocultamiento se realizará agregando el estilo 'color': 'transparent !important'
a cada elemento.
Para la salida, consulta Salida de Prueba
Al usar esta bandera, cada elemento que contiene texto (no solo p, h1, h2, h3, h4, h5, h6, span, a, li
, sino también div|button|..
) recibirá esta propiedad. NO hay opción para personalizarlo.
formatImageName
- Tipo:
string
- Obligatorio: No
- Valor predeterminado:
{tag}-{browserName}-{width}x{height}-dpr-{dpr}
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa
El nombre de las imágenes guardadas se puede personalizar pasando el parámetro formatImageName
con una cadena de formato como:
{tag}-{browserName}-{width}x{height}-dpr-{dpr}
Las siguientes variables se pueden pasar para formatear la cadena y se leerán automáticamente de las capacidades de la instancia. Si no se pueden determinar, se utilizarán los valores predeterminados.
browserName
: El nombre del navegador en las capacidades proporcionadasbrowserVersion
: La versión del navegador proporcionada en las capacidadesdeviceName
: El nombre del dispositivo de las capacidadesdpr
: La relación de píxeles del dispositivoheight
: La altura de la pantallalogName
: El logName de las capacidadesmobile
: Esto agregará_app
, o el nombre del navegador después deldeviceName
para distinguir capturas de pantalla de aplicaciones de las capturas de navegadorplatformName
: El nombre de la plataforma en las capacidades proporcionadasplatformVersion
: La versión de la plataforma proporcionada en las capacidadestag
: La etiqueta que se proporciona en los métodos que se están llamandowidth
: El ancho de la pantalla
No puedes proporcionar rutas/carpetas personalizadas en el formatImageName
. Si deseas cambiar la ruta, consulta cambiar las siguientes opciones:
baselineFolder
screenshotPath
folderOptions
por método
fullPageScrollTimeout
- Tipo:
number
- Obligatorio: No
- Valor predeterminado:
1500
- Contextos de Aplicación Soportados: Web
El tiempo de espera en milisegundos después de un desplazamiento. Esto puede ayudar a identificar páginas con carga perezosa.
Esto solo funcionará cuando la opción de servicio/método userBasedFullPageScreenshot
esté establecida en true
, consulta también userBasedFullPageScreenshot
hideScrollBars
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
true
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview)
Oculta las barras de desplazamiento en la aplicación. Si se establece en true, todas las barras de desplazamiento se desactivarán antes de tomar una captura de pantalla. Esto está configurado por defecto como true
para prevenir problemas adicionales.
logLevel
- Tipo:
string
- Obligatorio: No
- Valor predeterminado:
info
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa
Agrega registros adicionales, las opciones son debug | info | warn | silent
Los errores siempre se registran en la consola.
savePerInstance
- Tipo:
boolean
- Valor predeterminado:
false
- Obligatorio: no
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa
Guardar las imágenes por instancia en una carpeta separada, por ejemplo, todas las capturas de Chrome se guardarán en una carpeta Chrome como desktop_chrome
.
screenshotPath
- Tipo:
string | () => string
- Valor predeterminado:
.tmp/
- Obligatorio: no
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa
El directorio que contendrá todas las capturas de pantalla actuales/diferentes. Si no se establece, se utilizará el valor predeterminado. También se puede usar una función que devuelva una cadena para establecer el valor screenshotPath:
{
screenshotPath: path.join(process.cwd(), 'foo', 'bar', 'screenshotPath')
},
// O
{
screenshotPath: () => {
// Hacer algo de magia aquí
return path.join(process.cwd(), 'foo', 'bar', 'screenshotPath');
}
}
toolBarShadowPadding
- Tipo:
number
- Obligatorio: No
- Valor predeterminado:
6
para Android y15
para iOS (6
por defecto y9
se agregará automáticamente para la posible barra de inicio en iPhones con una muesca o iPads que tienen una barra de inicio) - Contextos de Aplicación Soportados: Web
El relleno que debe agregarse a la barra de herramientas en iOS y Android para hacer un recorte adecuado de la ventana.
userBasedFullPageScreenshot
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
false
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview) Introducido en visual-service@7.0.0
Por defecto, las capturas de pantalla de página completa en web de escritorio se capturan utilizando el protocolo WebDriver BiDi, que permite capturas de pantalla rápidas, estables y consistentes sin desplazamiento. Cuando userBasedFullPageScreenshot se establece en true, el proceso de captura de pantalla simula a un usuario real: desplazándose por la página, capturando capturas de pantalla del tamaño de la ventana y uniéndolas. Este método es útil para páginas con contenido de carga perezosa o renderizado dinámico que depende de la posición de desplazamiento.
Utiliza esta opción si tu página depende de la carga de contenido mientras se desplaza o si deseas preservar el comportamiento de los métodos de captura de pantalla más antiguos.
waitForFontsLoaded
- Tipo:
boolean
- Obligatorio: No
- Valor predeterminado:
true
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview)
Las fuentes, incluidas las fuentes de terceros, pueden cargarse de forma síncrona o asíncrona. La carga asíncrona significa que las fuentes pueden cargarse después de que WebdriverIO determine que una página se ha cargado completamente. Para prevenir problemas de renderizado de fuentes, este módulo, por defecto, esperará a que todas las fuentes se carguen antes de tomar una captura de pantalla.
Opciones Tabulables
Este módulo también admite dibujar la forma en que un usuario usaría su teclado para tabular a través del sitio web dibujando líneas y puntos de un elemento tabulable a otro.
El trabajo está inspirado en la publicación del blog de Viv Richards sobre "AUTOMATIZAR LA TABULABILIDAD DE LA PÁGINA (¿ES ESA UNA PALABRA?) CON PRUEBAS VISUALES".
La forma en que se seleccionan los elementos tabulables se basa en el módulo tabbable. Si hay algún problema relacionado con la tabulación, consulta el README.md y especialmente la sección Más detalles.
tabbableOptions
- Tipo:
object
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
Las opciones que se pueden cambiar para las líneas y puntos si utilizas los métodos {save|check}Tabbable
. Las opciones se explican a continuación.
tabbableOptions.circle
- Tipo:
object
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
Las opciones para cambiar el círculo.
tabbableOptions.circle.backgroundColor
- Tipo:
string
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
El color de fondo del círculo.
tabbableOptions.circle.borderColor
- Tipo:
string
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
El color del borde del círculo.
tabbableOptions.circle.borderWidth
- Tipo:
number
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
El ancho del borde del círculo.
tabbableOptions.circle.fontColor
- Tipo:
string
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
El color de la fuente del texto en el círculo. Esto solo se mostrará si showNumber
está configurado como true
.
tabbableOptions.circle.fontFamily
- Tipo:
string
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
La familia de la fuente del texto en el círculo. Esto solo se mostrará si showNumber
está configurado como true
.
Asegúrate de establecer fuentes que sean compatibles con los navegadores.
tabbableOptions.circle.fontSize
- Tipo:
number
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
El tamaño de la fuente del texto en el círculo. Esto solo se mostrará si showNumber
está configurado como true
.
tabbableOptions.circle.size
- Tipo:
number
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
El tamaño del círculo.
tabbableOptions.circle.showNumber
- Tipo:
showNumber
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
Mostrar el número de secuencia de tabulación en el círculo.
tabbableOptions.line
- Tipo:
object
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
Las opciones para cambiar la línea.
tabbableOptions.line.color
- Tipo:
string
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
El color de la línea.
tabbableOptions.line.width
- Tipo:
number
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web
El ancho de la línea.
Opciones de comparación
compareOptions
- Tipo:
object
- Obligatorio: No
- Valor predeterminado: Consulta aquí para todos los valores predeterminados
- Contextos de Aplicación Soportados: Web, Aplicación Híbrida (Webview), Aplicación Nativa (Consulta Opciones de comparación de método para más información)
Las opciones de comparación también se pueden establecer como opciones de servicio, se describen en las Opciones de comparación de método