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.

  • 🔘 Ignora o repositório: A descrição é transmitida internamente na instrução, portanto, nenhum nome de objeto precisa ser procurado em tempo de execução.
  • ☑️ Forma estática: Os pares de valor da propriedade são escritos em linha como “propriedade:=valor”, separados por vírgulas dentro da chamada do objeto de teste.
  • ✅ Formulário dinâmico: Description.Create cria uma coleção de propriedades reutilizáveis ​​que podem ser compartilhadas por várias instruções.
  • 🧪 Projetado para objetos imprevisíveis: Ocultar automaticamente painéis, alterar hierarquias, objetos internos aninhados e conjuntos de resultados de tamanho desconhecido.
  • 🛠️ ChildObjects emparelha com ele: A DescriptO objeto ion usado como filtro retorna apenas os filhos correspondentes de um objeto pai.
  • 📌 Duas regras para lembrar: Cada valor de propriedade é tratado como uma expressão regular e, uma vez que você descreve um elemento pai, você deve descrever também seus filhos.

Instruções de programação descritiva estáticas e dinâmicas em QTP e UFT completa

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

  1. Estático
  2. 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.

Perguntas Frequentes

ponto Espião de objetos Acesse o controle e leia suas propriedades de identificação ou chame GetROProperty em tempo de execução. Copie os nomes exatamente como estão listados, lembrando que o Object Spy exibe micclass sob o rótulo Nome da Classe.

Normalmente não. Uma consulta ao repositório resolve uma descrição armazenada apenas uma vez, enquanto uma instrução descrita é avaliada a cada execução da linha. A vantagem da programação descritiva é a flexibilidade em relação a objetos imprevisíveis, e não a velocidade bruta.

Construa o futuro dos dados Descriptobjeto ion dentro de uma função reutilizável e mantenha essa função em um VBScript Biblioteca de funções associada ao teste. Qualquer ação que carregue a biblioteca pode então chamá-la, portanto, uma edição atualiza todas as funções que a chamam.

A identificação assistida por IA relaciona os controles pela aparência visual e pelo texto da etiqueta próxima, em vez de propriedades fixas, o que elimina algumas descrições manuscritas. DescriptOs íons ainda são necessários quando os objetos são contados ou filtrados em tempo de execução.

O Copilot pode servir de estrutura para os circuitos, DescriptO ion.Create faz chamadas e gera relatórios com base em uma descrição, mas não consegue ver sua aplicação. Cada nome de propriedade e valor sugerido precisa ser confirmado em relação ao controle real antes que a declaração seja considerada confiável.

Raramente. Um repositório de objetos compartilhados Mantém as descrições em um único local editável e facilita a leitura dos scripts. A maioria das equipes mantém as telas estáticas no repositório e só utiliza as descrições quando os objetos são dinâmicos.

Reduza a lista a uma única propriedade e, em seguida, adicione as outras de volta uma de cada vez. Verificar a contagem de objetos com um filtro `ChildObjects` mostra se a descrição não corresponde a nada ou se corresponde a vários objetos de forma ambígua.

Sim. Funciona para qualquer tecnologia cujo complemento esteja carregado, incluindo a versão padrão. Windows, web, .NET, Java e objetos do emulador de terminal. Apenas os nomes das propriedades diferem, já que cada complemento reporta suas próprias propriedades de identificação.

Resuma esta postagem com: