#!/usr/bin/env python3 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.ui import WebDriverWait import os import subprocess import time for path in ('out/selenium.sqlite', 'out/selenium.sqlite-shm', 'out/selenium.sqlite-wal'): try: os.unlink(path) except: pass tf = subprocess.Popen(['out/debug/tildefriends', 'run', '-d', 'out/selenium.sqlite', '-b', '0', '-p', '8888']) def exists_in_shadow_root(shadow_root, by, value): return lambda driver: shadow_root.find_element(by, value) try: options = webdriver.FirefoxOptions() #options.add_argument('--headless') driver = webdriver.Firefox(options = options) 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.ID, 'register').click() driver.find_element(By.ID, 'name').send_keys('test_user') driver.find_element(By.ID, 'password').send_keys('test_password') driver.find_element(By.ID, 'confirm').send_keys('test_password') driver.find_element(By.ID, 'loginButton').click() driver.switch_to.frame(driver.find_element(By.ID, 'document')) WebDriverWait(driver, 30).until(expected_conditions.presence_of_element_located((By.LINK_TEXT, 'ssb'))).click() driver.switch_to.default_content() driver.switch_to.frame(WebDriverWait(driver, 30).until(expected_conditions.presence_of_element_located((By.ID, 'document')))) tf_app = WebDriverWait(driver, 30).until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root WebDriverWait(driver, 30).until(expected_conditions.element_to_be_clickable(tf_app.find_element(By.ID, 'create_identity'))).click() WebDriverWait(driver, 30).until(expected_conditions.alert_is_present()).accept() tf_tab_news = WebDriverWait(driver, 30).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() driver.switch_to.default_content() driver.find_element(By.ID, 'allow').click() print('SUCCESS.') finally: driver.close() driver.quit() tf.terminate()