scriptresourcemapping script resource net for error aspnethidden asp ajax testing functional-programming callback browser-automation

ajax - for - scriptresourcemapping error in asp net



Alternativas al uso de retrasos cuando se prueba automáticamente una interfaz de usuario web de AJAX (2)

La mayoría de los marcos de automatización tienen algunas funciones de sincronización incorporadas. Selenium no es una excepción e incluye funcionalidades como waitForText, waitForElementPresent, etc.

Me acabo de dar cuenta de que mencionaste "espera" arriba, que interpreté como Duerme (que no es bueno en automatización). Avíseme si malinterpreté, y puedo hablar más sobre las funciones o alternativas de wait *.

Pronto trabajaré en páginas web controladas por AJAX que tienen un montón de contenido generado a partir de un servicio web (WCF).

He probado este tipo de cosas en el pasado (y me pareció fácil) pero no con este nivel de contenido dinámico.

Estoy desarrollando en .NET 3.5 usando Visual Studio 2008. Me imagino esta prueba en:

  1. TestDriven.NET
  2. MBUnit (esto no es prueba unitaria )
  3. Algún tipo de herramienta de automatización para controlar navegadores (Tal vez Selenium, aunque podría ser SWEA o Watin. Estoy pensando en IE, Firefox, y probablemente en Opera y Safari).

En el pasado, he usado retrasos al probar el navegador. No me gusta particularmente hacer eso y pierde el tiempo.

Qué experiencia y práctica hay para hacer las cosas mejor que usar esperas. ¿Tal vez la introducción de devoluciones de llamada y un estilo funcional de programación para ejecutar las pruebas?

Notas 1. Más detalles después de revisar las 3 primeras respuestas.

1) Gracias Alan, Eran y marxidad, sus respuestas me han puesto en la ruta para obtener mi respuesta, con suerte sin pasar demasiado tiempo.

2) Otro detalle, estoy usando jQuery para ejecutar el Ajax, así que esto no está construido en Asp.NET AJAX.

3) Encontré un artículo que ilustra la situación muy bien. Es de http://adamesterline.com/2007/04/23/watin-watir-and-selenium-reviewed/

3.1) Muestra de selenio (Esta y la siguiente, muestra de código WatiN, no aparecen en la página web original (en IE o Firefox) así que las he extraído y las he enumerado aquí).

public void MinAndMaxPriceRestoredWhenOpenedAfterUsingBackButton(){ OpenBrowserTo("welcome/index.rails"); bot.Click("priceDT"); WaitForText("Price Range"); WaitForText("515 N. County Road"); bot.Select("MaxDropDownList", "$5,000,000"); WaitForText("Prewar 8 Off Fifth Avenue"); bot.Select("MinDropDownList", "$2,000,000"); WaitForText("of 86"); bot.Click("link=Prewar 8 Off Fifth Avenue"); WaitForText("Rarely available triple mint restoration"); bot.GoBack(); Thread.Sleep(20000); bot.Click("priceDT"); WaitForText("Price Range"); Assert.AreEqual("$5,000,000", bot.GetSelectedLabel("MaxDropDownList")); Assert.AreEqual("$2,000,000", bot.GetSelectedLabel("MinDropDownList"));}

3.2) muestra de WatiN

public void MinAndMaxPriceRestoredWhenOpenAfterUsingBackButton(){ OpenBrowserTo("welcome/index.rails"); ClickLink("Price"); SelectMaxPrice("$5,000,000"); SelectMinPrice("$2,000,000"); ClickLink("Prewar 8 Off Fifth Avenue"); GoBack(); ClickLink("Price"); Assert.AreEqual("$5,000,000", SelectedMaxPrice()); Assert.AreEqual("$2,000,000", SelectedMinPrice());}

3.3) Si observa estas muestras, aparentemente equivalentes, puede ver que la muestra WatiN ha abstraído las esperas .

3.4) Sin embargo, puede ser que WatiN necesite soporte adicional para los valores modificados por las llamadas Ajax como se indica en http://watinandmore.blogspot.com/2008/01/using-watin-to-test-select-lists-in.html . En ese artículo, a la página se le asigna un campo adicional que se puede usar para sintetizar un evento modificado, así:

// Wait until the value of the watintoken attribute is changed ie.SelectList("countries").WaitUntil(!Find.By("watintoken",watintoken));

4) Ahora lo que busco es una forma de hacer algo como lo que vemos en el código WatiN sin ese evento sintetizado . Podría ser una forma de engancharse directamente a eventos, como eventos modificados. No tendría problemas con las devoluciones de llamadas, aunque eso podría cambiar la forma en que se codifican las pruebas. También creo que veremos formas alternativas de escribir pruebas a medida que las implicaciones de las nuevas características en C # 3, VB 9 y F # comiencen a hundirse (y no les importaría explorar eso).

5) marxidad, mi fuente no tenía una muestra de WebAii, así que no tengo ningún comentario sobre esta interesante herramienta.

Notas 2. 2008-09-29. Después de algún comentario independiente de esta página.

5) Intenté obtener una fuente más completa para el código de muestra WatiN anterior. Desafortunadamente ya no está disponible, el enlace está muerto. Al hacer eso noté hablar de un DSL, presumiblemente un modelo que mapea entre la página web y la herramienta de automatización. No encontré detalles sobre eso.

6) Para WebAii se sugirió que se use un código como este (no se haya probado):

public void MinAndMaxPriceRestoredWhenOpenAfterUsingBackButton(){ ActiveBrowser.NavigateTo("welcome/index.rails"); Find.ByContent<HtmlAnchor>("Price").Click(); HtmlSelect maxPrice = Find.ById<HtmlSelect>("MaxDropDownList"); HtmlSelect minPrice = Find.ById<HtmlSelect>("MinDropDownList"); maxPrice.SelectByText("$5,000,000"); minPrice.SelectByText("$2,000,000"); Find.ByContent<HtmlAnchor>("Prewar 8 Off Fifth Avenue").Click(); ActiveBrowser.GoBack(); Find.ByContent<HtmlAnchor>("Price").Click(); maxPrice.AssertSelect().SelectedText("$5,000,000"); minPrice.AssertSelect().SelectedText("$2,000,000");}

6) Desde el código, puedo evitar claramente las esperas y las demoras, con algunos de los marcos, pero tendré que pasar más tiempo para ver si WatiN es adecuado para mí.


WebAii tiene un método WaitForElement (s) que le permite especificar los parámetros de los elementos a esperar.