DescriptProgramação em QTP/UFTDinâmico e Estático
⚡ Resumo Inteligente
Descriptprogramação ive permite um QTP or UFT Uma declaração carrega a própria descrição do objeto, como pares de valor de propriedade ou como um Descriptobjeto ion, portanto, uma etapa é executada mesmo quando o objeto nunca foi armazenado no Repositório de Objetos.
O que é a Descriptprogramação?
Descriptprogramação iva é usado para executar operações em um objeto no AUT cuja definição não está armazenada no Repositório de ObjetosUtilizando esse mecanismo, você pode ignorar a identificação do Repositório de Objetos e fornecer o Objeto. Descriptna própria declaração.
O nome de um objeto é simplesmente usado para mapear um objeto em um script com sua descrição em um repositório de objetos. Isso significa que, se você alterar o nome do objeto tanto no script quanto no repositório de objetos, o script ainda deverá ser executado. Assista ao vídeo a seguir para entender melhor esse conceito.
Clique aqui. se o vídeo não estiver acessível
Destaques Vídeo
- Exclua o objeto DescriptA operação consiste em remover o nome do agente da caixa WinEdit do Repositório de Objetos. Se você executar o teste novamente, ele falhará, pois não consegue reconhecer o objeto. Vamos examinar o motivo da falha do script.
- Durante o tempo de execução, UFT Identifica-se a operação realizada na caixa WinEdit e o objeto. DescriptA identidade no Repositório de Objetos é armazenada como Nome do Agente. Ela usa esse nome para track o objeto no repositório de objetos. Para um objeto pai, você não pode ter dois objetos filhos com o mesmo nome, portanto QTP mapeia o objeto de forma única no repositório. Em seguida, utiliza a descrição armazenada no Repositório de Objetos, substitui o nome pela descrição e usa a instrução resultante para identificar o objeto no aplicativo em teste.
- Como, no nosso caso, havíamos excluído completamente a descrição desse objeto, o script falha.
- Mas e se, em vez de QTP Ao substituir a descrição do objeto, você, como testador, especifica diretamente as descrições dos objetos em seu script? Isso nada mais é do que "DescriptProgramação iva”
Essa simples mudança de responsabilidade é o que os dois formulários abaixo implementam, e cada formulário se adequa a um tipo diferente de roteiro.
Tipos de DescriptProgramação iva
Você pode usar Descriptprogramação iva de duas maneiras
- Estático
- Dinâmico
Estático DescriptProgramação iva
No Método Estático, para identificação de objeto, você especifica a propriedade de um objeto no seguinte formato
property:=values,
Esse formato é chamado de par propriedade-valor e é delimitado por aspas. Escrita por extenso, uma declaração estática se parece com isto:
TestObject("PropertyName1:=PropertyValue1", "PropertyName2:=PropertyValue2").Method
Se o seu objeto utiliza múltiplas descrições para identificação, você pode especificá-las usando vírgulas.
Portanto, no nosso caso, a descrição do Nome do Agente torna-se
"nativeclass:=Edit", "attached text:=Agent Name:"
As descrições estáticas são lidas no ponto em que a instrução é executada, o que as torna ideais para etapas pontuais e para correções rápidas em um script que você não deseja regravar.
Dinâmico DescriptProgramação iva
O segundo método de fazer a mesma ação é usar Dynamic Descriptprogramação iva
Caso seu script use o candidato a objeto de programação descritiva várias vezes, será muito cansativo especificar todos os pares de valores de propriedade para cada instrução
Nesses casos, você pode fazer uso do DescriptClasse de íons fornecida por QTP
A sintaxe para criar um objeto de descrição é
Set MyDescription = Description.Create() MyDescription("property").Value = "property-value"
Este é o Método Dinâmico.
Preencher esse objeto com as propriedades do Nome do Agente usadas acima fornece uma descrição completa e reutilizável:
Dim oDesc Set oDesc = Description.Create() oDesc("nativeclass").Value = "Edit" oDesc("attached text").Value = "Agent Name:"
A variável oDesc Agora pode ser passado para qualquer instrução que precise desse objeto, de modo que uma única edição atualiza todas as etapas que o utilizam.
Estático vs Dinâmico DescriptProgramação dinâmica: quando usar cada
Ambas as formas produzem a mesma descrição em tempo de execução, portanto a escolha diz respeito à manutenção e não à capacidade.
| Critérios | Estático (em linha) | Dinâmico (Descriptobjeto de íon) |
|---|---|---|
| Como a descrição é escrita | Pares de valores de propriedade digitados dentro da chamada do objeto de teste | Propriedades adicionadas a um objeto criado com Description.Criar() |
| armadilha para peixes | Repetido em todas as declarações que precisam do objeto. | Armazenado em uma variável e passado para onde for necessário. |
| legibilidade | Frases curtas permanecem legíveis; frases longas tornam-se difíceis de manejar. | Linhas de configuração adicionais, mas a declaração em si permanece concisa. |
| Alterações em tempo de execução | Os valores são fixos, a menos que sejam concatenados a partir de variáveis. | Os valores das propriedades podem ser reatribuídos antes de cada utilização. |
| Funciona com objetos filhos | Não, o argumento do filtro deve ser um Descriptobjeto de íon | Sim, este é o formulário necessário. |
| Melhor adequado para | Uma ou duas etapas em um objeto que não está no repositório. | Objetos usados repetidamente ou coleções recuperadas em tempo de execução. |
Por que usar Descriptprogramação?
A transcrição abaixo acompanha a demonstração em vídeo de um cenário real onde a quantidade de objetos não pode ser conhecida antecipadamente.
Transcrição de vídeo
- A pergunta de um milhão de dólares é: por que usar DP quando o processo de identificação de objetos é tratado por... QTP
- Imagine que você foi designado para testar um portal de empregos. Você insere uma consulta de pesquisa no portal e o teste espera que você selecione todas as vagas disponíveis e clique em "Candidatar-se à vaga".
- Mas o número de vagas exibidas dependerá da consulta de pesquisa e das vagas disponíveis no momento da execução do script, e não há como prever antecipadamente a quantidade de vagas que serão exibidas.
- Nesses casos, você pode usar programação descritiva. Mesmo que você não saiba o número e os nomes das caixas de seleção, você sabe a classe dos objetos como “WebCheck”.Box"
- Você pode usar o Método ChildObjects para retornar objetos pertencentes a um pai específico
- Uma linha de código como –
Set allObjects = Browser("Jobs").Page("QTP").ChildObjects()
retornará todos os objetos filhos desta página.
- Mas queremos apenas WebCheckBox objetos. Para isso, podemos criar um objeto de filtro e definir sua propriedade para a classe de caixa de seleção da web e, em seguida, passar esse filtro como argumento para o método ChildObjects.
- Neste caso, apenas as caixas de seleção são retornadas.
- Em seguida, você pode escrever um código como este, que acessa toda a coleção de caixas de seleção a partir de zero e marca todas as caixas de seleção como ATIVADAS.
- Em seguida, você pode clicar no botão Aplicar para concluir o teste
- Você também pode usar Descriptive Programação para executar objetos que são difíceis de gravar, como painéis de ocultação automática, objetos com hierarquias mutáveis, objetos internos aninhados, submenus.
- Você também pode fazer manipulações avançadas de strings usando programação descritiva
- Em conjunto com a propriedade de índice, a programação descritiva pode ser muito útil na identificação de objetos difíceis.
- Se você usar descrição programática para um objeto em uma hierarquia de objetos, precisará usar programação descritiva para os objetos filhos subsequentes.
- Por exemplo, se a programação descritiva foi usada para o objeto Page, mas o objeto filho subsequente WinEdit veio do Repositório de Objetos, a declaração está incorreta.
- Pelo contrário, quando a programação descritiva é usada tanto para o objeto Page quanto para o objeto WinEdit, a afirmação está correta.
Por extenso, o filtro e o loop descritos na transcrição ficam assim:
Dim oFilter, allCheckBoxes, i Set oFilter = Description.Create() oFilter("micclass").Value = "WebCheckBox" Set allCheckBoxes = Browser("Jobs").Page("QTP").ChildObjects(oFilter) For i = 0 To allCheckBoxes.Count - 1 allCheckBoxes(i).Set "ON" Next
A coleção é baseada em zero, razão pela qual o loop para em Contagem – 1Como o filtro é avaliado quando a linha é executada, o mesmo código funciona independentemente de a pesquisa retornar três ou trinta trabalhos.
Expressões regulares, identificadores ordinais e armadilhas comuns
DescriptA programação dinâmica se comporta de duas maneiras que surpreendem a maioria das pessoas na primeira vez em que uma instrução falha sem motivo aparente.
1) Cada valor de propriedade é tratado como uma expressão regular. Uma legenda como Total (USD) Portanto, não há correspondência, porque os parênteses contêm sintaxe de expressão regular. Escape-os com uma barra invertida ou desative a avaliação de expressões regulares para essa propriedade em um arquivo. Descriptobjeto íon:
Set oDesc = Description.Create() oDesc("name").Value = "Total (USD)" oDesc("name").RegularExpression = False
2) Identificadores ordinais desempatam. Quando uma descrição ainda corresponder a mais de um objeto, adicione índice, local or tempo de criação como uma propriedade adicional. A contagem do índice começa em zero:
WebEdit("name:=userName", "html tag:=INPUT", "index:=0").Set "guru99" WebEdit("name:=userName", "html tag:=INPUT", "index:=1").Set "guru99"
Três outros problemas que vale a pena verificar antes de começar a depurar o aplicativo:
- Uso classe de microfone, não o rótulo Nome da classe Exibido no Object Spy. O nome de exibição não é uma propriedade válida em uma descrição.
- Os nomes das propriedades não diferenciam maiúsculas de minúsculas, mas devem ser escritos exatamente como a tecnologia os reporta, incluindo o espaço. texto anexado e tag html.
- DescriptA programação dinâmica ignora o repositório; ela não melhora o reconhecimento de objetos. Se o complemento correto não estiver carregado, nenhuma descrição tornará o objeto identificável.
