DescriptProgramación en vivo en QTP/UFT: Dinámico y estático
⚡ Resumen inteligente
DescriptLa programación ive permite una QTP or UFT Una instrucción contiene la descripción del objeto en sí, como pares de valor de propiedad o como un Descriptobjeto ion, por lo que un paso se ejecuta incluso cuando el objeto nunca se almacenó en el Repositorio de objetos.
¿Qué es Descript¿Programación en vivo?
Descriptprogramación en vivo se utiliza para ejecutar operaciones en un objeto en el AUT cuya definición no está almacenada en el Repositorio de objetos. Utilizando este mecanismo, puede omitir la identificación del Repositorio de objetos y proporcionar el objeto Description en la declaración misma.
El nombre de un objeto se utiliza simplemente para vincular un objeto en un script con su descripción en un repositorio de objetos. Esto significa que si cambias el nombre del objeto tanto en tu script como en el repositorio de objetos, el script debería seguir ejecutándose. Mira el siguiente video para comprender mejor este concepto.
Haga clic en aquí si el video no es accesible
Videos
- Eliminar el objeto Descriptión del cuadro WinEdit Nombre del agente desde el Repositorio de objetos. Si vuelve a ejecutar la prueba, fallará, ya que no puede reconocer el objeto. Examinemos el motivo por el que falla el script.
- Durante el tiempo de ejecución, UFT Se identifica la operación que se realiza en el cuadro WinEdit y el objeto. DescriptLa ión en el Repositorio de objetos se almacena como Nombre del agente. Utiliza este nombre para track el objeto en el repositorio de objetos. Para un padre, no puede tener dos objetos hijos con el mismo nombre, por lo que QTP Asigna de forma única el objeto en el repositorio. Luego, utiliza la descripción almacenada en el Repositorio de Objetos, reemplaza el nombre con la descripción y utiliza la declaración resultante para identificar el objeto en la aplicación bajo prueba.
- Dado que en nuestro caso habíamos eliminado por completo la descripción de este objeto, el script falla.
- Pero ¿y si, en lugar de QTP ¿Reemplazando la descripción del objeto, usted como probador especifica directamente las descripciones de los objetos en su script? Esto no es más que “DescriptProgramación ive”
Ese único cambio de responsabilidad es lo que implementan los dos formularios que aparecen a continuación, y cada formulario se adapta a un tipo de guion diferente.
Tipos de DescriptProgramación ive
Puedes usar Descriptive programación de dos maneras
- Estático
- Dynamic
Estático DescriptProgramación ive
En el método estático, para la identificación de objetos, se especifica la propiedad de un objeto en el siguiente formato
property:=values,
Este formato se denomina par propiedad-valor y se encierra entre comillas. Escrita completa, una declaración estática se ve así:
TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method
Si su objeto utiliza varias descripciones para su identificación, puede especificarlas usando comas.
Entonces, en nuestro caso, la descripción del Nombre del agente se convierte en
"nativeclass:=Edit", "attached text:=Agent Name:"
Las descripciones estáticas se leen en el punto donde se ejecuta la instrucción, lo que las hace ideales para pasos puntuales y para correcciones rápidas en un script que no se desea volver a grabar.
Dynamic DescriptProgramación ive
El segundo método para realizar la misma acción es utilizar Dynamic Descriptprogramación en vivo
En caso de que su script utilice el objeto de programación descriptivo candidato varias veces, será muy tedioso especificar todos los pares de valores de propiedad para cada declaración.
En tales casos, puede hacer uso de la DescriptClase de iones proporcionada por QTP
La sintaxis para crear un objeto de descripción es
Set MyDescription = Description.Create() MyDescription("property").Value = "property-value"
Este es el método dinámico.
Al rellenar ese objeto con las propiedades del nombre del agente utilizadas anteriormente, se obtiene una descripción completa y reutilizable:
Dim oDesc Set oDesc = Description.Create() oDesc("nativeclass").Value = "Edit" oDesc("attached text").Value = "Agent Name:"
La variable oDesc Ahora se puede pasar a cualquier instrucción que necesite ese objeto, de modo que una sola edición actualiza cada paso que lo utiliza.
Estático vs Dinámico DescriptProgramación dinámica: cuándo usar cada una
Ambas formas generan la misma descripción en tiempo de ejecución, por lo que la elección radica en el mantenimiento más que en la capacidad.
| Criterios | Estático (en línea) | Dinámico (Descriptobjeto iónico) |
|---|---|---|
| Cómo está escrita la descripción | Pares de valor de propiedad tipados dentro de la llamada al objeto de prueba | Propiedades añadidas a un objeto creado con Description.Create() |
| Reutilizar | Se repite en cada instrucción que necesita el objeto. | Almacenada en una variable y pasada donde sea necesario. |
| Legibilidad | Las declaraciones cortas se mantienen legibles; las largas se vuelven difíciles de manejar. | Líneas de configuración adicionales, pero la declaración en sí permanece corta. |
| Cambios en tiempo de ejecución | Los valores son fijos a menos que se concatenen a partir de variables. | Los valores de las propiedades se pueden reasignar antes de cada uso. |
| Funciona con objetos secundarios. | No, el argumento del filtro debe ser un Descriptobjeto iónico | Sí, este es el formulario requerido. |
| Mejores adecuados para | Uno o dos pasos sobre un objeto que no está en el repositorio | Objetos utilizados repetidamente o colecciones recuperadas en tiempo de ejecución. |
Por qué usar Descript¿Programación en vivo?
La transcripción que aparece a continuación acompaña al vídeo que muestra un escenario real en el que no se puede conocer de antemano la cantidad de objetos.
Transcripción del video
- La pregunta del millón es por qué usar DP cuando el proceso de identificación de objetos es manejado por QTP
- Supongamos que te asignan la tarea de probar un portal de empleo. Ingresas una consulta de búsqueda en el portal y la prueba espera que selecciones todos los empleos disponibles y hagas clic en "Solicitar empleo".
- Pero la cantidad de trabajos reflejados dependerá de la consulta de búsqueda y de los trabajos disponibles en el momento de la ejecución del script, y no hay forma de predecir de antemano la cantidad de trabajos que se reflejarán.
- En estos casos, puede utilizar la programación descriptiva. Aunque no conozca el número ni los nombres de las casillas de verificación, sí conoce la clase de los objetos como "WebCheck".Box"
- Puede utilizar las opciones Método ChildObjects para devolver objetos que pertenecen a un padre en particular
- Una línea de código como –
Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()
devolverá todos los objetos secundarios de esta página.
- Pero sólo queremos WebCheckBox objetos. Para ello podemos crear un objeto de filtro y establecer su propiedad en la clase de casilla de verificación web, luego pasar este filtro como argumento al método ChildObjects.
- En este caso, solo se devuelven las casillas de verificación.
- A continuación, puedes escribir un código como este, que accede a toda la colección de casillas de verificación comenzando desde cero y activa todas las casillas de verificación.
- A continuación, puede hacer clic en el botón Aplicar para completar la prueba.
- También puede usar DescriptProgramación para ejecutar objetos que son difíciles de grabar, como paneles de ocultación automática, objetos con jerarquías cambiantes, objetos internos anidados y submenús.
- También puede realizar manipulaciones avanzadas de cadenas mediante programación descriptiva.
- En combinación con la propiedad de índice, la programación descriptiva podría ser muy útil para identificar objetos difíciles.
- Si utiliza la descripción programática para un objeto en una jerarquía de objetos, deberá utilizar la programación descriptiva para los objetos hijos subsiguientes.
- Por ejemplo, si se utilizó programación descriptiva para el objeto Page, pero el objeto hijo WinEdit subsiguiente provino del repositorio de objetos, la afirmación es incorrecta.
- Por el contrario, cuando se utiliza programación descriptiva tanto para los objetos Page como WinEdit, la afirmación es correcta.
Escrito, el filtro y el bucle descritos en la transcripción se ven así:
Dim oFilter, allCheckBoxes, i Set oFilter = Description.Create() oFilter("micclass").Value = "WebCheckBox" Set allCheckBoxes = Browser("Jobs").Page("QTP").ChildObjects(oFilter) For i = 0 To allCheckBoxes.Count - 1 allCheckBoxes(i).Set "ON" Next
La colección está basada en cero, por eso el bucle se detiene en Recuento – 1Dado que el filtro se evalúa cuando se ejecuta la línea, el mismo código funciona tanto si la búsqueda devuelve tres trabajos como treinta.
Expresiones regulares, identificadores ordinales y errores comunes
DescriptLa programación dinámica se comporta de dos maneras que sorprenden a la mayoría de la gente la primera vez que una instrucción falla sin razón aparente.
1) Cada valor de propiedad se trata como una expresión regular. Un pie de foto como Total (USD) Por lo tanto, no coincide, porque los paréntesis son sintaxis de expresiones regulares. Escápelos con una barra invertida o desactive la evaluación de expresiones regulares para esa propiedad en un Descriptobjeto iónico:
Set oDesc = Description.Create() oDesc("name").Value = "Total (USD)" oDesc("name").RegularExpression = False
2) Los identificadores ordinales resuelven los empates. Cuando una descripción aún coincide con más de un objeto, agregue índice, localización or tiempo de creación como propiedad adicional. El recuento del índice comienza en cero:
WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99" WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"
Hay tres problemas más que conviene comprobar antes de empezar a depurar la aplicación:
- Usar clase de micrófono, no la etiqueta Nombre de la clase Se muestra en el Inspector de objetos. El nombre para mostrar no es una propiedad válida en una descripción.
- Los nombres de las propiedades no distinguen entre mayúsculas y minúsculas, pero deben escribirse exactamente como los informa la tecnología, incluido el espacio en texto adjunto y etiqueta html.
- DescriptLa programación directa omite el repositorio; no mejora el reconocimiento de objetos. Si no se carga el complemento correcto, ninguna descripción permitirá identificar el objeto.
