Ao automatizar processos em um ambiente web, dependendo da estrutura do site, estão disponíveis diversos locators, que são caminhos para determinado elemento na página, como caixas de texto e botões. Por exemplo, esses identificadores podem ser o id, name, cssSelector ou até o caminho (xpath) para o elemento.
Para aplicações desktop no Windows, uma das formas de encontrar os localizadores é usando o programa Accessibility Insights. Nele são mostrados valores como nome, tipo de item, id, entre outros, que podem ser usados para detectar e interagir com as partes do programa. Porém, nesse ambiente os localizadores podem não estar disponíveis para fazer a automatização do processo. Então, o que fazer nesse cenário? Serão citados aqui alguns exemplos de soluções alternativas para quando não há acesso aos identificadores dos componentes em programas desktop.
Copiar e colar
O clipboard – ou a área de transferência – é muito útil quando é possível copiar o conteúdo da janela de um programa. Em algumas aplicações para desktop se pode copiar o texto que aparece em caixas de diálogo, por exemplo.
Assim, para verificar se uma sequência de passos produziu um resultado correto, basta copiar esse resultado, armazená-lo e o comparar com o que é esperado, e a partir daí executar as ações que dependem dessa informação.
Dessa forma, apenas se o conteúdo em si mudar é que a automação do processo deixará de funcionar, e alterações na disposição dos elementos não farão diferença.
Porém, nem sempre dá para copiar o que está visível na tela, mas existem outras opções para capturar o conteúdo apresentado, como demonstrado a seguir.
Use OCR
OCR é um acrônimo para Optical Character Recognition (em português, Reconhecimento Ótico de Caracteres). É uma tecnologia que possui a capacidade de extrair textos de imagens.
Imagine que existe uma janela com uma lista de itens, e o seu robô precisa clicar em um item específico dessa lista de acordo com o conteúdo dele. Porém, não é possível passar o nome ou o id, por exemplo, deste item da lista para o robô, porque não há identificador para ele.
Existem tecnologias para desenvolver RPA que possibilitam “ler” o conteúdo que está visível na tela. Como a Sikuli Library, uma biblioteca para o Robot Framework, que faz reconhecimento de imagens e textos. Usando essa biblioteca, é possível clicar diretamente no texto que se deseja, no caso, existe uma palavra-chave específica para isso, a “Click Text”, que vai buscar em toda a tela este texto, e clicar no local onde ele aparece.
Porém, existem alguns problemas com essa abordagem, como: o que acontece se o texto se repete? E se o estilo da fonte dificultar a leitura do mesmo? E dependendo da quantidade de conteúdo escrito e tamanho da fonte, pode haver um delay maior para que o texto seja encontrado.
Assim, para mitigar esses problemas, uma solução é limitar a área onde o texto será buscado. Isso pode ser feito definindo as coordenadas da região que o texto é esperado. Na biblioteca citada, também é possível ler o texto somente da área especificada. Isso pode ser útil para verificar se o resultado obtido de alguma ação é o mesmo do esperado.
Capture a tela e interaja com ela
A biblioteca que foi mencionada anteriormente, a Sikuli Library, tem a capacidade de reconhecer os componentes que estão visíveis na tela, ou seja, não somente textos, mas também imagens.
Para isso, é preciso guardar as imagens que representam os elementos no diretório em que a biblioteca irá buscá-los. Então, durante a execução do RPA, estas imagens serão comparadas com o que está sendo mostrado na tela no momento. Dessa forma, é possível armazenar o screenshot de um botão, e passar o nome desse arquivo como argumento para a keyword – ou palavra-chave – que o utilizará ao interagir com o botão, por exemplo.
Relembrando o exemplo do tópico anterior, onde o robô deveria clicar em um item de lista de acordo com o texto que está nele, o que aconteceria se houvesse muitos elementos nesta lista e fosse necessário descer a barra de rolagem para encontrar determinado elemento? Uma das possibilidades é utilizar essa tecnologia de reconhecimento de imagens para clicar e arrastar essa barra de rolagem, por exemplo. A medida que o conteúdo da tela muda, uma nova verificação é feita, a fim de se encontrar o item procurado.
Outro exemplo de uso pode ser verificar se a aplicação a ser automatizada já está aberta, assim o reconhecimento de imagens pode ajudar a examinar se o ícone está visível na barra de tarefas do sistema operacional, indicando assim, que não é necessário executar o programa novamente.
Como se pode ver, as aplicações dessa forma de interação com a tela são numerosas, apenas porém, cabe o cuidado com as mudanças que a interface gráfica pode apresentar. Identificar os elementos por imagens pode tornar a automatização sensível, visto que qualquer mudança na aparência desses componentes, pode impossibilitar o reconhecimento dos mesmos e “quebrar” o robô.
Pegue um atalho
Quando o objeto disponibiliza um atalho para acessá-lo, isso pode diminuir a complexidade do seu RPA. Como no caso de um dos passos do robô ser clicar em um item de um menu, em vez de usar o reconhecimento de imagens, por exemplo, onde seria necessário armazenar um screenshot do item, compará-lo como o menu na tela e então clicar no componente encontrado, seria mais interessante usar o atalho fornecido pelo próprio sistema a ser automatizado.
Essa abordagem pode tornar a execução do RPA mais rápida, visto que há menos passos para produzir o resultado que também poderia ser alcançado das outras formas exploradas no texto.
Qual abordagem escolher?
Como se pode ver, há diversas formas de lidar com a ausência de identificadores para os itens em janelas de programas. Assim, o que é necessário fazer é analisar as limitações do processo que está sendo automatizado, para então escolher uma forma de interagir com a tela. Geralmente, a solução envolve usar mais de uma das abordagens mostradas.
Para saber mais sobre automação de processos robóticos, você pode ler o artigo anterior: RPA é lindo e funciona! Mas e quando dá erro?