Obrigado a todos que participaram!

Obrigado a todos que participaram!

Resposta padrão!

Aqui segue a resposta padrão com o Selenium IDE.
Este desafio não tinha muita coisa diferente do que já aprendemos, apenas uma "manha"...
Para este desafio era necessário analisar o código HTML e conhecer sobre ele, também é necessário encontrar algum comando no Selenium que posa fazer o trabalho
Primeiro o que todos costumam fazer: gravar o script, ver que os dados demoram um pouco para aparecer e colocar um comando pause, certo? Errado!!! :P

Tente olhar o código fonte para o elemento CEP... voce encontrará o seguinte
<input id="cep" onblur="getEndereco()" maxlength="8" size="9" name="cep"/>
Note que existe um dentro do input o seguite trecho: onblur="getEndereco()"
Se formos avaliarmos o que faz esse onblur descobriremos que ele dispara um evento toda vez que o elemento perde o foco.
Isso quer dizer que toda a vez que o elemento input perde o foco a função getEndereco() é executada. Esse função é responsável por trazer os dados de endereço a partir do CEP informado.
Para que esse evento seja disparado utilizamos a função fireEvent do Selenium, que é responsável por disparar qualquer evento sobre um elemento HTML tento a seguinte sintaxe: fireEvent | elemento | funcao onde função deve estar sem o "on"

Exemplo no desafio: fireEvent | cep | blur

É extramamente importante voces darem uma olhada no seguinte link, que explica o que são estes eventos: http://www.w3schools.com/tags/ref_eventattributes.asp

Apos isso é necessário fazer uma espera por qualquer um dos dados ser preenchido, porque como essa busca de CEP é uma requisição Ajax (assíncrona), não sabemos em quanto tempo ela retorna, e a melhor forma para isso é usar o comando waitForValue | elemento | valor porque queremos esperar por um determinado valor em um determinado campo para continuar o script. O uso do comando pause, mais uma vez, é proibido!!!!

Depois, para o Passo 2 é simples, utilizar o comando waitForValue | elemento | valor onde o valor é vazio.

Exemplo no desafio: waitForValue | cep |

Essa foi a solução que eu queria que vocês chegassem. Outros colaboradores chegaram a soluções muito parecidas, e já vamos visualizá-las mais abaixo.

Download do script (clique com o botão direito e selecione 'Salvar como...')
Vídeo Explicativo

Soluções de outros colaboradores

Desta vez como todas as soluções dos colboradores foram a mesma do resultado final não postarei aqui o script dos colaboradores, mas o do próximo desafio eu postarei :)


O código abaixo foi escrito em Java utilizando o JUnit como suporte ao assertEquals

Os imports foram ignorados. Visualize o código completo neste link (clique com o botão direito e selecione 'Salvar como...')

				  			driver.get("http://eliasnogueira.com/arquivos_blog/selenium/desafio/4desafio/");
		
							WebElement cep = driver.findElement(By.id("cep"));
							cep.sendKeys("01310200");
							
							// dispara o evento onblur do campo cep
							JavascriptLibrary jsLibrary = new JavascriptLibrary();
							jsLibrary.callEmbeddedSelenium(driver, "doFireEvent", cep, "blur");
							
							driver.findElement(By.id("numero")).sendKeys("1578");
							driver.findElement(By.id("complemento")).sendKeys("MASP");
							
							WebDriverWait wait = new WebDriverWait(driver, 10);
							wait.until(ExpectedConditions.textToBePresentInElementValue(By.id("rua"), "Avenida: Paulista"));
							
							// validando os dados que foram preenchidos automaticamente
							assertEquals("Avenida: Paulista", driver.findElement(By.id("rua")).getAttribute("value"));
							assertEquals("Bela Vista", driver.findElement(By.id("bairro")).getAttribute("value"));
							assertEquals("São Paulo", driver.findElement(By.id("cidade")).getAttribute("value"));
							assertEquals("SP", driver.findElement(By.id("estado")).getAttribute("value"));