• Nenhum resultado encontrado

Teste do Conte udo Din^amico de Componentes Web

Na sec~ao anterior, mostramos a operac~ao de transformac~ao de tipo que testa um compo- nente Web baseado a partir de um tipo WSat. Como e visto na sec~ao sobre denic~ao de tipos, os tipos WSat s~ao utilizados para descrever propriedades que componentes Web devem satisfazer. Quando os componentes Web s~ao estaticos, como paginas HTML ou imagens escritas em arquivos estaticos, e poss vel descrever detalhadamente o conteudo que eles possuem em tipos WSat. No caso de componentes din^amicos como, por exem- plo, paginas Web geradas a partir de Servlets ouscriptsPerl, partes importantes de seu conteudo s~ao criadas dinamicamente. De fato, uma mesma pagina Web din^amica pode apresentar informac~oes diferentes dependendo dos valores de entrada passados para a mesma. Um exemplo disto e a pagina de resposta do sistema de busca, que apresentam

links para outras paginas dependendo das palavras chave utilizadas.

Podemos testar o conteudo de paginas din^amicas, como por exemplo, a de resposta do sistema de busca, denindo-se um tipo WSat para cada possibilidade de resposta desta pagina a ser testada. Se quisermos testar a pagina de resposta do sistema de

busca para as palavras chave \ufpe" e \pernambuco" individualmente, por exemplo, podemos criar os tipos vistos a seguir.

PagResposta PagRespostaPalavraChaveUFPE { Text numRespEncontradas {

value = "Foram encontradas 3 respostas." } WebLink linkUFPE { url = "http://www.ufpe.br" } ... } PagResposta PagRespostaPalavraChavePernambuco { Text numRespEncontradas {

valur = "Foram encontradas 5 respostas." }

WebLink linkPernambuco {

url = "http://www.pernambuco.gov.br" } ...

}

Os tiposPagRespostaPalavraChaveUFPEePagRespostaPalavraChavePernambucopo- dem ser usados na operac~ao de transformac~ao de tipo, vista anteriormente, para validar as respostas do sistema de busca de acordo com a palavra chave utilizada. Esta forma de teste, alem de se mostrar bastante trabalhosa, inviabiliza uma poss vel parametri- zac~ao do caso de teste. Tambem mostramos a vericac~ao do numero de respostas de forma xa, podendo esta porem ser feita atraves de casamentos de padr~oes formados por express~oes regulares, como veremos mais adiante. Por estes motivos, foram denidos servicos especiais para testes em componentes Web din^amicos nos tipos predenidos em WSat. Podemos, por exemplo, vericar a exist^encia do componente texto que representa o numero de respostas encontradas na pagina de resposta do sistema de busca atraves do codigo mostrado a seguir.

Text texto =

pagResposta.findTextByValue("Foram encontradas 3 respostas.") Ao manipular um componente do tipo WebPage, podemos utilizar o seu servico find- TextByValue. Este servico recebe como par^ametro um texto e retorna o componente que o representa na pagina Web manipulada. Caso n~ao exista tal componente, este metodo faz com que a execuc~ao do caso de teste falhe. Existe um conjunto de servicos nos tipos WSat predenidos que s~ao utilizados para teste similarmente ao sevico ja apresenta- do. Exemplos destes servicos s~ao os servicos findWebLinkByName, findWebLinkByURL efindImageBySrc, que variam tanto no tipo do componente que presta o servico como no tipo de argumento e de retorno do servico.

Componentes Web em uma mesma pagina Web podem possuir as mesmas carac- ter sticas. Por exemplo, podemos colocar na pagina de resposta do sistema de busca duas imagens de propaganda com links para o site de um determinado cliente, como visto a seguir.

...

<a href="http://www.cliente.com.br">

<img src="imagens/banner1Cliente.jpg"></a> ... <a href="http://www.cliente.com.br">

<img src="imagens/banner2Cliente.jpg"></a> ...

