framework para selenium java

27 views
Skip to first unread message

Paulo Tiago Castanho Mariano

unread,
Sep 17, 2013, 1:54:39 PM9/17/13
to seleniu...@googlegroups.com
Estou trabalhando em um framework para facilitar o uso do selenium.
Gostaria de saber quais problemas podemos ter em usar esse framework e publica-lo para contribuições.
Podem me ajudar? O que vocês acham do projeto? é útil da forma que está?
Projeto encontra-se no github em: https://github.com/confsoft/FuncaoWeb
Att.

Paulo Mariano.

Joao Paulo Musico

unread,
Sep 17, 2013, 3:05:13 PM9/17/13
to Paulo Tiago Castanho Mariano, selenium-brasil
Opa Paulo, tudo bem? 

Não entendi direito a idéia do framework é facilitar em que parte do uso, instalação com tudo que precisa? Fora isso não consigo ver o que mais uma camada sobre o selenium pode acrescentar, já que acho ele bem completo, só as vezes algumas coisas específicas de alguns projetos ficam complicadas...

Vou acompanhar e no que puder ajudar, será legal!

Abraço!


2013/9/17 Paulo Tiago Castanho Mariano <paulo.t...@gmail.com>

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Selenium Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para selenium-bras...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Paulo Mariano Catho

unread,
Sep 18, 2013, 8:20:32 AM9/18/13
to seleniu...@googlegroups.com, Paulo Tiago Castanho Mariano
Olá João, tudo bem. Obrigado pela opinião.

A idéia é facilitar também a instalação, mas não só isso.
Ao usar o selenium precisar do minimo possivel de interações entre classes, apenas uma, centralizando os recursos.
Também deixar a leitura do código mais facil de entender.

É isso que eu queria saber. Para você é melhor, escrever o código no WebDriver nativo ou em português (ou tanto faz rsrs)?
Por exemplo com WebDriver nativo:
 driver.findElement(By.name("q")).sendKeys("Cheese");

Usando FuncaoWeb:
 funcao.escreverTexto(EnumElemento.NAME, "q", "Cheese");

Pensando bem, o ganho não é tão grande em situações simples como essa.

Mas seguindo a idéia do post(http://code.google.com/p/selenium/wiki/GettingStarted), você colocar o código de espera em cada teste fica trabalhoso.
Nesse caso usando o WebDriver nativo fica assim:
  // Sleep until the div we want is visible or 5 seconds is over
 
long end = System.currentTimeMillis() + 5000;
 
while (System.currentTimeMillis() < end) {
     
WebElement resultsDiv = driver.findElement(By.className("gssb_e"));
           
// If results have been returned, the results are displayed in a drop down.
           
if (resultsDiv.isDisplayed()) {
             
break;
           
}
       
}


Usando FuncaoWeb:
  funcao.usarEspera().elementoPresente(EnumElemento.NAME, "gssb_e", 5000);

É muito importante as criticas para enriquecer o framework. Muito obrigado João.

Abraço!

Elias Nogueira

unread,
Sep 18, 2013, 11:51:41 AM9/18/13
to Paulo Mariano Catho, selenium-brasil, Paulo Tiago Castanho Mariano
Oi Paulo,
Eu, particularmente, sou "meio contra" a criação de um frameworks DSL para abstrair comandos de alguma API, mas isso acontece com o Capybara[1] por exemplo que abstrai em formato de DSL os comandos do WebDriver.

Mas tu tens razão no sentido de deixar mais claro para a pessoa que vai automatizar utilizar numa linguagem mais fluente, mas tu perde em dinamismo, uma vez que tu estás encapsulando um conjunto de ações que a pessoa, quando passar por um problema, não saberá resolver ou mesmo não poderá se esse framework for fechado (empacotado como um .jar, por exemplo).

Na minha simples opinião também, tu cria automatizadores mais "macaquinhos".

Eu costumo utilizar o padrão de Page Objects, que no final acaba criando indiretamente uma DSL....
Ai o que tu podes fazer é uma classe de Utils, por exemplo, com uma DLS para as esperas, outra pra tirar screenshots, outras pra localizar mais facilmente os elementos e assim por diante :)

