Я недавно перешел на Google Guice, и теперь мои результаты перезаписываются для каждого теста вместо добавления всех тестов. Я использую хэш-карту для сбора данных о прохождении и сбое каждого теста, но вместо сбора данных для каждого теста он перезаписывает предыдущий. Я использую свои инъекции в своем конструкторе. Используя Selenium, Cucumber, Java и Eclipse.
AbstractDriver
public abstract class AbstractDriver {
protected abstract WebDriver createDriver();
public abstract WebDriver getDriver(); }
Драйвер
public class Driver extends AbstractDriver {
protected WebDriver driver;
private ChromeDriverService ChromeService;
protected Messages msg = new Messages();
@Override
protected WebDriver createDriver() {
try {
System.setProperty(CHROME.getEXE(), CHROME.getPath());
System.setProperty(ChromeDriverService.CHROME_DRIVER_SILENT_OUTPUT_PROPERTY, "true");
ChromeService = new ChromeDriverService.Builder()
.usingDriverExecutable(new File(CHROME.getPath()))
.usingPort(CHROME.getNodes())
.build();
}catch(IllegalStateException e) {
msg.switchMessages("DriverErrorMessage");
}
return driver = new ChromeDriver(ChromeService,CHROME.getCHROME_DC());
}
@Override
public WebDriver getDriver() {
if (driver == null) {
this.createDriver();
}
return driver;
}
}
База драйвера
@ScenarioScoped
public class DriverBase {
public WebDriver driver = new Driver().getDriver();
}
База страницы
public class PageBase {
protected DriverBase web;
public PageBase(DriverBase web) {
this.web = web;
PageFactory.initElements(web.driver, this);
}
Объект страницы
public class PageObject extends PageBase {
/** NOTES -> Constructor*/
@Inject
public PageObject(DriverBase web) {
super(web);
}
public String getTitle() {
web.driver.get("https://stackoverflow.com/");
String title = web.driver.getTitle();
return title;
}
public String getGoogleTitle() {
web.driver.get("https://google.com/");
String title = web.driver.getTitle();
return title;
}
}
Шаги
public class Steps {
private DriverBase web;
PageObject pageobj;
Results result;
String results = null;
@Inject
Steps( DriverBase web,PageObject pageobj){
this.web = web;
this.pageobj= pageobj;
}
@Then("Check title")
public void test() throws IOException, ParseException {
String title = pageobj.getTitle();
if(title.equals("stackoverflow"))
{
results = "pass";
}else if(!title.equals("stackoverflow")) {
results = "fail";
}
result.createResult(results);
}
@Then("Check Google title")
public void test2() throws IOException, ParseException {
String title = pageobj.getGoogleTitle();
if(title.equals("google"))
{
results = "pass";
}else if(!title.equals("google")) {
results = "fail";
}
result.createResult(results);
}
Результат
public class Results {
ArrayList<Map<String, String>> PlanResult = new ArrayList<>();
public void createResult(String result ) throws IOException,ParseException {
Map<String, String> CaseResult= new HashMap<String, String>(){{put("result", result) ;}};;
PlanResult.add(CaseResult);
System.out.println("Case Result: " + PlanResult);
}
}
Метод, который собирает успешные или неудачные результаты и сохраняет их в массиве. Поле хэш-карты: PlanResult .
ArrayList> PlanResult = new ArrayList <> ();
Также пробовал @ Singleton