Spaces:
Sleeping
Sleeping
| 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): | |
| 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) | |
| 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() | |