Como podemos notar, esteslinksde mesma URL n~ao possuem nome, denido pelo atri- butonamedo seu marcador HTML. Desta forma, n~ao podemos acessar individualmente os componentes que os representam atraves do servico findWebLinkByName. Utilizando ent~ao o servico findWebLinkByURL nesta pagina, este servico so ira retornar o com- ponente que representa o primeiro link encontrado. Para ter acesso a componentes em uma mesma pagina Web que possuem as mesmas caracter sticas, podemos utilizar um conjunto de servicos semelhantes aos mostrados anteriormente, porem que retor- nam todos os componentes com as caracter sticas indicadas. Por exemplo, o servico findAllWebLinkByURLutilizado na pagina de resposta do sistema de busca, como vis- to no codigo a seguir, retorna o array com os dois componentes da pagina Web que representam os linkspara o site do cliente.

WebLink] webLinks =

pagResposta.findAllWebLinkByURL("http://www.cliente.com.br") A partir do array retornado, podemos percorr^e-lo como visto em sec~ao mais adiante invocando o servicofindWebImageBySrcde cadalink encontrado para testar se ele esta realmente atuando sobre a imagem do cliente.

Em certos casos, podemos estar interessados em acessar um valor texto gerado dina- micamentepela pagina Web. Por exemplo, podemos querer testar o numero de respostas retornadas pelo sistema de busca. Este numero esta representado por um componente texto. Entretanto, n~ao podemos utilizar o servico findTextByValue, pois o que que- remos encontrar e justamente o valor do texto. Para estes casos, podemos utilizar o servicofindTextByRegularExpression, como visto a seguir.

String] textoResp = resp.findTextByRegularExpression(

"Foram encontradas (\d{1,2}) respostas") Este servico recebe como par^ametro umaStringcontendo um padr~ao de texto em for- ma de express~ao regular (Pattern Matching) compat vel com a linguagem Perl5 5]. O padr~ao denido pela express~ao regular vista acima casa com textos que comecam com \Foramencontradas", seguidos de um numero de um a dois d gitos \1,2." equeterminam com \respostas". Os par^enteses vistos s~ao marcadores de grupos que indicam valores que queremos acessar. No exemplo, os par^enteses utilizados marcam um grupo contendo o numero de respostas retornado. A execuc~ao do servicofindTextByRegularExpression tenta casar a express~ao regular indicada com textos contidos na pagina Web. Este ser- vico retorna um arraycontendo o valor casado para cada grupo denido. No caso, sera retornado um array de uma posic~ao contendo o numero de respostas retornadas pelo sistema de busca como, por exemplo, aString\3"para o caso de retornar tr^es respostas. Caso o servico n~ao consiga efetuar nenhum casamento de padr~ao, o servico retorna um

array vazio. Caso a pagina Web possua mais de uma ocorr^encia do padr~ao, podemos 57

utilizar o servicofindAllTextByRegularExpression, o qual retorna umarraydearrays que cont^em o valor casado de cada grupo para cada casamento de padr~ao efetuado.

Os tipos predenidos em WSat, como por exemplo, WebPage e WebLink, possuem propriedades dos tipo String ou primitivos de Java. Podemos vericar estas proprie- dades atraves o comando assert. O codigo visto a seguir testa se uma das paginas retornadas pelo sistema de busca, referenciada pela variavelpaginaEncontrada, possui o codigo de retorno 200 indicando que o link para a mesma na pagina de resposta n~ao esta quebrado.

assert("Link de resposta quebrado.", paginaEncontrada.codigo, 200) Como podemos notar, este comando recebe tr^es par^ametros. O primeiro deles, do tipo String, e uma mensagem a ser utilizada no caso de falha do teste. Os par^ametros seguintes representam respectivamente o valor esperado e o valor encontrado de uma propriedade testada. Estes par^ametros devem ser do mesmo tipo, podendo eles serem dos tipos primitivos de Java ou do tipoString. Este comando compara o valor esperado com o valor encontrado recebidos, causando uma falha na execuc~ao do caso de teste caso estes valores sejam diferentes. Outra forma de realizar o mesmo teste e atraves do comando fail, como visto no codigo a seguir.

if (paginaEncontrada.codigo != 200) { fail("Link de resposta quebrado.") }

O comando fail causa uma falha na execuc~ao do caso de teste. Este comando recebe como par^ametro uma Stringcontendo o motivo da falha de execuc~ao.