Как использовать аннотацию @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
Если вы собираетесь использовать это, скажите мне, что случилось.