Localização de elementos

Localização de um elemento

Uma das técnicas mais fundamentais a aprender quando se utiliza o WebDriver é a forma de encontrar elementos na página. WebDriver oferece uma série de selectortipos incorporados, entre eles encontrando um elemento pelo seu atributo de ID:

Como se vê no exemplo, a localização de elementos no WebDriver é feita no objecto de instânciaWebDriver. O findElement(By) método retorna um outro tipo de objecto fundamental, o WebElement.

  • WebDriver representa o browser
  • WebElement representa um nó DOM particular(um controlo, por exemplo, um campo de ligação ou de entrada, etc.)

Após ter uma referência a um elemento web que foi “encontrado”, pode reduzir o âmbito da sua pesquisa usando a mesma chamada naquela instância de objecto:

Pode fazer isto porque ambos os tipos WebDriver e WebElement implementam a interface SearchContext. No WebDriver, isto é conhecido como uma interface baseada em funções. As interfaces baseadas em funções permitem-lhe determinar se uma implementação particulardriver suporta uma determinada característica. Estas interfaces são claramente definidas e tentam aderir a ter apenas uma única função de responsabilidade. Pode ler mais sobre o design do WebDriver e os problemas que são suportados em que controladores na secção Some Other Section WhichMust Be Named.

Consequentemente, a interface By usada acima também suporta uma série de estratégias adicionais de localização. Uma pesquisa aninhada pode não ser a estratégia de localização de queijo mais eficaz, uma vez que requer a emissão de dois comandos separados para o navegador; primeiro pesquisar o DOM para um elemento com ID “queijo”, depois uma pesquisa por “cheddar” num contexto anarrowed.

Para melhorar ligeiramente o desempenho, devemos tentar usar um localizador mais específico: WebDriver suporta a procura de elementos por localizadores CSS, permitindo-nos combinar os dois localizadores anteriores numa única pesquisa:

Localização de múltiplos elementos

É possível que o documento com que estamos a trabalhar possa vir a ter uma lista ordenada dos queijos que mais gostamos:

<ol id=cheese> <li id=cheddar>… <li id=brie>… <li id=rochefort>… <li id=camembert>…</ol>

Desde que mais queijo seja indiscutivelmente melhor, e seria incómodo ter de recuperar cada um dos itens individualmente, um superiortechnique para recuperar queijo é fazer uso da versão pluralizada findElements(By). Este método devolve uma colecção de webelements. Se for encontrado apenas um elemento, ele ainda devolverá a acollecção (de um elemento). Se nenhum elemento corresponder ao localizador, a lista anémica será devolvida.

Estratégias de selecção de elementos

Existem oito estratégias diferentes de localização de elementos incorporadas no WebDriver:

>Localiza elementos cujo atributo ID corresponde ao valor da pesquisa

nome da etiqueta

Locator Descrição
nome da classe Localizações elementos cujo nome de classe contém o valor de pesquisa (não são permitidos nomes de classes compostas)
css selector Localiza elementos que correspondem a um selector CSS
id
nome Localiza elementos cujo atributo NOME corresponde ao valor da pesquisa
link text Localiza elementos de âncora cujo texto visível corresponde ao valor da pesquisa
texto de ligação parcial Localiza elementos de âncora cujo texto visível contém o valor da pesquisa. Se vários elementos forem correspondentes, apenas o primeiro será seleccionado.
Localiza elementos cujo nome da etiqueta corresponde ao valor da pesquisa
xpath Localiza elementos correspondência de uma expressão XPath

Dicas sobre a utilização de selectores

Em geral, se os ID HTML estiverem disponíveis, únicos e consistentemente previsíveis, são o método preferido para a localização de um elemento numa página. Tendem a funcionar muito rapidamente, e renunciam a muito processamento que vem com complicadas travessias de DOM.

Se os IDs únicos não estiverem disponíveis, um selector CSS bem escrito é o método preferido de localização de um elemento. XPath funciona tão bem como os CSSselectores, mas a sintaxe é complicada e frequentemente difícil no momento da compra. Embora os seleccionadores XPath sejam muito flexíveis, normalmente não são testados por fornecedores de navegadores e tendem a ser bastante lentos.

Estratégias de selecção baseadas em linkText e partialLinkText tiveram retrocessos, na medida em que trabalham apenas com elementos de ligação. Além disso, a chamada para XPath selectors internamente em WebDriver.

Tag name pode ser uma forma perigosa de localizar elementos. Há frequentemente múltiplos elementos da mesma tag presentes na página. Isto é mais útil quando se chama o método findElements(By) que devolve uma colecção de elementos.

A recomendação é manter os seus localizadores tão compactos e legíveis quanto possível. Pedir ao WebDriver para atravessar a estrutura do DOM é uma operação dispendiosa, e quanto mais conseguir restringir o âmbito da sua pesquisa, melhor.

Relative Locators

Selenium 4 traz Relative Locators que são previamente chamados Friendly Locators. Esta funcionalidade foi adicionada para o ajudar a localizar elementos que se encontram nas proximidades de outros elementos.Os Localizadores Relativos disponíveis são:

  • sobre
  • baixo
  • àEsquerdaDe
  • àDireitaOf
  • near

método FindElement aceita agora um novo método withTagName() que devolve um Localizador Relativo.

Como funciona

Selenium usa a função JavaScriptBoundingClientRect()para encontrar os elementos relativos. Esta função devolve as propriedades de um elemento como a direita, esquerda, fundo, e topo.

Deixe-nos considerar o exemplo abaixo para compreender os localizadores relativos.

p>

above()

Retorna o elemento WebElement, que aparece acima do elemento especificado

below()

Retorna o elemento WebElement, que parecem ser inferiores ao elemento especificado

toLeftOf()

Retorna o WebElement, que aparece à esquerda do elemento especificado

toRightOf()

Retorna o WebElement, que aparece à direita do elemento especificado

near()

Retorna o WebElement, que está no máximo 50px longe do elemento especificado.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *