Mudanças entre as edições de "Expressão regular e XPath"
(→Referências) |
|||
| (8 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
| Linha 3: | Linha 3: | ||
===Introdução=== | ===Introdução=== | ||
| + | Uma expressão regular é uma notação para representar padrões em strings. Serve para validar entradas de dados ou fazer busca e extração de informações em textos. | ||
Provê uma forma concisa e flexível de identificar cadeiras de caracteres de interesse, como caracteres particulares, palavras ou padrões de caracteres. | Provê uma forma concisa e flexível de identificar cadeiras de caracteres de interesse, como caracteres particulares, palavras ou padrões de caracteres. | ||
| − | + | '''Anatomia básica de uma expressão regular''' | |
| − | + | [[Arquivo:expressao.png]] | |
| − | + | ===Tabela de caracteres/estruturas especiais=== | |
| − | ? (interrogação) | + | {| {{table}} class="wikitable" |
| + | | align="center" style="background:#f0f0f0;"|'''Caractere''' | ||
| + | | align="center" style="background:#f0f0f0;"|'''Significado''' | ||
| + | |- | ||
| + | |<nowiki>|</nowiki> (barra vertical) | ||
| + | |Separa alternativas. | ||
| + | |- | ||
| + | |() (parênteses) | ||
| + | |Definir escopo e procedência de operadores. | ||
| + | |- | ||
| + | |? (interrogação) | ||
| + | |Indica que há zero ou uma concorrência do elemento precedente. | ||
| + | |- | ||
| + | |<nowiki>*</nowiki> (asterisco) | ||
| + | |Indica zero ou mais ocorrências do elemento precedente. | ||
| + | |- | ||
| + | |<nowiki>+</nowiki> (adição) | ||
| + | |Indica que há uma ou mais ocorrências do elemento precedente. | ||
| + | |- | ||
| + | |<nowiki>.</nowiki> (ponto final) | ||
| + | |Casa qualquer elemento. | ||
| + | |- | ||
| + | |\b | ||
| + | |Início ou fim de uma palavra. | ||
| + | |- | ||
| + | |\B | ||
| + | |NÃO é início ou NÃO é fim de uma palavra. | ||
| + | |- | ||
| + | |^ | ||
| + | |Início de uma palavra ou linha OU negação quando em uma expressão agrupada (entre []). | ||
| + | |- | ||
| + | |$ | ||
| + | |Fim de uma linha. | ||
| + | |- | ||
| + | |\w | ||
| + | |Caracteres alfanuméricos e underline ([A-Za-z0-9_]). | ||
| + | |- | ||
| + | |\W | ||
| + | |Caracteres não alfanuméricos e underline ([^A-Za-z0-9_]). | ||
| + | |- | ||
| + | |\d | ||
| + | |Coincide apenas dígitos ([0-9]). | ||
| + | |- | ||
| + | |\s | ||
| + | |Coincide qualquer caracter de espaço em branco. | ||
| + | |- | ||
| + | |\S | ||
| + | |Coincide qualquer caracter que não seja de espaço em branco. | ||
| + | |- | ||
| + | |\A | ||
| + | |A coincidência ocorre no primeiro caractere. | ||
| + | |- | ||
| + | |\Z | ||
| + | |A coincidência ocorre no final do último caractere de uma string ou linha (antes de \n). | ||
| + | |- | ||
| + | |\z | ||
| + | |A coincidência ocorre no final do último caractere de uma string, ignorando linhas. | ||
| + | |- | ||
| + | |\G | ||
| + | |A coincidência ocorre a partir do ponto no qual a última coincidência terminou. | ||
| + | |- | ||
| + | |\t | ||
| + | |TAB. | ||
| + | |- | ||
| + | |\n | ||
| + | |Nova linha. | ||
| + | |- | ||
| + | |<nowiki>\</nowiki> | ||
| + | |Quando seguido de um caractere especial das expressões regulares, realiza coincidência daquele caractere. | ||
| + | |- | ||
| + | |{n} | ||
| + | |Coincidência dos caracteres precedidos exatamente n vezes. | ||
| + | |- | ||
| + | |{n,m} | ||
| + | |Coincidência dos caracteres precedidos entre n (número mínimo de repetições) e m (número máximo de repetições) vezes. | ||
| + | Pode-se deixar vazios tanto n ({,m}) quanto m ({n,}), o que causa coincidência apenas com o valor indica. | ||
| + | |- | ||
| + | |[ ] | ||
| + | |Utilizado para agrupamento de expressões. | ||
| + | |- | ||
| + | |[caracteres] | ||
| + | |Coincidência de quaisquer caracteres presentes entre os colchetes. | ||
| + | |- | ||
| + | |[c1-c2] | ||
| + | |Coincidência de quaisquer caracteres alfanuméricos entre c1 e c2 (em order alfabética/numérica). | ||
| + | |- | ||
| + | |.* | ||
| + | |Usado para significar "qualquer coisa". | ||
| + | |- | ||
| + | |} | ||
| − | + | ===Exemplos=== | |
| − | < | + | Por exemplo, para verificar se um dado fornecido é um número de 0,00 a 9,99 pode-se usar a expressão regular <code>\d,\d\d</code>, pois o símbolo \d é um curinga que casa com um dígito. |
| − | + | O verbo casar aqui está sendo usado tradução para match, no sentido de combinar, encaixar, parear. Dizemos que a expressão \d,\d\d casa com 1,23 mas não casa com 123 (falta a vírgula) nem com 1,2c (“c” não casa com \d, porque não é um dígito). | |
| − | === | + | '''\d{5}-\d{3}''' |
| + | |||
| + | O padrão de um CEP como 05432-001: 5 dígitos, um - (hífen) e mais 3 dígitos. A sequência \d é um metacaractere, um curinga que casa com um dígito (0 a 9). A sequência {5} é um quantificador: indica que o padrão precedente deve ser repetido 5 vezes, portanto \d{5} é o mesmo que \d\d\d\d\d. | ||
| + | |||
| + | '''[012]\d:[0-5]\d''' | ||
| + | |||
| + | Semelhante ao formato de horas e minutos, como 03:10 ou 23:59. A sequência entre colchetes [012] define um conjunto. Neste caso, o conjunto especifica que primeiro caractere deve ser 0, 1 ou 2. Dentro dos [] o hífen indica uma faixa de caracteres, ou seja, [0-5] é uma forma abreviada para o conjunto [012345]; o conjunto que representa todos os dígitos, [0-9] é o mesmo que \d. Note que esta expressão regular também aceita o texto 29:00 que não é uma hora válida (horas válidas serão o tema de um dos Exercícios). | ||
| + | |||
| + | '''[A-Z]{3}-\d{4}''' | ||
| + | |||
| + | É o padrão de uma placa de automóvel no Brasil: três letras de A a Z é seguidas de um - (hífen) seguido de quatro dígitos, como CKD-4592. | ||
| + | |||
| + | ===Para aprender=== | ||
| − | + | * https://regexone.com/ ''(em inglês)'' | |
| + | * http://regexr.com/ ''(em inglês)'' | ||
==XPath== | ==XPath== | ||
| Linha 136: | Linha 239: | ||
* [http://www.qualister.com.br/blog/identificando-elementos-com-xpath Qualister] | * [http://www.qualister.com.br/blog/identificando-elementos-com-xpath Qualister] | ||
| + | |||
| + | * [http://intentor.com.br/pequeno-guia-regex/ Blog Intentor] | ||
Edição atual tal como às 13h18min de 23 de janeiro de 2017
Índice
Expressão regular
Introdução
Uma expressão regular é uma notação para representar padrões em strings. Serve para validar entradas de dados ou fazer busca e extração de informações em textos. Provê uma forma concisa e flexível de identificar cadeiras de caracteres de interesse, como caracteres particulares, palavras ou padrões de caracteres.
Anatomia básica de uma expressão regular
Tabela de caracteres/estruturas especiais
| Caractere | Significado |
| | (barra vertical) | Separa alternativas. |
| () (parênteses) | Definir escopo e procedência de operadores. |
| ? (interrogação) | Indica que há zero ou uma concorrência do elemento precedente. |
| * (asterisco) | Indica zero ou mais ocorrências do elemento precedente. |
| + (adição) | Indica que há uma ou mais ocorrências do elemento precedente. |
| . (ponto final) | Casa qualquer elemento. |
| \b | Início ou fim de uma palavra. |
| \B | NÃO é início ou NÃO é fim de uma palavra. |
| ^ | Início de uma palavra ou linha OU negação quando em uma expressão agrupada (entre []). |
| $ | Fim de uma linha. |
| \w | Caracteres alfanuméricos e underline ([A-Za-z0-9_]). |
| \W | Caracteres não alfanuméricos e underline ([^A-Za-z0-9_]). |
| \d | Coincide apenas dígitos ([0-9]). |
| \s | Coincide qualquer caracter de espaço em branco. |
| \S | Coincide qualquer caracter que não seja de espaço em branco. |
| \A | A coincidência ocorre no primeiro caractere. |
| \Z | A coincidência ocorre no final do último caractere de uma string ou linha (antes de \n). |
| \z | A coincidência ocorre no final do último caractere de uma string, ignorando linhas. |
| \G | A coincidência ocorre a partir do ponto no qual a última coincidência terminou. |
| \t | TAB. |
| \n | Nova linha. |
| \ | Quando seguido de um caractere especial das expressões regulares, realiza coincidência daquele caractere. |
| {n} | Coincidência dos caracteres precedidos exatamente n vezes. |
| {n,m} | Coincidência dos caracteres precedidos entre n (número mínimo de repetições) e m (número máximo de repetições) vezes.
Pode-se deixar vazios tanto n ({,m}) quanto m ({n,}), o que causa coincidência apenas com o valor indica. |
| [ ] | Utilizado para agrupamento de expressões. |
| [caracteres] | Coincidência de quaisquer caracteres presentes entre os colchetes. |
| [c1-c2] | Coincidência de quaisquer caracteres alfanuméricos entre c1 e c2 (em order alfabética/numérica). |
| .* | Usado para significar "qualquer coisa". |
Exemplos
Por exemplo, para verificar se um dado fornecido é um número de 0,00 a 9,99 pode-se usar a expressão regular \d,\d\d, pois o símbolo \d é um curinga que casa com um dígito.
O verbo casar aqui está sendo usado tradução para match, no sentido de combinar, encaixar, parear. Dizemos que a expressão \d,\d\d casa com 1,23 mas não casa com 123 (falta a vírgula) nem com 1,2c (“c” não casa com \d, porque não é um dígito).
\d{5}-\d{3}
O padrão de um CEP como 05432-001: 5 dígitos, um - (hífen) e mais 3 dígitos. A sequência \d é um metacaractere, um curinga que casa com um dígito (0 a 9). A sequência {5} é um quantificador: indica que o padrão precedente deve ser repetido 5 vezes, portanto \d{5} é o mesmo que \d\d\d\d\d.
[012]\d:[0-5]\d
Semelhante ao formato de horas e minutos, como 03:10 ou 23:59. A sequência entre colchetes [012] define um conjunto. Neste caso, o conjunto especifica que primeiro caractere deve ser 0, 1 ou 2. Dentro dos [] o hífen indica uma faixa de caracteres, ou seja, [0-5] é uma forma abreviada para o conjunto [012345]; o conjunto que representa todos os dígitos, [0-9] é o mesmo que \d. Note que esta expressão regular também aceita o texto 29:00 que não é uma hora válida (horas válidas serão o tema de um dos Exercícios).
[A-Z]{3}-\d{4}
É o padrão de uma placa de automóvel no Brasil: três letras de A a Z é seguidas de um - (hífen) seguido de quatro dígitos, como CKD-4592.
Para aprender
- https://regexone.com/ (em inglês)
- http://regexr.com/ (em inglês)
XPath
Introdução
O XPath é uma linguagem de consulta, semelhante a expressão regular, para pesquisa em documentos com estrutura XML (como HTML por exemplo). É um recurso extremamente útil e muito utilizado durante a criação de scripts de testes de software em plataforma web.
Softwares de automação de testes são utilizados para simular a ação de usuários reais através de interações diretas com a aplicação sob teste. Para isso, é necessário que os elementos contidos na aplicação sejam identificados pela ferramentas de automação de testes, para que então, ações (cliques, digitação, etc) sejam executadas sobre eles.
Identificando elementos
Exemplo:
1 <html>
2 <body>
3 <table>
4 <tr>
5 <th>Ação</th>
6 <th>Nome</th>
7 </tr>
8 <tr>
9 <td><input type=“button” value=“Promover” id=“btnPromover" /></td>
10 <td>Cristiano Caetano</td>
11 </tr>
12 <tr>
13 <td><input type=“button” value=“Promover” /></td>
14 <td>Elias Nogueira</td>
15 </tr>
16 <tr>
17 <td><input type=“button” value=“Promover” /></td>
18 <td>Júlio de Lima</td>
19 </tr>
20 </table>
21 </body>
22 </html>
Tradicionalmente, existem duas formas (que oferecem menos risco), de identificar um elemento contido em um documento, são elas: baseado na árvore do elemento e baseado nas propriedades do elemento.
Baseado na árvore do elemento
Onde eu mostro para a ferramenta de automação toda a árvore do elemento:
| Ação | Identificação do elemento | XPath |
| Clicar | Documento HTML > Corpo > Tabela > 2a Linha > 1a Coluna > Botão Promover | /html/body/table/tr[2]/td[1]/input |
Baseado nas propriedades do elemento
Onde eu mostro para a ferramenta de automação propriedade(s) que destacam o elemento dos demais:
| Ação | Identificação do elemento | XPath |
| Clicar | Valor: “Promover”, Tipo: “button”, Id: “btnPromover” | //input[@id=“btnPromover”] |
É mais simples e seguro identificar elementos que possuem propriedades que o tornam únicos.
Elementos
| Símbolo | Descrição | Exemplo |
| / | Pesquisa a partir da raiz da árvore | /html/body/table (Encontra todas as tabelas contidas dentro da tag "body", que está dentro da tag “html") |
| // | Pesquisa em toda a árvore | //input[1] (Encontra o primeiro elemento “input”, pesquisando em toda a árvore) |
| [ ] | Definição das propriedades de um elemento | //table/tr/td[1] (Encontra o primeiro elemento “td” contido nas tags “tr” das tags “table”, pesquisando em toda a árvore) |
| @ | Propriedade do elemento | //*[@id=“btnPromover”] (Encontra um elemento que tenha a propriedade “id”, e que esta seja igual a “btnPromover", pesquisando em toda a árvore) |
| * | Todos os elementos | //table/* (Encontra todos os elementos contidos nas tags “table", pesquisando em toda a árvore) |
Métodos
- text( ) - O método “text()” é utilizado para encontrar elementos através do texto contido dentro deles, por exemplo, queremos encontrar o elemento “td” que possui o texto “Júlio de Lima”: //td[text()="Júlio de Lima"]
- first() - Através do método “first()” é possível identificar o primeiro elemento contido em um determinado escopo, por exemplo, queremos identificar o elemento “input” contido na primeira coluna da primeira linha de uma tabela: //table/tr[first()]/td[1]/input
- last() - Através do método “last()” é possível identificar o último elemento contido em um determinado escopo, por exemplo, queremos identificar o elemento “input” contido na primeira coluna da última linha de uma tabela: //table/tr[last()]/td[1]/input
- Comparações - Usando comparações de conteúdos podemos encontrar elementos baseados no texto contido dentro de seus filhos. Por exemplo, queremos identificar o elemento “input” que está dentro da primeira coluna, de uma linha na qual a segunda coluna possui o texto “Teste”: //tr[td[2]="Teste"]/td[1]/input
