Selenium WebDriver - PageObjects - Elementos em comum entre páginas

69 views
Skip to first unread message

Leandro Alves dos Santos

unread,
Sep 17, 2014, 11:24:10 AM9/17/14
to seleniu...@googlegroups.com
Boa tarde Pessoal!

Gostaria de uma ajuda em relação á como declarar elementos no que existem em várias páginas a aplicação no qual estou testando.

Por exemplo o campo de busca (conforme imagem anexa) está em quase todas a páginas da aplicação, não gostaria de ter que ter declarar um mesmo elemento em todas as classes/páginas.

Agradeço desde já pela atenção.


cmpBusca.png

Elias Nogueira

unread,
Sep 17, 2014, 11:40:13 AM9/17/14
to Leandro Alves dos Santos, selenium-brasil
Oi Leandro,

Se o campo de busca estiver sendo apresentado em cada página não tem o que fazer porque é necessário sempre encontrar o elemento. O que tu podes fazer é criar um fragmento, onde tu primeiro navega a este fragmento para não precisar reescrever código. Isso ajuda mas não impede ele ter que localizar o campo de busca

Abraço!

--
Elias Nogueira


--
Você recebeu essa mensagem porque está inscrito no grupo quot;Selenium Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para selenium-bras...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/selenium-brasil.
Para mais opções, acesse https://groups.google.com/d/optout.

Gabriel Oliveira

unread,
Sep 17, 2014, 11:40:36 AM9/17/14
to Leandro Alves dos Santos, selenium-brasil
O XPath é o mesmo ?

Cria um objeto que encapsula os métodos do campo search e faz as classes Page Objects instanciarem esse objeto...

Lembrando que tirando todas as boas práticas de automação, tu tá programando um sistema - use as ferramentas necessárias pra isso (UML, Orientação a Objetos, etc etc etc) =)

--

Gabriel P.A. de Oliveira, CTFL
Linkedin - www.linkedin.com/in/gabrielPAoliveira
Skype - gabriel.pa.oliveira






2014-09-17 12:24 GMT-03:00 Leandro Alves dos Santos <leandrosa...@gmail.com>:

Leandro Alves dos Santos

unread,
Sep 17, 2014, 11:57:23 AM9/17/14
to seleniu...@googlegroups.com
Oi Elias, 

Desculpa, não ficou claro pra mim, o que disse em relação a criar um fragmento.



Gabriel,

O Xpath não é o mesmo.

Gabriel Oliveira

unread,
Sep 17, 2014, 12:08:36 PM9/17/14
to Leandro Alves dos Santos, selenium-brasil
Se o XPath é ao menos parecido, tu pode ainda encapsular num objeto e parametrizar o XPath.

Se o XPath não é o mesmo nem forçando a amizade, são dois "objetos diferentes" no teu sistema, mesmo que na tela sejam "iguais" e tu trata dentro de cada página da melhor forma que vc julgar...

Elias Nogueira

unread,
Sep 17, 2014, 12:52:47 PM9/17/14
to Gabriel Oliveira, Leandro Alves dos Santos, selenium-brasil
A idéia é tu ter um page objetcs somente para um componente, te livrando de fazer sempre a mesma escrita de código em outras telas.

Ex:
public class ComponentePesquisa {

// itens omitidos

   public void preencherBusca(String termo) {
      // itens omitios
   }

   public void selecionarQuantidadeRegistros(int quantidade) {
      // itens omitidos
   }

}


Na hora de utilizar...
ComponentePesquisa pesquisa = new ComponentePesquisa(driver);
pesquisa.preencherBusca("termo");

// acessa os demais page objects


--
Elias Nogueira

Rodrigo De Melo Viana

unread,
Sep 17, 2014, 12:56:34 PM9/17/14
to seleniu...@googlegroups.com
Boa tarde Gabriel,

Uma saída é você declarar antes, em uma BasePage por exemplo.
Aí declara ela pública (para que possa usar em outras classes) e recebendo um valor null.

exemplo:

public WebElement txtBuscar = null;

Nas páginas (classes) que for usa-la... basta atribuir seu novo xpath..

exemplo:

txtBuscar = driver.findElement(By.xpath("SEU_XPATH"));

Lembrando que suas páginas adicionais... sempre devem ter o extends da BasePage... se não não funciona...

Exemplo:

public class LoginPage extends BasePage 

Espero ter ajudado.

Abraço!

Em quarta-feira, 17 de setembro de 2014 12h24min10s UTC-3, Leandro Alves dos Santos escreveu:

Leandro Alves dos Santos

unread,
Sep 17, 2014, 1:36:02 PM9/17/14
to seleniu...@googlegroups.com
Ótimo, 

Vou seguir as sugestões que me deram.

 Obrigado á todos.


Em quarta-feira, 17 de setembro de 2014 12h24min10s UTC-3, Leandro Alves dos Santos escreveu:

Stefan Teixeira

unread,
Sep 17, 2014, 2:22:25 PM9/17/14
to selenium-brasil
Leandro, siga a sugestão do Elias sobre a criação de um fragment, pra abstrair um componente e promover o reuso. Já fiz isso em componentes de seleção múltipla, por exemplo, e é muito bom pra reusar entre os Page Objects.

Abs,
Stefan

Rodrigo De Melo Viana

unread,
Sep 17, 2014, 2:29:53 PM9/17/14
to seleniu...@googlegroups.com
Stefan e Elias,

agora fiquei curioso sobre este fragment...
No caso do Leandro, o xpath do elemento muda em cada página...
Como ficaria isso? Neste exemplo do Elias:

Ex:
public class ComponentePesquisa {

// itens omitidos

   public void preencherBusca(String termo) {
      // itens omitios
   }

   public void selecionarQuantidadeRegistros(int quantidade) {
      // itens omitidos
   }

}

Entendi que toda vez que precisar realizar uma pesquisa, basta chamar o método preencherBusca();
Mas, não entendi como fica a localização do elemento por ele ser mutável a cada página.

Elias Nogueira

unread,
Sep 17, 2014, 2:41:36 PM9/17/14
to Rodrigo De Melo Viana, selenium-brasil
Com um elemento sem o mesmo método de localização não adianta criar um fragmento.
Em relação ao XPath não ser o mesmo no exemplo passado aqui, creio que não seja este e sim o XPath das tabelas...
Se a localização do campo busca está sendo feita por XPath já temos uma coisa errada... rs

Abraço!

--
Elias Nogueira

Reply all
Reply to author
Forward
0 new messages