Descobrindo o estado dos navegadores

Ao gravar scripts de teste funcional, se achar que alguns controles não foram selecionados pela gravação, é possível verificar se o navegador usado durante a gravação estava em um estado pronto para a gravação. Da mesma forma, se encontrar problemas durante a reprodução, será possível verificar o estado do navegador. É possível adaptar a API dinâmica find() e usar o método Html.HtmlBrowser para esse propósito.

Esse exemplo mostra como adaptar a API dinâmica find() e usar o método Html.HtmlBrowser para verificar o estado do navegador durante a gravação ou a reproduçao.

	public void testMain(Object[] args) 
	{
		//Essa amostra verifica se o Navegador está em estado pronto ou não.
		// para executar esse script, inicie uma instância única do navegador Internet Explorer ou Mozilla Firefox.

		startBrowser("http://www.google.com");
		sleep(5);
		// Verificando a classe do Navegador e quando ela for encontrada, retorna para o Test Object
		TestObject[]  to = find(atChild(".class", "Html.HtmlBrowser"));
		// Localizando um ou mais Objetos de Teste
		if(to.length > 0)
		{
			// Executando o cast no BrowserTestObject
			BrowserTestObject bto = (BrowserTestObject)to[0];

			//Esperando o navegador ficar pronto 
			// parâmetro, objeto de teste do navegador, estado do navegador, tempo limite& atraso em segundos
			boolean isBrowserReady = waitForBrowserTobeReady(bto, 4, 240, 10);
			if(isBrowserReady)
			{

				// Executando uma operação de salvamento and e salvando o objeto retornado na matriz in the TestObject.
				TestObject[] googleButton =  bto.find(atDescendant(".class" ,"Html.INPUT.submit",".value","I'm Feeling Lucky"));

				if(googleButton.length ==0 )
				{
					System.out.println("None found");
					return;
				}
				//Clique no primeiro objeto de teste achado.
				((GuiTestObject)googleButton[0]).click();

			}
			else
			{
				System.out.println("Browser didn't come to ready State");
			}
			unregisterAll();


		}
		else
		{
			System.out.println("No browser instance found");
		}
	}

	/*
	 * 
	 * waitForBrowserTobeReady
	 * param : 
	 * Esse método espera o navegador chegar no estado readyState dentro de um período de tempo específico
	 * BrowserTestObject as bto
	 * readyState as 4
	 * timeout as 120 seconds
	 * delay as 10 seconds
	 */

	static boolean waitForBrowserTobeReady(BrowserTestObject bto, int readyState, int timeout, int delay)
	{
		//Verifica se o navegador está pronto
		boolean isBrowserReady = false;

		// Número de tentativas com um atraso
		int noOfTries = timeout/delay;

		for(int i=0; i < noOfTries; i++)
		{
			try
			{

				//Possível .readyState valores de propriedades para o navegador
				// 0 - Não inicializado
				//1,2 - CARREGANDO
				//3 - CARREGADO
				//4 - HABILITAR/VISÍVEL/PRONTO
				int browserState = ((Integer)(bto.getProperty(".readyState"))).intValue();
				if(browserState >= readyState)
				{
					isBrowserReady = true;
					break;
				}
			}
			//Captura a exceçao, se houver
			catch (Exception e)
			{
				break;
			}
			sleep(delay);
		} 
		//Retorna bem sucedido se o estado da propriedade navegador pronto for true
		return isBrowserReady;
	}
}

Feedback