¿Cómo usar WebDriver / Selenium 2 LoadComponents en el patrón PageObjects?

Tengo dificultades para acostumbrarme al patrón WebDriver PageObject. Comparta su experiencia y formas de usar el patrón PageObjects y los componentes cargables.

Como PageObject representa generalmente un componente o una funcionalidad, al principio se me ocurrió que debería usarlo para hacer algunas cosas en load () y ver si hace lo que debería en isLoaded ().

Entonces me di cuenta de que debería usarse solo para "cargar" objetos (posiblemente inicialización) como en el caso de moverse por un sitio web, cada objeto con su propia URL. Y usando isLoaded () para probar si el objeto ESTÁ LISTO para la prueba.

Pero si tiene que probar un remitente de pedidos de JavaScript complejo, que está compuesto por el cargador de archivos JS, el formulario JS que se basa en 2 partes independientes y hay tres tipos de pedidos, no se mueve a ninguna parte (con respecto a la URL), solo el estado de los elementos está cambiando.

Considere el método get (). Entras en la página con el formulario interactivo. Se carga cuando el formulario existe en la página. Luego tiene objetos form1 y form2 ... cómo deberían ser sus métodos load () y isLoaded (), están listos para la acción de inmediato porque no necesitan ninguna carga, solo prueban sus servicios.

Es un desastre, uno no sabe si el método isLoaded () se usa para verificar si el objeto se cargó o si el objeto se cargó y se configuró correctamente. Pero supongo que la forma anterior es correcta y que la validez de su configuración debe garantizarse dentro de las pruebas.

Guión

Testing first part of html form - test that field client side validation works
Testing the second one that depends on the first one
Testing the following file uploader - upload, canceling, clearing, order, fileIDs
Testing the overall html form submission - ServerSide validation errors, results

La documentación dice:

LoadableComponent

PageObjects

Los métodos públicos representan los servicios que ofrece la página

Validar, cargar, cargar Múltiple, cancelar, borrar

Intenta no exponer las partes internas de la página

Lo único que se me ocurre es tener la instancia del controlador oculta a UnitTests y usar solo PageObjects para mantener todos los nombres de campo, nombres de clase css en PageObjects + suministrar PageObjects con datos de entrada y afirmar el resultado booleano de los servicios / funcionalidades

Methods devuelve otros PageObjects

Esta es la cosa más difícil a la que acostumbrarse. Tener 4 objetos de página para una forma interactiva no parece natural. Recomiendan Form1, Form2 (Form1), Upload (Form2), Submit (Upload), aunque encuentro que encadenar y entregar una referencia al objeto anterior es muy caótico. Llamar a get () en todos ellos en un método de prueba parece mejor. Pero supongo que la idea detrás de esto no es exponer la instancia del Controlador a las Pruebas, sino usar solo PageObjects que usan la instancia del Controlador internamente

Diferentes resultados para la misma acción se modelan como métodos diferentes Supongo que esto significa que no se debe decidir sobre la validez de esa acción en el lado del objeto Página, sino en el lado de Prueba

Respuestas a la pregunta(2)

Su respuesta a la pregunta