 | Nível: Introdutório Prakash Dewan, Systems Software Engineer, IBM
25/Jun/2009 Este artigo vai mostrar a você como usar o IBM Rational Functional Tester para automatizar objetos agrupados dentro de células de tabela HTML mantendo as células especificadas para referência. Vai ajudar você a automatizar as operações relacionadas a esses objetos.
Estrutura da tabela HTML e objetos incluídos
Uma tabela HTML é uma coleção de várias tags <TR> (table row). Cada tag <TR> contém múltiplas tags <TD> (table definition), cada uma das quais corresponde a uma célula. Todas essas tags <TR> e <TD>, juntas, podem ser incluídas em uma tag <TBODY> (table body). A Figura 1 mostra essa estrutura.
Figura 1. Estrutura de tags da tabela HTML
As tabelas HTML são parte integrante dos aplicativos da Web e variam de estruturas simples a complexas. Elas podem conter objetos dentro de suas células, como campos de texto, caixas de seleção, botões de opções, botões de apertar, imagens, listas selecionadas, e assim por diante, como mostrado na Figura 2.
Figura 2. Objetos incluídos nas células da tabela HTML
Se você examinar o código de origem da página da Web apresentada na Figura 2, cada objeto está encerrado entre as tags de abertura (<TD>) e fechamento (</TD>), em outras palavras, incluído na célula da tabela.
Identificando os objetos incluídos
Por padrão, o recurso IBM® Rational® Functional Tester Test Object Inspector identifica um campo de texto que incluído em uma célula da tabela, com a hierarquia-pai, como mostrado na Figura 3. O campo de texto não terá nenhuma referência à célula de tabela que o encerra e será mostrado como filho direto da tabela HTML.
Figura 3. Hierarquia-pai padrão
Por padrão, não é possível ver os objetos das classes Html.TBODY, Html.TR e Html.TD, porque elas não são objetos mapeáveis para RFT. É possível vê-los na hierarquia de objeto selecionando Opções e desmarcando a opção Ocultar não mapeáveis (veja a Figura 4).
Figura 4. Desmarcar a opção “Ocultar não mapeáveis”
Depois de desmarcada essa opção, o Test Object Inspector identificará um campo de texto incluído em uma célula da tabela HTML como filho do objeto de classe TD, em vez de identificar a tabela HTML diretamente (Figura 5).
Figura 5. Objeto incluído como filho do elemento TD
No Rational Functional Tester, trabalhar com os objetos incluídos nas células da tabela relativas à linha e à coluna (ou seja, à célula da tabela) não é tão simples quanto trabalhar com esses objetos sem nenhuma referência à célula.
Operações nos objetos incluídos com referência a células da tabela
É possível executar inúmeras ações ou operações nos objetos encerrados em uma célula da tabela HTML. Durante a automação, você pode encontrar oportunidades frequentes para automatizar cenários envolvendo operações em objetos contidos em células de tabela HTML com referência a linha e coluna (ou seja, célula).
Essas operações incluem estes exemplos:
- Determinar o valor de um campo de texto na
Linha 3, Coluna 4, ou Célula(3, 4), de uma tabela HTML
- Selecionar uma opção em uma caixa de listagem na
Linha 5, Coluna 2, ou Célula(5, 2)
- Clicar em um botão de opções na célula de tabela especificada
- Determinar o estado de uma caixa de opção (por exemplo, marcada ou não) em uma célula de tabela especificada
- Clicar em um botão ou imagem em uma célula de tabela especificada
Além de executar essas ações nos objetos, é possível aplicar a mesma solução para extrair ou gerar a saída das propriedades do objeto. Também é possível implementar verificação de estado e propriedades de objeto.
Solução em três etapas
Há três etapas necessárias para automatizar as operações nos objetos encerrados nas células da tabela HTML usando o Rational Functional Tester:
- Localizar e determinar o objeto de uma célula de tabela HTML usando o método
find(), baseado em índices de linha e coluna.
- Usar o objeto de célula, localizar o objeto incluído sobre o qual se deve executar a ação (por exemplo, caixa de texto, botão, e assim por diante).
- Executar a ação necessária (por exemplo, clicar, selecionar, extrair propriedade, e assim por diante) no objeto.
As etapas a seguir mostram como essa solução em três etapas funciona. Este exemplo determina o valor de uma caixa de texto incluída em uma célula da tabela.
Passo 1. Localizar um objeto de uma célula da tabela HTML
Supondo que tableObj é o objeto da tabela HTML da classe TestObject, use um código semelhante ao apresentado na Listagem 1.
Listagem 1. Localizar uma célula da tabela HTML
TestObject cellObj = tableObj.find(atList(
atChild(".class" , "Html.TBODY"),
atChild(".class" , "Html.TR",".rowIndex", rowIndex),
atChild(".class" , "Html.TD",".cellIndex",colIndex)
), false)[0];
|
Este código emprega a capacidade do método find() junto com os métodos atList() e atChild() para obter um objeto de uma célula da tabela HTML especificado pelos índices de linhas e colunas. O segundo parâmetro com o valor false especifica que o objeto que você está localizando não é um objeto mapeável.
Passo 2. Localizar o objeto incluído na célula
Para obter um objeto incluído em uma célula da tabela (por exemplo, uma caixa de texto), use um código semelhante ao apresentado na Listagem 2.
Listagem 2. Localizar um objeto incluído
TestObject cellTxtObj = cellObj.find(atDescendant(".class","Html.INPUT.text"))[0];
|
Se houver mais de um objeto do mesmo tipo em uma célula (por exemplo, duas ou mais caixas de texto na mesma célula), use o índice de classe para identificar o objeto necessário. Partindo da premissa que objIndex é o índice da classe do objeto em que você está interessado na célula, é possível obter o objeto por meio da abordagem mostrada na Listagem 3.
Listagem 3. Identificar o objeto
TestObject cellTxtObj = cellObj.find(atDescendant(".class","Html.INPUT.text"))[objIndex];
|
Passo 3. Executar as ações no objeto incluído
Quando o método find() no Passo 2 retorna um TestObject, é necessário atribuí-lo a uma classe que seja relevante ao objeto de modo que seja possível executar as ações necessárias. Na Listagem 4, cellTxtObj é categorizado como TextGuiTestObject para executar o método setText().
Listagem 4. Atribuir um objeto a uma classe
((TextGuiTestObject)cellTxtObj).setText(txtValue);
|
A solução para localizar e configurar os objetos HTML
Você pode usar a implementação que a Listagem 5 mostra para localizar quaisquer objetos HTML incluídos em uma célula da tabela HTML. Depois da localização e configuração dos objetos, execute neles quaisquer operações que sejam necessárias.
Listagem 5. Código de solução
/* Este método retornará um objeto da classe HTML especificado, dentro de uma
célula da tabela
* @return TestObject: Objeto do elemento de HTML quebrado ou nulo (caso o objeto
não seja encontrado)
* @param tableObj: to objeto da tabela da web de interesse
* @param rowIndex: o índice da linha da célula de interesse (começando do 0)
* @param colIndex: o índice da coluna da céluola de interessel (começando do 0)
* @param htmlClass: a classe de HTML do objeto quebrado na célula
* @param classIndex: a classe de HTML do objeto quebrado na célula
*/
public TestObject childObject(TestObject tableObj, int rowIndex, int colIndex,
String htmlClass, int classIndex)
{
TestObject cellObj = tableObj.find(atList(
atChild(".class" , "HTML.TBODY"),
atChild(".class" , "HTML.TR",".rowIndex", rowIndex),
atChild(".class" , "HTML.TD",".cellIndex",colIndex)
), false)[0];
TestObject []wrappedObj = cellObj.find(atChild(".class",htmlClass));
if(wrappedObj.length < classIndex + 1)
return null;
else
return wrappedObj[classIndex];
}
|
Exemplos de uso
Os exemplos a seguir (Listagens 6-8) partem da premissa que hTable é um objeto de uma classe que tem o método childObject() definido.
Listagem 6. Selecionando uma caixa de opção na Célula(4,4)
TestObject cellCheckboxObj = hTable.childObject(tableObj,4,4,"Html.INPUT.checkbox",0);
((ToggleGUITestObject)cellCheckboxObj).setState(SELECTED);
|
Listagem 7. Clicando no segundo botão (por exemplo, classIndex 1) na Célula(5,6)
TestObject cellBtnObj = hTable.childObject(tableObj, 5, 6, "Html.INPUT.button", 1);
((GuiTestObject)cellBtnObj).click();
|
Listagem 8. Extraindo a propriedade do valor de uma caixa de texto incluída na Célula(2,2)
TestObject cellTxtObj = hTable.childObject(tableObj, 2, 2, "Html.INPUT.text", 0);
String textBoxValue = cellTxtObj.getProperty(".value").toString();
|
Trabalhando com arquivos de amostra
- Faça download do arquivo developerWorks.zip, que é o projeto de amostra do Rational Functional Tester. (Consulte Downloads).
- Extraia o arquivo compactado na pasta developerWorks.
- Abra o Rational Functional Tester, selecione Arquivo > Conectar-se ao Projeto de Teste Funcional, navegar até a pasta do developerWorks e clique em Concluir. O projeto de teste funcional será aberto no Rational Functional Tester.
- Faça o download e extraia o arquivo SampleHtmlTable.zip, que tem a página da Web de amostra com uma tabela HTML complexa, como mostrado na Figura 2.
- Abra o arquivo dWSample.html no Microsoft Internet Explorer®.
- No Rational Functional Tester, execute dWExample.java em dWSample.html.
O que você aprendeu
Este artigo demonstrou uma abordagem para automatizar os objetos encerrados em uma célula da tabela HTML usando o IBM Rational Functional Tester. Essa abordagem inclui executar ações diferentes nesses objetos e extrair propriedades de objeto que você pode usar para implementar pontos de verificação que você pode definir. É possível usar essa técnica como base para desenvolver soluções aplicáveis às tabelas HTML mais complexas.
Downloads | Descrição | Nome | Tamanho | Método de download |
|---|
| Sample Application | SampleHtmlTable.zip | 2KB | HTTP |
|---|
| Sample Rational Functional Tester Project | developerWorks.zip | 5KB | HTTP |
|---|
Recursos Aprender
-
Aprenda sobre outros aplicativos na IBM Rational Software Delivery Platform, incluindo ferramentas de colaboração para desenvolvimento paralelo e equipes geograficamente dispersas, além de software especializado para gerenciamento de arquitetura, gerenciamento de ativos, gerenciamento de mudança e release, gerenciamento de requisitos integrados, gerenciamento de processo e portfólio, e gerenciamento de qualidade.
-
Visite a Área de software Rational em developerWorks para obter os recursos técnicos e melhores práticas para produtos Rational Software Delivery Plafform.
-
Explore Cursos on-line de Rational baseados em computador, baseados na Web e conduzidos por instrutor. Aprimore suas habilidades e aprenda mais sobre as ferramentas Rational com esses cursos, que vão de introdutório a avançado. Os cursos desse catálogo estão disponíveis para compra de treinamento baseado em computador ou baseado na Web. Além disso, alguns cursos de "Introdução" estão disponíveis sem custo.
-
Assine a newsletter Rational Edge para receber artigos sobre os conceitos por trás do desenvolvimento eficiente de software.
-
Assine a newsletter IBM developerWorks, atualizada semanalmente para receber os melhores tutoriais, artigos, downloads, atividades de comunidade, webcasts e eventos sobre developerWorks.
-
Navegue até a livraria de tecnologia para ver livros sobre estes e outros tópicos técnicos.
-
Explore a página do produto Rational Functional Tester para localizar conteúdo e recursos técnicos para o IBM® Rational® Functional Tester.
-
Novos recursos tornam mais fácil do que nunca testar mais aplicativos usando uma única ferramenta de testes. Para explorá-la, visite Novidades do IBM Rational Functional Tester Versão 8.0
Obter produtos e tecnologias
Discutir
Sobre o autor  | 
|  | Prakash Dewan é membro da equipe de engenharia IBM Cognos nos IBM Software Labs, em Pune, Índia. Além de seus testes de automação usando o Rational Functional Tester, ele trabalha na verificação e validação de vários recursos e funções do produto. Prakash tem mestrado em Aplicativos de Computador e tem grande habilidade em desenvolver estruturas de automação. Ele também tem muita experiência em treinamento de tópicos avançados de testes e contribuiu para vários artigos da base de conhecimento. |
Avalie esta página
|  |