Как использовать аннотацию @FindBy в Selenium WebDriver

Я хочу знать, что не так с моим кодом, потому что, когда я пытаюсь проверить свой код, я ничего не получаю.

public class SeleniumTest {

private WebDriver driver;
private String nome;
private String idade;

@FindBy(id = "j_idt5:nome")
private WebElement inputNome;

@FindBy(id = "j_idt5:idade")
private WebElement inputIdade;

@BeforeClass
public void criarDriver() throws InterruptedException {

    driver = new FirefoxDriver();
    driver.get("http://localhost:8080/SeleniumWeb/index.xhtml");
    PageFactory.initElements(driver, this);

}

@Test(priority = 0)
public void digitarTexto() {

    inputNome.sendKeys("Diego");
    inputIdade.sendKeys("29");

}

@Test(priority = 1)
public void verificaPreenchimento() {

    nome = inputNome.getAttribute("value");
    assertTrue(nome.length() > 0);

    idade = inputIdade.getAttribute("value");
    assertTrue(idade.length() > 0);
}

@AfterClass
public void fecharDriver() {

    driver.close();

}

}

Я использую Selenium WebDriver а также TestNGи я попытался проверить некоторые записи в JSF стр.

1 ответ

Решение

Для @BeforeClass есть различие:

@BeforeClass
Run before all the tests in a class

А также @FindBy выполняется каждый раз, когда вы вызываете класс.

На самом деле ваш @FindBy называется до @BeforeClass так что это не сработает.

Что я могу вам предложить, так это сохранить @FindBy но давайте начнем использовать шаблон PageObject.

Вы сохраняете страницу своего теста и создаете другой класс для своих объектов, например:

public class PageObject{
  @FindBy(id = "j_idt5:nome")
  private WebElement inputNome;

  @FindBy(id = "j_idt5:idade")
  private WebElement inputIdade;

  // getters
  public WebElement getInputNome(){
    return inputNome;
  }

  public WebElement getInputIdade(){
    return inputIdade;
  }

  // add some tools for your objects like wait etc
} 

Ваш SeleniumTest будет выглядеть так:

@Page
PageObject testpage;

@Test(priority = 0)
public void digitarTexto() {

  WebElement inputNome = testpage.getInputNome();
  WebElement inputIdade = testpage.getInputIdade();

  inputNome.sendKeys("Diego");
  inputIdade.sendKeys("29");
}
// etc

Если вы собираетесь использовать это, скажите мне, что случилось.

Другие вопросы по тегам