tildefriends/tools/autotest.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

261 lines
14 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import os
import subprocess
import sys
import time
if sys.platform == 'haiku1':
print('Automation tests are disabled on Haiku.')
exit(0)
import selenium
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
def select(driver, path, action = None):
start_time = time.time()
while True:
try:
driver.switch_to.default_content()
context = driver
for node in path:
if node[0] == 'tag':
context = context.find_element(By.TAG_NAME, node[1])
elif node[0] == 'id':
context = context.find_element(By.ID, node[1])
elif node[0] == 'xpath':
context = context.find_element(By.XPATH, node[1])
elif node[0] == 'link_text':
context = context.find_element(By.LINK_TEXT, node[1])
elif node[0] == 'class_name':
context = context.find_element(By.CLASS_NAME, node[1])
elif node[0] == 'shadow_root':
context = context.shadow_root
elif node[0] == 'frame':
driver.switch_to.frame(context)
context = driver
else:
raise RuntimeError(f'Unexpected path node: {node}.')
if action is not None:
if action[0] == 'click':
context.click()
elif action[0] == 'send_keys':
context.send_keys(action[1])
elif action[0] == 'clear':
context.clear()
else:
raise RuntimeError(f'Unexpected action: {action}.')
break
else:
return context
except selenium.common.exceptions.NoSuchElementException:
if time.time() - start_time < 5.0:
time.sleep(0.1)
pass
except selenium.common.exceptions.NoSuchShadowRootException:
if time.time() - start_time < 5.0:
time.sleep(0.1)
pass
except selenium.common.exceptions.StaleElementReferenceException:
if time.time() - start_time < 5.0:
time.sleep(0.1)
pass
except selenium.common.exceptions.WebDriverException:
if time.time() - start_time < 5.0:
time.sleep(0.1)
pass
success = False
try:
options = webdriver.FirefoxOptions()
service = Service(log_output = 'out/geckodriver.log')
#options.add_argument('--headless')
driver = webdriver.Firefox(options = options, service = service)
wait = WebDriverWait(driver, 10)
driver.get('http://localhost:8888')
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('link_text', 'login')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'register_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'adminuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'admin_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'confirm')], ('send_keys', 'admin_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('id', 'document'), ('frame',), ('link_text', 'identity')])
driver.get('http://localhost:8888/~core/admin/')
select(driver, [('id', 'document'), ('frame',), ('id', 'gs_room_name')], ('send_keys', 'test room'))
select(driver, [('id', 'document'), ('frame',), ('xpath', '//*[@id="gs_room_name"]/following-sibling::button')], ('click',))
driver.switch_to.alert.accept()
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'identity')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'logout')], ('click',))
driver.get('http://localhost:8888')
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('link_text', 'login')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'register_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'testuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'confirm')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('id', 'document')])
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'create_identity')], ('click',))
wait.until(expected_conditions.alert_is_present()).accept()
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'identity')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'id_dropdown'), ('xpath', '//button[position()=2]')], ('click',))
select(driver, [('id', 'document'), ('frame',), ('tag', 'tf-app'), ('shadow_root',), ('id', 'tf-tab-news'), ('shadow_root',), ('class_name', 'tf-profile'), ('shadow_root',), ('id', 'edit_profile')], ('click',))
select(driver, [('id', 'document'), ('frame',), ('tag', 'tf-app'), ('shadow_root',), ('id', 'tf-tab-news'), ('shadow_root',), ('class_name', 'tf-profile'), ('shadow_root',), ('id', 'name')], ('send_keys', 'user'))
select(driver, [('id', 'document'), ('frame',), ('tag', 'tf-app'), ('shadow_root',), ('id', 'tf-tab-news'), ('shadow_root',), ('class_name', 'tf-profile'), ('shadow_root',), ('id', 'save_profile')], ('click',))
select(driver, [('xpath', '//button[text()="✅ Allow"]')], ('click',))
driver.get('http://localhost:8888/~testuser/test/')
select(driver, [('id', 'document')])
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'close_error')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('link_text', 'edit')], ('click',))
select(driver, [('id', 'editor'), ('class_name', 'cm-content')], ('click',))
select(driver, [('id', 'editor'), ('class_name', 'cm-content')], ('send_keys', 'app.setDocument(\n\t"<div id=\'test-div\'>Hello, world!</div>"\n);'))
select(driver, [('id', 'save')], ('click',))
select(driver, [('id', 'document'), ('frame',), ('id', 'test-div')])
size = driver.get_window_size()
driver.set_window_size(1200, 540)
driver.save_screenshot('out/screenshot0.png')
driver.set_window_size(size['width'], size['height'])
select(driver, [('id', 'editor'), ('class_name', 'cm-content')], ('click',))
select(driver, [('id', 'editor'), ('class_name', 'cm-content')], ('clear',))
select(driver, [('id', 'editor'), ('class_name', 'cm-content')], ('send_keys', 'app.setDocument("<div id=\'test-div2\'>Hello, world, again!</div>")'))
select(driver, [('id', 'save')], ('click',))
select(driver, [('id', 'document'), ('frame',), ('id', 'test-div2')])
select(driver, [('id', 'delete')], ('click',))
wait.until(expected_conditions.alert_is_present()).accept()
wait.until(expected_conditions.alert_is_present()).dismiss()
driver.get('http://localhost:8888/~testuser/test/')
select(driver, [('id', 'document')])
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'close_error')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('link_text', 'edit')], ('click',))
driver.get('http://localhost:8888')
select(driver, [('id', 'document'), ('frame',), ('link_text', 'identity')])
2024-04-13 20:32:17 -04:00
size = driver.get_window_size()
driver.set_window_size(540, 1200)
driver.save_screenshot('out/screenshot1.png')
driver.set_window_size(size['width'], size['height'])
select(driver, [('id', 'document'), ('frame',), ('link_text', 'identity')], ('click',))
2024-04-13 20:32:17 -04:00
select(driver, [('id', 'document'), ('frame',), ('id', 'create_id')], ('click',))
id0 = select(driver, [('id', 'document'), ('frame',), ('tag', 'li')]).text.split(' ')[-1]
select(driver, [('id', 'document'), ('frame',), ('xpath', '//li/button[text()="Export Identity"]')], ('click',))
select(driver, [('xpath', '//button[text()="✅ Allow"]')], ('click',))
words = select(driver, [('id', 'document'), ('frame',), ('xpath', '//li//textarea')]).get_attribute('value')
select(driver, [('id', 'document'), ('frame',), ('xpath', '//li/button[text()="Delete Identity"]')], ('click',))
driver.switch_to.alert.send_keys('DELETE')
driver.switch_to.alert.accept()
select(driver, [('xpath', '//button[text()="✅ Allow"]')], ('click',))
driver.switch_to.alert.accept()
words = select(driver, [('id', 'document'), ('frame',), ('xpath', '//textarea')], ('send_keys', words))
select(driver, [('id', 'document'), ('frame',), ('xpath', '//button[text()="Import Identity"]')], ('click',))
select(driver, [('xpath', '//button[text()="✅ Allow"]')], ('click',))
driver.switch_to.alert.accept()
driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
id1 = select(driver, [('id', 'document'), ('frame',), ('tag', 'li')]).text.split(' ')[-1]
assert id0 == id1
driver.get('http://localhost:8888')
select(driver, [('id', 'document'), ('frame',), ('link_text', 'ssb')], ('click',))
select(driver, [('id', 'document'), ('frame',), ('tag', 'tf-app'), ('shadow_root',), ('id', 'tf-tab-news'), ('shadow_root',), ('id', 'tf-compose'), ('shadow_root',), ('id', 'edit')], ('send_keys', 'Hello, world!'))
select(driver, [('id', 'document'), ('frame',), ('tag', 'tf-app'), ('shadow_root',), ('id', 'tf-tab-news'), ('shadow_root',), ('id', 'tf-compose'), ('shadow_root',), ('id', 'submit')], ('click',))
select(driver, [('xpath', '//button[text()="✅ Allow"]')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'identity')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'logout')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'login_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'testuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'identity')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'logout')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'guest_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'guestButton')], ('click',))
select(driver, [('id', 'document'), ('frame',), ('tag', 'tf-app'), ('shadow_root',)])
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'logout')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'login_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'testuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'wrong_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'error')])
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'wrong_user'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'error')])
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'register_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'testuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'wrong_test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'confirm')], ('send_keys', 'wrong_test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'error')])
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'register_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'testuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'confirm')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'error')])
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'register_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', '😁'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'confirm')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'error')])
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'change_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'testuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'new_password')], ('send_keys', 'new_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'confirm')], ('send_keys', 'new_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('id', 'document'), ('frame',)])
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'identity')], ('click',))
select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'logout')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'login_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'testuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'test_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'error')])
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'login_label')], ('click',))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'name')], ('send_keys', 'testuser'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'password')], ('send_keys', 'new_password'))
select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'loginButton')], ('click',))
select(driver, [('id', 'document'), ('frame',)])
success = True
finally:
driver.close()
driver.quit()
if success:
print('\033[92mTEST SUCCEEDED.\033[0m')
else:
print('\033[91mTEST FAILED.\033[0m')