¿Cuál es la estructura completa del objeto del navegador en QTP?

Sé que esta puede ser una pregunta muy básica, pero recientemente comencé a usar QTP y todavía estoy captando algunas cosas. Durante las últimas horas he estado buscando una respuesta a esto, pero hasta ahora no he tenido suerte.

Mi pregunta es:
En el código QTP solemos escribir:

Browser("x").Page("y").Navigate("url")

Quiero entender de dónde viene este objeto del navegador y qué son exactamente x e y.
1) ¿Es parte de VBScript o es parte de QTP?
2) Además, ¿dónde puedo obtener detalles completos sobre esta estructura de objeto? Me gustaría saber qué más puedo escribir además de "página" y además de "navegar".

preguntado el 29 de septiembre de 11 a las 13:09

3 Respuestas

El Browser El objeto de prueba representa una sola pestaña en un navegador con pestañas.

Al llamar al Browser La función QTP devuelve un objeto de prueba, generalmente este es el navegador con ese nombre de un repositorio de objetos asociado (como con su "x" ejemplo) pero puede usar programación descriptiva para crear un nuevo objeto de prueba.

Al llamar a un subelemento de los Browser tienes dos opciones (como con todos los objetos de prueba)

  1. Llame a un método del objeto de prueba. La lista de métodos admitidos por el objeto de prueba se puede encontrar en la documentación de QTP.
  2. A sus hijos del objeto de prueba del repositorio de objetos (o programación descriptiva). Este es el caso de su muestra. Los hijos de Browser son casi siempre Page pero Window u otros objetos pueden aparecer (dependiendo de la aplicación que esté probando).

El Page El objeto de prueba representa el documento HTML de nivel superior que se muestra en el Browser.

Por cierto, el fragmento de código que escribió es incorrecto. Page no es compatible con el Navigate método, Browser hace.

contestado el 23 de mayo de 17 a las 15:05

En su ejemplo, "x" e "y" se refieren al nombre lógico en el repositorio de objetos. Entonces, para responder a la pregunta n. ° 1, esto es parte de QTP, no de VBScript. El repositorio de objetos es un intermediario que asigna nombres lógicos en su código VBScript a partir de los detalles reales de la identificación de un objeto en tiempo de ejecución. Es solo una abstracción.

En general, sugiero obtener una formación formal sobre la herramienta. La capacitación responderá a la mayoría de sus preguntas sobre este tipo de cosas. También hay numerosos tutoriales en la web. Por último, la guía de ayuda lo guiará a través de muchos de los conceptos básicos.

Respondido el 29 de Septiembre de 11 a las 22:09

Gracias por responder. Sería genial si alguien pudiera indicarme un tutorial que explique sobre "Navegador" y "Página". He pasado mucho tiempo buscando más detalles sobre ellos. - Mugen

En realidad, el objeto Navegador representa una colección de todas las ventanas y pestañas del navegador que están abiertas actualmente. Especifica uno específico por nombre o descripción como este:

Browser("website")

donde "sitio web" es un "objeto de navegador" con nombre en el repositorio de objetos o, alternativamente, una descripción (cadena u objeto) que describe una ventana / pestaña específica con la que desea trabajar.

El objeto Page representa una colección de todas las páginas posibles que el navegador mencionado anteriormente podría haber cargado. Las instancias de la colección corresponden a los "objetos de página" nombrados en el repositorio de objetos. Especifica uno específico por nombre o descripción como este:

Browser("website").Page("Logon Page")

Este concepto puede ser muy confuso, especialmente considerando el hecho de que cualquier ventana / pestaña real del navegador solo puede tener UNA página real cargada en un momento dado. En otras palabras, si itera sobre los objetos secundarios en tiempo real del navegador ("sitio web"), siempre habrá solo uno.

La mejor manera de pensar en esta relación navegador / página es usar la metáfora correcta. Cuando comencé a programar con QTP, pensé que era mejor pensar en el objeto del navegador como IE, Chrome, Firefox, etc., y traté de administrar los objetos de mi repositorio de objetos de esa manera, y causó un gran desastre.

Ahora entiendo que la mejor manera de organizar los objetos del navegador en el repositorio de objetos es de esta manera:

Piense en un objeto de navegador en el repositorio como un único objeto de sitio web. Amazon.Com MSN.Com StackOverflow.Com LifeHacker.Com, etc.

Piense en un objeto de página en el repositorio como una sola página claramente única del objeto del sitio web. Para cada página diferente que pueda mostrar el sitio web (con diferentes controles en él), debe crear un objeto Página separado debajo del objeto del navegador. Su repositorio podría verse así:

Amazon.com
  Login Page
  Music Page
  Books Page
  Checkout Page
StackOverFlow.Com
  Login Page
    username field
    password field
  Questions Page
  Jobs Page
  Tags Page
  Users Page
  Badges page
etc etc...

La idea aquí es crear páginas lógicas para contener los objetos de control que ocurren solo en esas páginas.

Ahora para las cosas difíciles ...

Para que esto funcione, tenemos que asegurarnos de que el navegador y los objetos de la página realmente "existan" cuando deberían. Para un objeto de navegador, debería "existir" siempre que CUALQUIERA de sus páginas se cargue en cualquier pestaña del navegador. Para un objeto de página, debería "existir" solo cuando esa página de ese sitio web está cargada y sus controles específicos están en la pantalla.

Esto significa que debemos editar cuidadosamente las propiedades de identificación de los objetos del navegador, de modo que no importa qué página del sitio web esté cargada actualmente, siempre identificará correctamente el sitio web como ese objeto del navegador.

Aquí hay un ejemplo ... En mi trabajo, tengo un sitio web llamado "Comercio". El navegador generalmente se puede encontrar de manera confiable con "name:=Trade"... pero la página de inicio de sesión es un poco diferente, su nombre es "Bienvenido al comercio" ... así que para que el objeto del sitio web funcione, utilizo una expresión regular en las propiedades de identificación como esta: "name:=(?:Welcome to Trade|Trade)". De esta forma, los mismos objetos del navegador dicen que "existe" cuando se encuentra cualquiera de los nombres. De esta manera, puedo contener la página de inicio de sesión como parte de todo el objeto del sitio web en lugar de tener que abarrotar el repositorio de objetos con un objeto de navegador que solo contiene una página de inicio de sesión. lo que hace que leer el código más tarde sea más molesto y complica el uso de bloques WITH)

Otro problema es que los objetos de Page suelen ser difíciles de diferenciar. Las URL con las que se cargan pueden ser dinámicas y es posible que los títulos de las páginas no cambien de una página a otra. Para resolver esto, AGREGO propiedades de identificación adicionales a los objetos de mi página en el repositorio de objetos ... Por ejemplo, podría agregar manualmente la propiedad de URL y luego usar una expresión regular para buscar una etiqueta específica dentro de la URL como esta: "URL:=https://TradeTools-(?:SIT|UAT).*userLogin.*" Esto sería además de la propiedad del título obligatoria (nunca elimine una propiedad obligatoria, o el motor de grabación no grabará correctamente)

Entonces, para responder más directamente a esta pregunta ...

  1. Los objetos de navegador y página son parte de QTP. QTP le proporciona esta API y usted (la toca / la usa / la manipula) usando VBScript. Las clases de navegador y página no deben existir fuera de QTP.
  2. Puede obtener la lista completa de métodos y propiedades disponibles para el navegador y los objetos de página en los archivos de ayuda de QTP / UFT. Además, puedes leer esto: http://community.hpe.com/t5/All-About-the-Apps/Understanding-the-web-test-object-model-in-HP-Unified-Functional/ba-p/6168133#.Vvp0V-IrK03

Espero que esto ayude. Una vez que cambié mi comprensión de los navegadores / páginas a la metáfora que he descrito aquí, ha aumentado considerablemente mis capacidades con QTP.

contestado el 10 de mayo de 16 a las 18:05

¡Gran respuesta! Estoy marcando esto como la respuesta a mi pregunta. Aunque ya no uso QTP en mi carrera (ya que esta pregunta se hizo hace casi 5 años). Sin embargo, gracias por compartir sus conocimientos y su comprensión personal sobre el tema. :) - Mugen

Gracias. Tuve que escribirlo, y tu pregunta fue perfecta y sin respuesta, así que elegí responderla para que si alguien más busca esa pregunta, pueda encontrar mi respuesta. - Trimble Epic

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.