Uma dica para o teu projeto é tirar as configurações das interfaces, pois todo o momento que tu precisar, por exemplo, alterar o path do IEDriverServer tu terás que compilar novamente a classe/projeto. O ideal é criar isso baseado em arquivos properties ou xml que ficam independentes e não necessitam a complicação ;)

Dá uma olhada também no wiselenium [2] criado pelo Andre Scheffer do C.E.S.A.R que tem uma mesma função mas de uma forma diferente...

Parabéns pela iniciativa, pode ser bem útil pra muitos aqui :)

--
Elias Nogueira



2013/9/18 Paulo Mariano Catho <paulo.mar...@gmail.com>

Paulo Mariano

unread,
Sep 19, 2013, 10:22:35 AM9/19/13
to seleniu...@googlegroups.com
Oi Elias.

Eu também era contra esse tipo de abordagem para automação. Mas na equipe que estou se encaixa bem esse tipo de DSL, houve uma discussão e foi estipulado um repositório para PageObjects e outo para o FuncaoWeb, que funciona como "Utils". Por estar separado o que é "nosso" e o que é utils resolvi publicar. Mesmo sabendo que não está maduro suficiente (a utilidade de acesso a banco por exemplo está muito fraca).

O FuncaoWeb não deve ser usado encapsulado, devido a perda de dinamismo e para permitir o crescimento de funcionalidades uteis. Ainda não vi problemas nas interfaces sem encapsular o projeto (mas sei que pode ter em publicacoes por ex).

Se a pessoa não souber como fazer algo, agente espera que pergunte. Eu entendo que pode limitar o automatizador, mas isso é uma questão mais pessoal do que a proposta do projeto.

Boas as referências, estão na fila para eu estudar.

Muito obrigado pela discussão, anotei os pontos e vou pensar bem como colocar no projeto.

Valeu!

--
Paulo Mariano


Em quarta-feira, 18 de setembro de 2013 12h51min41s UTC-3, Elias Nogueira escreveu:
Oi Paulo,
Eu, particularmente, sou "meio contra" a criação de um frameworks DSL para abstrair comandos de alguma API, mas isso acontece com o Capybara[1] por exemplo que abstrai em formato de DSL os comandos do WebDriver.

Mas tu tens razão no sentido de deixar mais claro para a pessoa que vai automatizar utilizar numa linguagem mais fluente, mas tu perde em dinamismo, uma vez que tu estás encapsulando um conjunto de ações que a pessoa, quando passar por um problema, não saberá resolver ou mesmo não poderá se esse framework for fechado (empacotado como um .jar, por exemplo).

Na minha simples opinião também, tu cria automatizadores mais "macaquinhos".

Eu costumo utilizar o padrão de Page Objects, que no final acaba criando indiretamente uma DSL....
Ai o que tu podes fazer é uma classe de Utils, por exemplo, com uma DLS para as esperas, outra pra tirar screenshots, outras pra localizar mais facilmente os elementos e assim por diante :)

Uma dica para o teu projeto é tirar as configurações das interfaces, pois todo o momento que tu precisar, por exemplo, alterar o path do IEDriverServer tu terás que compilar novamente a classe/projeto. O ideal é criar isso baseado em arquivos properties ou xml que ficam independentes e não necessitam a complicação ;)

Dá uma olhada também no wiselenium [2] criado pelo Andre Scheffer do C.E.S.A.R que tem uma mesma função mas de uma forma diferente...

Parabéns pela iniciativa, pode ser bem útil pra muitos aqui :)

--
Elias Nogueira



2013/9/18 Paulo Mariano <paulo.mar...@gmail.com>
Reply all
Reply to author
Forward
0 new messages