echo-light / test_echo_light_app.py
Nanny7's picture
Echo Light initial Docker Space
0b5541b
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
class EchoLightAppTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
# Adjust the path to your chromedriver if needed
cls.driver = webdriver.Chrome()
cls.driver.get('http://localhost:5500/index.html') # Use your local server/port
cls.driver.maximize_window()
cls.wait = WebDriverWait(cls.driver, 10)
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def test_1_text_chat(self):
driver = self.driver
wait = self.wait
# Find input and send a message
input_box = wait.until(EC.presence_of_element_located((By.ID, 'messageInput')))
input_box.clear()
input_box.send_keys('Hello, how are you?')
input_box.send_keys(Keys.ENTER)
# Wait for echo reply
wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, '.message.echo')) > 0)
messages = driver.find_elements(By.CSS_SELECTOR, '.message.echo')
self.assertTrue(any('how are you' in m.text.lower() or m.text for m in messages))
def test_2_empty_message(self):
driver = self.driver
wait = self.wait
input_box = wait.until(EC.presence_of_element_located((By.ID, 'messageInput')))
input_box.clear()
input_box.send_keys(' ')
input_box.send_keys(Keys.ENTER)
# No new user message should be added
time.sleep(1)
user_msgs = driver.find_elements(By.CSS_SELECTOR, '.message.user')
self.assertFalse(user_msgs[-1].text.strip() == '')
def test_3_modes_navigation(self):
driver = self.driver
wait = self.wait
# Modes grid
modes = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.mode-card')))
for mode in modes:
mode.click()
time.sleep(0.5)
# Check that the screen is active
active = driver.find_elements(By.CSS_SELECTOR, '.screen.active')
self.assertTrue(len(active) > 0)
def test_4_vocabulary_card(self):
driver = self.driver
wait = self.wait
# Go to vocabulary mode
vocab_mode = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.mode-card')))[1]
vocab_mode.click()
time.sleep(0.5)
# Check card content
word = driver.find_element(By.ID, 'cardWord').text
self.assertTrue(len(word) > 0)
# Next card
next_btn = driver.find_element(By.ID, 'nextCardBtn') if driver.find_elements(By.ID, 'nextCardBtn') else None
if next_btn:
next_btn.click()
time.sleep(0.5)
new_word = driver.find_element(By.ID, 'cardWord').text
self.assertNotEqual(word, new_word)
def test_5_achievements(self):
driver = self.driver
wait = self.wait
# Go to achievements/progress screen
progress_btn = driver.find_element(By.ID, 'progressBtn') if driver.find_elements(By.ID, 'progressBtn') else None
if progress_btn:
progress_btn.click()
time.sleep(0.5)
achievements = driver.find_elements(By.CSS_SELECTOR, '.achievement-card')
self.assertTrue(len(achievements) > 0)
if __name__ == '__main__':
unittest.main()