FailedToInitializeTestData при запуске теста


#1

Добрый день.Пытаюсь разобраться как подтягивать данные из csv-файла для заполнения поп-апа регистрации. В чем может быть проблема ? При запуске теста выдает ошибку инициализации:

net.thucydides.core.csv.FailedToInitializeTestData: No properties or public fields matching the data columns were found or could be 
assigned for the class project.SiteTesting.pages.SiteTestusing test data: {PASSWORD=qwer1234, CONFIRMPASSWORD=qwer1234, EMAIL=test@test.com}

сам Datadoc выглядит так

EMAIL,PASSWORD,CONFIRMPASSWORD
test@test.com, qwer1234, qwer1234
test1@test.com, pass12, pass13
test2@test.com, #@#@#, ****

код

import net.thucydides.core.annotations.Managed;
import net.thucydides.core.annotations.ManagedPages;
import net.thucydides.core.annotations.Steps;
import net.thucydides.core.pages.PageObject;
import net.thucydides.core.pages.Pages;
import net.thucydides.junit.annotations.UseTestDataFrom;
import net.thucydides.junit.runners.ThucydidesParameterizedRunner;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;

@RunWith(ThucydidesParameterizedRunner.class)
@UseTestDataFrom("D:/WorkS/SiteTesting/src/main/java/project/SiteTesting/pages/Datadoc.csv")
public class SiteTest extends PageObject {

	@Managed
	public WebDriver driver;

	@ManagedPages(defaultUrl = "blabla.com")
	public Pages pages;

	@Steps
	public RegistrationPopupPage popupPage;

	@Test
	public void testSite() {
		popupPage.startBrowser();
		popupPage.openRegistrationPopup();
		popupPage.setEmail();
		popupPage.setPassword();
		popupPage.setConfirmPassword();
	}
}

(sidelnikovmike) #2

не силен в сусидидисе, но как то ошибка говорит о том, что у Вас нету полей, которые бы матчились на соответствующие поля. Наверное было бы полезно увидеть еще код RegistrationPopupPage


#4

в RegistrationPopupPage лежат степы

public class RegistrationPopupPage extends ScenarioSteps {

AllElementsOfRegistrationPopup popup;

private String email;
private String password;
private String confirmpassword;

public RegistrationPopupPage(final Pages pages) {
	super(pages);
}
@Step
public void startBrowser() {
	final RegistrationPopup loginPage = getPages().get(RegistrationPopup.class);
	loginPage.open();
}
@Step
public void openRegistrationPopup() {
	popup.clickRegistrationButton();
}
@Step
public void setEmail() {
	popup.setEmail(email);
}
@Step
public void setPassword() {
	popup.setPassword(password);
}
@Step
public void setConfirmPassword() {
	popup.setConfirmPassword(confirmpassword);
}
}

#5
public class AllElementsOfRegistrationPopup extends PageObject {

private String email;
private String password;
private String confirmpassword;

@FindBy(css = "span.left")
private WebElement REG_BUTTON;

@FindBy(id = "email")
public WebElement emailField;

@FindBy(id = "Password_first")
private WebElement passwordFirstField;

@FindBy(id = "Password_second")
private WebElement passwordSecondField;

public void clickRegistrationButton() {
	element(REG_BUTTON).click();
}

public void setEmail(final String email) {
	element(emailField).sendKeys(email);
	this.email = email;
}

public void setPassword(final String password) {
	element(passwordFirstField).sendKeys(password);
	this.password = password;
}

public void setConfirmPassword(final String confirmpassword) {
	element(passwordSecondField).sendKeys(confirmpassword);
	this.confirmpassword = confirmpassword;
}
}

(sidelnikovmike) #6

А если попробовать UseTestDataFrom аннотацию повесить на page и popup классы?
Судя по примерам из этой ссылки(опять же - я ее первый раз вижу) - в классе аннотированном должны быть поля соответствующие. А их у вас в классе SiteTest нету.
Хотя я могу ошибаться smile


#7

Насколько я понял @UseTestDataFrom просто указывает на путь к csv файлу
и я её проставил во всех классах - ничего не изменилось


(sidelnikovmike) #8

А если сделать для полей геттеры?
Или поля сделать паблик?


#9

Сделал поля паблик - не помогает
и каким образом тут помогут геттеры ?


(sidelnikovmike) #10

Я ж говорю - я смотрю пример по ссылке на документацию и смотрю различия с вашим.
Попробуйте сами сделать как в примере и может станет понятно, что в вышем не так

Я сусидидиса не знаю если честно. Но и по отзывам от коллег и по беглому просмотру кода - дурацкий это фреймворк. Гляньте в сторону например allure.


#11

Попробовал повторить как в примере и тут начался какой то ад http://puu.sh/ctVtK.png

@RunWith(ThucydidesParameterizedRunner.class)
@UseTestDataFrom("D:/WorkS/SiteTesting/src/main/java/project/SiteTesting/pages/Datadoc.csv")
public class SiteTest extends PageObject {

public String email;
public String password;
public String confirmpassword;

@Managed
public WebDriver driver;

@ManagedPages(defaultUrl = "http://blabla.com")
public Pages pages;

@FindBy(id = "email")
public WebElement emailField;

@FindBy(id = "Password_first")
private WebElement passwordFirstField;

@FindBy(id = "Password_second")
private WebElement passwordSecondField;

@Steps
public RegistrationPopupPage popupPage;

@Test
public void testSite() {
	popupPage.startBrowser();
	popupPage.openRegistrationPopup();
	getEmail();
	getPassword();
	getConfirmPassword();
}

public void setEmail(final String email) {
	element(emailField).sendKeys(email);
	this.email = email;
}

public String getEmail() {
	return email;
}

public void setPassword(final String password) {
	element(passwordFirstField).sendKeys(password);
	this.password = password;
}

public String getPassword() {
	return password;
}

public void setConfirmPassword(final String confirmpassword) {
	element(passwordSecondField).sendKeys(confirmpassword);
	this.confirmpassword = confirmpassword;
}

public String getConfirmPassword() {
	return confirmpassword;
}

(Irish) #12

у меня вот так работает
@UseTestDataFrom(value = "D:\Thucydides\Tests\src\main\java\com\my\test-data\user.csv", separator = ';')
public class LoginStoryTest {
@Qualifier
public String getQualifier() {
return user_name;
}

@Managed
public WebDriver webdriver;

@ManagedPages(defaultUrl = "https://my.site")
public Pages pages;
HomePage homePage;
LoginPage loginPage;

private String user_name;
private String password;
public String getName() {
	return user_name;
}

public String getPassword() {
	return password;
}

@Steps
public EndUserSteps endUser;


@Pending @Test
public void user_can_login_and_logout() throws Throwable {		
	endUser.is_home_page();
	endUser.click_on_login_link();
	endUser.enter_user_name(getName());

кстати, не пойму почему не подхватывает относительный путь к дата файлу. буду признательна за помощь


#13

Решил проблему тем, что все таки дописал в @Test геттеры, но теперь фукидид на каждую строчку докфайла создает отдельный тест http://puu.sh/ctZfx.png , нужно понять как проверить все значения в одном тесте

@Test
public void testSite() {
	popupPage.startBrowser();
	popupPage.openRegistrationPopup();
	popupPage.setEmail(getEmail());
	popupPage.setPassword(getPassword());
	popupPage.setConfirmPassword(getConfirmPassword());
}

public String getEmail() {
	return email;
}

public String getPassword() {
	return password;
}

public String getConfirmPassword() {
	return confirmpassword;
}