1
resposta

@FindBy e PageFactory versus By objects

Senhores, poderiam explicar-me qual as vantagens e desvantagens de se usar os objetos By ou usar o pattern PageFactory?

@FindBy(how = How.XPATH, using = "\\a[@class = 'ng-bindign']")
private WebElement myButton;

ou

private By myButtonBy = By.xpath( "\\a[@class = 'ng-bindign']");
private WebElement myButton;

//...

public static void main(String args[]){
   //this first line will be supressed if we use @FindBy
   myButton = driver.findElement(myButtonBy);
   my Button.click();
}
1 resposta

Oi Douglas, da primeira maneira, com o uso do PageFactory, você delega para o WebDriver a responsabilidade de achar os elementos na página e associar aos atributos do seu objeto. Da segunda maneira, você que fica responsável por ir achando os elementos.

A PageFactory também está linkada com o fato de vc usar PageObjects(http://blog.caelum.com.br/organizacao-de-testes-de-aceitacao-com-pageobjects/), que é um outro Pattern para vc isolar o comportamento relacionado a páginas. Dá uma olhada também na wiki do próprio WebDriver => https://github.com/SeleniumHQ/selenium/wiki/PageFactory