From b9a44a99eca9fc676bc80c684e2fafdd2765405d Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Fri, 7 May 2021 22:00:12 +0200
Subject: [PATCH] stabilized selenium tests

---
 .../integration/selenium/AccountTest.java     | 20 +++++++++++++---
 .../selenium/CategorySelectTest.java          | 23 +++++++------------
 .../NewTransactionFromTemplateTest.java       | 14 +++++++----
 .../selenium/NewTransactionNormalTest.java    | 17 +++++++-------
 .../selenium/NewTransactionRecurringTest.java | 17 +++++++-------
 .../selenium/NewTransactionTransferTest.java  | 14 ++++++-----
 6 files changed, 59 insertions(+), 46 deletions(-)

diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/AccountTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/AccountTest.java
index bec02c23e..53ead8513 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/AccountTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/AccountTest.java
@@ -162,7 +162,14 @@ public class AccountTest
 	{
 		driver.get(helper.getUrl() + "/transactions");
 		driver.findElement(By.id("button-new-transaction")).click();
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]");
+		wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
+		driver.findElement(locator).click();
+
+		wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New Transaction"));
 
 		// assert
 		List<WebElement> items = driver.findElements(By.cssSelector(".account-select-wrapper .custom-select-options .custom-select-item-name"));
@@ -181,7 +188,14 @@ public class AccountTest
 		// open new transaction page
 		driver.get(helper.getUrl() + "/transactions");
 		driver.findElement(By.id("button-new-transaction")).click();
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]");
+		wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
+		driver.findElement(locator).click();
+
+		wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New Transaction"));
 
 		// fill form
 		driver.findElement(By.id("transaction-name")).sendKeys("My transaction");
@@ -196,7 +210,7 @@ public class AccountTest
 
 		driver.get(helper.getUrl() + "/transactions");
 
-		WebDriverWait wait = new WebDriverWait(driver, 5);
+		wait = new WebDriverWait(driver, 5);
 		wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".headline-date")));
 
 		// assert
diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/CategorySelectTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/CategorySelectTest.java
index f6837022e..6d3c9eee3 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/CategorySelectTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/CategorySelectTest.java
@@ -88,14 +88,19 @@ public class CategorySelectTest
 		// open transactions page
 		driver.get(helper.getUrl() + "/transactions");
 		driver.findElement(By.id("button-new-transaction")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]");
+		wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
+		driver.findElement(locator).click();
+
+		wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New Transaction"));
 	}
 
 	@Test
 	public void test_newTransaction_openWithEnter()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
-
 		// navigate to category select with tab traversal
 		driver.findElement(By.tagName("body")).sendKeys(Keys.TAB);
 		WebDriverWait wait = new WebDriverWait(driver, 5);
@@ -118,9 +123,6 @@ public class CategorySelectTest
 	@Test
 	public void test_newTransaction_goDownWithKey()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
-
 		// open category select
 		driver.findElement(By.cssSelector(".category-select-wrapper .custom-select-trigger")).click();
 		WebDriverWait wait = new WebDriverWait(driver, 5);
@@ -150,9 +152,6 @@ public class CategorySelectTest
 	@Test
 	public void test_newTransaction_goUpWithKey()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
-
 		// open category select
 		driver.findElement(By.cssSelector(".category-select-wrapper .custom-select-trigger")).click();
 		WebDriverWait wait = new WebDriverWait(driver, 5);
@@ -182,9 +181,6 @@ public class CategorySelectTest
 	@Test
 	public void test_newTransaction_confirmWithEnter()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
-
 		// open category select
 		driver.findElement(By.cssSelector(".category-select-wrapper .custom-select-trigger")).click();
 
@@ -205,9 +201,6 @@ public class CategorySelectTest
 	@Test
 	public void test_newTransaction_jumpToCategoryByFirstLetter()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
-
 		// open category select
 		driver.findElement(By.cssSelector(".category-select-wrapper .custom-select-trigger")).click();
 
diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionFromTemplateTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionFromTemplateTest.java
index f1c7d8b3f..18a81336e 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionFromTemplateTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionFromTemplateTest.java
@@ -92,9 +92,12 @@ public class NewTransactionFromTemplateTest
 	@Test
 	public void test_newTransactionFromTemplate_FullTemplate()
 	{
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'From template')]")).click();
-
 		WebDriverWait wait = new WebDriverWait(driver, 5);
+		final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'From template')]");
+		wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
+		driver.findElement(locator).click();
+
+		wait = new WebDriverWait(driver, 5);
 		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
 
 		driver.findElements(By.cssSelector(".template-item .btn-flat no-padding text-default"));
