echo-light / test_echo_light_app.py
Nanny7's picture
Echo Light initial Docker Space
0b5541b
Raw History Blame Contribute Delete
3.52 kB
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()