2023-08-04 19:33:57 -04:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
2024-03-09 08:44:06 -05:00
|
|
|
import os
|
|
|
|
import subprocess
|
|
|
|
import sys
|
|
|
|
import time
|
|
|
|
|
|
|
|
if sys.platform == 'haiku1':
|
|
|
|
print('Automation tests are disabled on Haiku.')
|
|
|
|
exit(0)
|
|
|
|
|
2023-08-02 20:30:48 -04:00
|
|
|
from selenium import webdriver
|
2024-02-21 20:06:25 -05:00
|
|
|
from selenium.webdriver.firefox.service import Service
|
2023-08-02 20:30:48 -04:00
|
|
|
from selenium.webdriver.common.by import By
|
|
|
|
from selenium.webdriver.support import expected_conditions
|
|
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
|
|
|
2023-08-02 20:44:35 -04:00
|
|
|
def exists_in_shadow_root(shadow_root, by, value):
|
|
|
|
return lambda driver: shadow_root.find_element(by, value)
|
|
|
|
|
2024-01-11 18:57:02 -05:00
|
|
|
success = False
|
2023-08-02 20:30:48 -04:00
|
|
|
try:
|
|
|
|
options = webdriver.FirefoxOptions()
|
2024-02-21 20:06:25 -05:00
|
|
|
service = Service(log_output = 'out/geckodriver.log')
|
2023-08-02 20:30:48 -04:00
|
|
|
#options.add_argument('--headless')
|
2024-02-21 20:06:25 -05:00
|
|
|
driver = webdriver.Firefox(options = options, service = service)
|
2023-08-09 18:38:41 -04:00
|
|
|
wait = WebDriverWait(driver, 10)
|
2024-09-17 12:47:28 -04:00
|
|
|
|
|
|
|
driver.get('http://localhost:8888')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.LINK_TEXT, 'login').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'register_label').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('adminuser')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('admin_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'confirm').send_keys('admin_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
|
|
|
driver.switch_to.frame(driver.find_element(By.ID, 'document'))
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT, 'identity')))
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
|
|
|
|
driver.get('http://localhost:8888/~core/admin/')
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
|
|
|
driver.switch_to.frame(driver.find_element(By.ID, 'document'))
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'gs_room_name'))).send_keys('test room')
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//*[@id="gs_room_name"]/following-sibling::button'))).click()
|
|
|
|
driver.switch_to.alert.accept()
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'identity').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
|
|
|
|
|
2023-08-02 20:30:48 -04:00
|
|
|
driver.get('http://localhost:8888')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.LINK_TEXT, 'login').click()
|
2023-08-09 18:38:41 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'register_label').click()
|
2024-03-31 16:15:50 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
|
2023-08-09 18:38:41 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'confirm').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
2023-08-02 20:30:48 -04:00
|
|
|
|
2024-10-23 18:48:42 -04:00
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
|
|
|
driver.get('http://localhost:8888/~testuser/test/')
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.LINK_TEXT, 'edit').click()
|
|
|
|
editor = driver.find_element(By.ID, 'editor').find_element(By.CLASS_NAME, 'cm-content')
|
|
|
|
editor.click()
|
|
|
|
editor.send_keys('app.setDocument("<div id=\'test-div\'>Hello, world!</div>")');
|
|
|
|
driver.find_element(By.ID, 'save').click()
|
|
|
|
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
|
|
|
driver.switch_to.frame(driver.find_element(By.ID, 'document'))
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'test-div')))
|
|
|
|
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
driver.find_element(By.ID, 'delete').click()
|
|
|
|
wait.until(expected_conditions.alert_is_present()).dismiss()
|
|
|
|
|
|
|
|
driver.get('http://localhost:8888')
|
|
|
|
|
2024-01-06 14:52:14 -05:00
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
2024-04-13 20:32:17 -04:00
|
|
|
driver.switch_to.frame(driver.find_element(By.ID, 'document'))
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT, 'identity')))
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'create_identity').click()
|
|
|
|
wait.until(expected_conditions.alert_is_present()).accept()
|
|
|
|
|
2024-01-06 14:52:14 -05:00
|
|
|
driver.switch_to.frame(driver.find_element(By.ID, 'document'))
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT, 'identity'))).click()
|
2024-04-13 20:32:17 -04:00
|
|
|
|
2024-03-31 16:15:50 -04:00
|
|
|
# StaleElementReferenceException
|
|
|
|
while True:
|
|
|
|
try:
|
2024-06-12 20:12:35 -04:00
|
|
|
driver.switch_to.default_content()
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
|
2024-03-31 16:15:50 -04:00
|
|
|
driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
|
2024-06-12 20:12:35 -04:00
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'create_id'))).click()
|
|
|
|
driver.switch_to.alert.accept()
|
2024-03-31 16:15:50 -04:00
|
|
|
break
|
|
|
|
except:
|
|
|
|
pass
|
2024-01-06 14:52:14 -05:00
|
|
|
|
2024-04-22 12:37:06 -04:00
|
|
|
# StaleElementReferenceException
|
|
|
|
while True:
|
|
|
|
try:
|
|
|
|
id0 = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'li'))).text.split(' ')[-1]
|
|
|
|
break
|
|
|
|
except:
|
|
|
|
pass
|
2024-01-06 14:52:14 -05:00
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//li/button[text()="Export Identity"]'))).click()
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//button[text()="✅ Allow"]'))).click()
|
|
|
|
driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
|
|
|
|
words = wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//li//textarea'))).get_attribute('value')
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//li/button[text()="Delete Identity"]'))).click()
|
|
|
|
driver.switch_to.alert.send_keys('DELETE')
|
|
|
|
driver.switch_to.alert.accept()
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.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'))))
|
|
|
|
words = wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//textarea'))).send_keys(words)
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//button[text()="Import Identity"]'))).click()
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.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 = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'li'))).text.split(' ')[-1]
|
|
|
|
|
|
|
|
driver.get('http://localhost:8888')
|
2023-08-09 18:38:41 -04:00
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
2023-08-02 20:30:48 -04:00
|
|
|
driver.switch_to.frame(driver.find_element(By.ID, 'document'))
|
2023-08-07 12:13:02 -04:00
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT, 'ssb'))).click()
|
2023-08-02 20:30:48 -04:00
|
|
|
driver.switch_to.default_content()
|
|
|
|
|
2023-08-09 18:38:41 -04:00
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
|
2024-04-13 20:32:17 -04:00
|
|
|
|
2024-03-31 16:15:50 -04:00
|
|
|
# StaleElementReferenceException
|
|
|
|
while True:
|
|
|
|
try:
|
|
|
|
driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
|
|
|
|
break
|
|
|
|
except:
|
|
|
|
pass
|
2023-12-30 21:41:16 -05:00
|
|
|
# NoSuchShadowRootException
|
2023-12-30 22:09:15 -05:00
|
|
|
while True:
|
2023-12-30 21:41:16 -05:00
|
|
|
try:
|
|
|
|
tf_app = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root
|
|
|
|
break
|
|
|
|
except:
|
|
|
|
pass
|
2023-08-02 20:44:35 -04:00
|
|
|
|
2024-05-11 09:03:56 -04:00
|
|
|
# WebDriverException (shadow root is detached)
|
|
|
|
while True:
|
|
|
|
try:
|
|
|
|
tf_tab_news = wait.until(exists_in_shadow_root(tf_app, By.ID, 'tf-tab-news')).shadow_root
|
|
|
|
tf_tab_news.find_element(By.ID, 'tf-compose').shadow_root.find_element(By.ID, 'edit').send_keys('Hello, world!')
|
|
|
|
tf_tab_news.find_element(By.ID, 'tf-compose').shadow_root.find_element(By.ID, 'submit').click()
|
|
|
|
break
|
|
|
|
except:
|
|
|
|
pass
|
2023-08-02 20:30:48 -04:00
|
|
|
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
driver.find_element(By.ID, 'allow').click()
|
|
|
|
|
2024-06-20 20:41:27 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'identity').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
|
2023-08-09 18:38:41 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
|
2024-03-31 16:15:50 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
|
2023-08-09 18:38:41 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
|
|
|
|
|
2024-06-20 20:41:27 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'identity').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
|
2023-08-09 18:38:41 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'guest_label').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'guestButton').click()
|
|
|
|
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
|
|
|
|
driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root
|
|
|
|
driver.switch_to.default_content()
|
|
|
|
|
2024-06-20 20:41:27 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
|
2023-08-09 18:38:41 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
|
|
|
|
|
2024-03-31 16:15:50 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
|
2023-08-09 18:38:41 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('wrong_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error')
|
|
|
|
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('wrong_user')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error')
|
|
|
|
|
2023-09-22 18:41:47 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'register_label').click()
|
2024-03-31 16:15:50 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
|
2023-09-22 18:41:47 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('wrong_test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'confirm').send_keys('wrong_test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error')
|
|
|
|
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'register_label').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('1invalid')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'confirm').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error')
|
|
|
|
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'register_label').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('😁')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'confirm').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error')
|
|
|
|
|
2023-09-22 18:59:26 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'change_label').click()
|
2024-03-31 16:15:50 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
|
2023-09-22 18:59:26 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'new_password').send_keys('new_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'confirm').send_keys('new_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
2024-06-20 20:41:27 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'identity').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
|
2023-09-22 18:59:26 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
|
2024-03-31 16:15:50 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
|
2023-09-22 18:59:26 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
|
2024-03-31 16:15:50 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
|
2023-09-22 18:59:26 -04:00
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('new_password')
|
|
|
|
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
|
|
|
|
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
|
|
|
|
|
2024-01-11 18:57:02 -05:00
|
|
|
success = True
|
2023-08-02 20:30:48 -04:00
|
|
|
finally:
|
|
|
|
driver.close()
|
|
|
|
driver.quit()
|
|
|
|
|
2024-01-11 18:57:02 -05:00
|
|
|
if success:
|
|
|
|
print('\033[92mTEST SUCCEEDED.\033[0m')
|
|
|
|
else:
|
|
|
|
print('\033[91mTEST FAILED.\033[0m')
|