@@ -120,9 +123,12 @@ public class NewTransactionFromTemplateTest
 	@Test
 	public void test_newTransactionFromTemplate_OnlyIncome()
 	{
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'From template')]")).click();
-
 		WebDriverWait wait = new WebDriverWait(driver, 5);
+		final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'From template')]");
+		wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
+		driver.findElement(locator).click();
+
+		wait = new WebDriverWait(driver, 5);
 		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "Templates"));
 
 		driver.findElements(By.cssSelector(".template-item .btn-flat no-padding text-default"));
diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionNormalTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionNormalTest.java
index a25026d8f..f33006b57 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionNormalTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionNormalTest.java
@@ -89,14 +89,19 @@ public class NewTransactionNormalTest
 		// open transactions page
 		driver.get(helper.getUrl() + "/transactions");
 		driver.findElement(By.id("button-new-transaction")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]");
+		wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
+		driver.findElement(locator).click();
+
+		wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New Transaction"));
 	}
 
 	@Test
 	public void test_newTransaction_cancel()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
-
 		// click cancel button
 		WebElement cancelButton = driver.findElement(By.id("button-cancel-save-transaction"));
 		((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", cancelButton);
@@ -115,9 +120,6 @@ public class NewTransactionNormalTest
 	@Test
 	public void test_newTransaction_income()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
-
 		String name = "My normal transaction";
 		String amount = "15.00";
 		String description = "Lorem Ipsum dolor sit amet";
@@ -154,9 +156,6 @@ public class NewTransactionNormalTest
 	@Test
 	public void test_newTransaction_expenditure()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transaction')]")).click();
-
 		String name = "My normal transaction";
 		String amount = "15.00";
 		String description = "Lorem Ipsum dolor sit amet";
diff --git a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionRecurringTest.java b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionRecurringTest.java
index 3afac981a..ceae4906c 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionRecurringTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionRecurringTest.java
@@ -89,14 +89,19 @@ public class NewTransactionRecurringTest
 		// open transactions page
 		driver.get(helper.getUrl() + "/transactions");
 		driver.findElement(By.id("button-new-transaction")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Recurring')]");
+		wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
+		driver.findElement(locator).click();
+
+		wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New Recurring Transaction"));
 	}
 
 	@Test
 	public void test_newTransaction_cancel()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Recurring')]")).click();
-
 		// click cancel button
 		WebElement cancelButton = driver.findElement(By.id("button-cancel-save-transaction"));
 		((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", cancelButton);
@@ -115,9 +120,6 @@ public class NewTransactionRecurringTest
 	@Test
 	public void test_newTransaction_income()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Recurring')]")).click();
-
 		String name = "My recurring transaction";
 		String amount = "15.00";
 		String description = "Lorem Ipsum dolor sit amet";
@@ -182,9 +184,6 @@ public class NewTransactionRecurringTest
 	@Test
 	public void test_newTransaction_expenditure()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Recurring')]")).click();
-
 		String name = "My recurring transaction";
 		String amount = "15.00";
 		String description = "Lorem Ipsum dolor sit amet";
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 58859aa60..41502ef56 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionTransferTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/NewTransactionTransferTest.java
@@ -87,14 +87,19 @@ public class NewTransactionTransferTest
 		// open transactions page
 		driver.get(helper.getUrl() + "/transactions");
 		driver.findElement(By.id("button-new-transaction")).click();
+
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		final By locator = By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transfer')]");
+		wait.until(ExpectedConditions.visibilityOfElementLocated(locator));
+		driver.findElement(locator).click();
+
+		wait = new WebDriverWait(driver, 5);
+		wait.until(ExpectedConditions.textToBePresentInElementLocated(By.cssSelector(".headline"), "New Transfer"));
 	}
 
 	@Test
 	public void test_newTransaction_cancel()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transfer')]")).click();
-
 		// click cancel button
 		WebElement cancelButton = driver.findElement(By.id("button-cancel-save-transaction"));
 		((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", cancelButton);
@@ -113,9 +118,6 @@ public class NewTransactionTransferTest
 	@Test
 	public void test_newTransaction_transfer()
 	{
-		// open new transaction page
-		driver.findElement(By.xpath("//div[contains(@class, 'new-transaction-button')]//a[contains(text(),'Transfer')]")).click();
-
 		String name = "My transfer transaction";
 		String amount = "15.00";
 		String description = "Lorem Ipsum dolor sit amet";
-- 
GitLab