From 7acf6e5f9a3761fdcc9e8b66b39adc5c8da0e6cd Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Sat, 25 Jun 2022 12:19:17 +0200
Subject: [PATCH] [Selenium] Use WebDriverWait to find elements by xpath

---
 aleksis/core/tests/browser/test_selenium.py | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/aleksis/core/tests/browser/test_selenium.py b/aleksis/core/tests/browser/test_selenium.py
index e14ad8b9f..5e9c4dfa3 100644
--- a/aleksis/core/tests/browser/test_selenium.py
+++ b/aleksis/core/tests/browser/test_selenium.py
@@ -7,6 +7,8 @@ from django.test.selenium import SeleniumTestCase, SeleniumTestCaseBase
 from django.urls import reverse
 
 import pytest
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
 from selenium.webdriver.support.wait import WebDriverWait
 
 from aleksis.core.models import Person
@@ -43,17 +45,25 @@ class SeleniumTests(SeleniumTestCase):
             self._screenshot("login_default_superuser_blank.png")
 
         # Find login form input fields and enter defined credentials
-        self.selenium.find_element_by_xpath(
-            '//label[contains(text(), "Username")]/../input'
+        WebDriverWait(self.selenium, 10).until(
+            EC.element_to_be_clickable(
+                (By.XPATH, '//label[contains(text(), "Username")]/../input'),
+            )
         ).send_keys(username)
-        self.selenium.find_element_by_xpath(
-            '//label[contains(text(), "Password")]/../input'
+        WebDriverWait(self.selenium, 10).until(
+            EC.element_to_be_clickable(
+                (By.XPATH, '//label[contains(text(), "Password")]/../input'),
+            )
         ).send_keys(password)
         if with_screenshots:
             self._screenshot("login_default_superuser_filled.png")
 
         # Submit form by clicking django-two-factor-auth's Next button
-        self.selenium.find_element_by_xpath('//button[contains(text(), "Login")]').click()
+        WebDriverWait(self.selenium, 10).until(
+            EC.element_to_be_clickable(
+                (By.XPATH, '//button[contains(text(), "Login")]'),
+            )
+        ).click()
         if with_screenshots:
             self._screenshot("login_default_superuser_submitted.png")
 
-- 
GitLab