diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestBase.java b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestBase.java
index 5c3a9432f6591e7b5d7aaf9ed0ce09d977afa010..cab15704c65752f1015f8d0da0c6907b6f0a20f5 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestBase.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestBase.java
@@ -1,11 +1,20 @@
 package de.deadlocker8.budgetmaster.integration.helpers;
 
-import org.junit.jupiter.api.BeforeEach;
+import de.deadlocker8.budgetmaster.Main;
+import org.junit.jupiter.api.*;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.firefox.FirefoxDriver;
 import org.openqa.selenium.firefox.FirefoxOptions;
+import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.test.annotation.DirtiesContext;
 
+@SpringBootTest(classes = Main.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@ExtendWith(SeleniumTestWatcher.class)
+@DirtiesContext
+@SeleniumTest
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class SeleniumTestBase
 {
 	protected WebDriver driver;
@@ -13,8 +22,9 @@ public class SeleniumTestBase
 	@LocalServerPort
 	protected int port;
 
-	@BeforeEach
-	public final void init()
+	@Order(1)
+	@BeforeAll
+	public void init()
 	{
 		FirefoxOptions options = new FirefoxOptions();
 		options.setHeadless(false);
@@ -23,6 +33,11 @@ public class SeleniumTestBase
 		driver.manage().window().maximize();
 	}
 
+	@AfterAll
+	public void afterAll() {
+		driver.quit();
+	}
+
 	public WebDriver getDriver()
 	{
 		return driver;
diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestWatcher.java b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestWatcher.java
index f802c3c9deb5d3810011f9d0a02e80cbb99e1258..be160519b52a2e0c1f72a1fbbeca7fef67def736 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestWatcher.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/helpers/SeleniumTestWatcher.java
@@ -6,26 +6,11 @@ import org.openqa.selenium.WebDriver;
 
 public class SeleniumTestWatcher implements TestWatcher
 {
-	@Override
-	public void testSuccessful(ExtensionContext context)
-	{
-		final WebDriver driver = getDriver(context);
-		driver.quit();
-	}
-
-	@Override
-	public void testAborted(ExtensionContext context, Throwable cause)
-	{
-		final WebDriver driver = getDriver(context);
-		driver.quit();
-	}
-
 	@Override
 	public void testFailed(ExtensionContext context, Throwable cause)
 	{
 		final WebDriver driver = getDriver(context);
 		IntegrationTestHelper.saveScreenshots(driver, context.getRequiredTestMethod().getName(), context.getRequiredTestClass().getSimpleName());
-		driver.quit();
 	}
 
 	private WebDriver getDriver(ExtensionContext context)
diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionTransferTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionTransferTest.java
index 141bad3f8ed1cedeb4f42aebf2b6642a763017d5..cb2be683fe054ae9b4c19dc50d28703b0681c908 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionTransferTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionTransferTest.java
@@ -1,21 +1,20 @@
 package de.deadlocker8.budgetmaster.integration.selenium;
 
-import de.deadlocker8.budgetmaster.Main;
 import de.deadlocker8.budgetmaster.accounts.Account;
 import de.deadlocker8.budgetmaster.accounts.AccountType;
 import de.deadlocker8.budgetmaster.authentication.UserService;
-import de.deadlocker8.budgetmaster.integration.helpers.*;
+import de.deadlocker8.budgetmaster.integration.helpers.IntegrationTestHelper;
+import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTestBase;
+import de.deadlocker8.budgetmaster.integration.helpers.TransactionTestHelper;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
 import org.openqa.selenium.By;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.NoSuchElementException;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.WebDriverWait;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.annotation.DirtiesContext;
 
 import java.io.File;
 import java.text.SimpleDateFormat;
@@ -26,15 +25,11 @@ import java.util.List;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-@ExtendWith(SeleniumTestWatcher.class)
-@SpringBootTest(classes = Main.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
-@SeleniumTest
 class NewTransactionTransferTest extends SeleniumTestBase
 {
 	private IntegrationTestHelper helper;
 
-	@BeforeEach
+	@BeforeAll
 	public void prepare()
 	{
 		helper = new IntegrationTestHelper(driver, port);
@@ -48,6 +43,10 @@ class NewTransactionTransferTest extends SeleniumTestBase
 		final Account account2 = new Account("Account2", AccountType.CUSTOM);
 
 		helper.uploadDatabase(path, Arrays.asList("DefaultAccount0815", "sfsdf"), List.of(account1, account2));
+	}
+
+	@BeforeEach
+	public void beforeEach() {
 		// open transactions page
 		driver.get(helper.getUrl() + "/transactions");
 		driver.findElement(By.id("button-new-transaction")).click();
diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/SearchTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/SearchTest.java
index a4d6e2944f60125cd5660738a3ad7fa010237f9d..476ff3a773fa53462a450f75cd3d699bbd3758dd 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/SearchTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/SearchTest.java
@@ -9,19 +9,15 @@ import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTest;
 import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTestBase;
 import de.deadlocker8.budgetmaster.integration.helpers.SeleniumTestWatcher;
 import de.thecodelabs.utils.util.Localization;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.TestWatcher;
 import org.openqa.selenium.By;
 import org.openqa.selenium.JavascriptExecutor;
-import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
-import org.openqa.selenium.firefox.FirefoxDriver;
-import org.openqa.selenium.firefox.FirefoxOptions;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.web.server.LocalServerPort;
 import org.springframework.test.annotation.DirtiesContext;
 
 import java.io.File;
@@ -30,14 +26,9 @@ import java.util.List;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-
-@ExtendWith(SeleniumTestWatcher.class)
-@SpringBootTest(classes = Main.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
-@SeleniumTest
 class SearchTest extends SeleniumTestBase
 {
-	@BeforeEach
+	@BeforeAll
 	public void prepare()
 	{
 		IntegrationTestHelper helper = new IntegrationTestHelper(driver, port);
@@ -51,6 +42,10 @@ class SearchTest extends SeleniumTestBase
 		final Account account2 = new Account("Account2", AccountType.CUSTOM);
 
 		helper.uploadDatabase(path, Arrays.asList("DefaultAccount0815", "sfsdf"), List.of(account1, account2));
+	}
+
+	@BeforeEach
+	public void beforeEach() {
 		// search
 		WebElement inputSearch = driver.findElement(By.id("search"));
 		inputSearch.sendKeys("e");