如何在Selenium WebDriver中使用@FindBy注释

时间:2013-05-12 14:52:38

标签: java selenium-webdriver annotations testng findby

我想知道我的代码有什么问题,因为当我尝试测试代码时,我什么都没得到。

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 WebDriverTestNG,我尝试在JSF页面中测试一些条目。

1 个答案:

答案 0 :(得分:9)

@BeforeClass有一个定义:

@BeforeClass
Run before all the tests in a class
每次你打电话给班级时,{{1>}都会被“执行”。

实际上您的@FindBy@FindBy之前被调用,因此无效。

我建议您保留@BeforeClass,但让我们开始使用PageObject pattern.

您保留测试页面,然后为对象创建另一个类,如:

@FindBy

你的SeleniumTest看起来像那样:

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
} 

如果你打算用这个告诉我发生了什么事。