diff --git a/tools/autotest.py b/tools/autotest.py
index 5eb37f4dd..b5a7a9dfa 100755
--- a/tools/autotest.py
+++ b/tools/autotest.py
@@ -9,14 +9,65 @@ 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 exists_in_shadow_root(shadow_root, by, value):
- return lambda driver: shadow_root.find_element(by, value)
+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:
@@ -27,290 +78,176 @@ try:
wait = WebDriverWait(driver, 10)
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()
+ 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/')
- 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()
+ 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()
- 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()
+ 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')
- 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('testuser')
- 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()
+ 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')])
- wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
-
- driver.switch_to.default_content()
- driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'create_identity').click()
+ select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'create_identity')], ('click',))
wait.until(expected_conditions.alert_is_present()).accept()
- wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
+ 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',))
- 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, 'id_dropdown').find_element(By.XPATH, '//button[position()=2]').click()
- wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
- driver.switch_to.frame(driver.find_element(By.ID, 'document'))
- # NoSuchShadowRootException
- while True:
- try:
- tf_app = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root
- break
- except:
- pass
- wait.until(exists_in_shadow_root(wait.until(exists_in_shadow_root(tf_app, By.ID, 'tf-tab-news')).shadow_root, By.CLASS_NAME, 'tf-profile')).shadow_root.find_element(By.ID, 'edit_profile').click()
- wait.until(exists_in_shadow_root(wait.until(exists_in_shadow_root(tf_app, By.ID, 'tf-tab-news')).shadow_root, By.CLASS_NAME, 'tf-profile')).shadow_root.find_element(By.ID, 'name').send_keys('user')
- wait.until(exists_in_shadow_root(wait.until(exists_in_shadow_root(tf_app, By.ID, 'tf-tab-news')).shadow_root, By.CLASS_NAME, 'tf-profile')).shadow_root.find_element(By.ID, 'save_profile').click()
- driver.switch_to.default_content()
- wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//button[text()="✅ Allow"]'))).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.switch_to.default_content()
driver.get('http://localhost:8888/~testuser/test/')
- wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
- while True:
- try:
- wait.until(exists_in_shadow_root(driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root, By.ID, 'close_error')).click()
- break
- except:
- pass
+ 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"
Hello, world!
"\n);'))
+ select(driver, [('id', 'save')], ('click',))
- driver.switch_to.default_content()
- 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(\n\t"Hello, world!
"\n);');
- 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')))
+ 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'])
- driver.switch_to.default_content()
- editor = driver.find_element(By.ID, 'editor').find_element(By.CLASS_NAME, 'cm-content')
- editor.click()
- editor.clear()
- editor.send_keys('app.setDocument("Hello, world, again!
")');
- driver.find_element(By.ID, 'save').click()
+ 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("Hello, world, again!
")'))
+ select(driver, [('id', 'save')], ('click',))
+ select(driver, [('id', 'document'), ('frame',), ('id', 'test-div2')])
- 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-div2')))
-
- driver.switch_to.default_content()
- driver.find_element(By.ID, 'delete').click()
+ 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/')
- wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
- while True:
- try:
- wait.until(exists_in_shadow_root(driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root, By.ID, 'close_error')).click()
- break
- except:
- pass
- driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.LINK_TEXT, 'edit').click()
+
+ 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')
- 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')))
+ select(driver, [('id', 'document'), ('frame',), ('link_text', 'identity')])
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'])
- wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT, 'identity'))).click()
+ select(driver, [('id', 'document'), ('frame',), ('link_text', 'identity')], ('click',))
- # StaleElementReferenceException
- while True:
- try:
- driver.switch_to.default_content()
- 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.ID, 'create_id'))).click()
- driver.switch_to.alert.accept()
- break
- except:
- pass
+ select(driver, [('id', 'document'), ('frame',), ('id', 'create_id')], ('click',))
+ id0 = select(driver, [('id', 'document'), ('frame',), ('tag', 'li')]).text.split(' ')[-1]
- # StaleElementReferenceException
- while True:
- try:
- id0 = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'li'))).text.split(' ')[-1]
- break
- except:
- pass
- 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()
+ 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()
- driver.switch_to.default_content()
- wait.until(expected_conditions.presence_of_element_located((By.XPATH, '//button[text()="✅ Allow"]'))).click()
+ 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'))))
- 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]
+ id1 = select(driver, [('id', 'document'), ('frame',), ('tag', 'li')]).text.split(' ')[-1]
+ assert id0 == id1
driver.get('http://localhost:8888')
- 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, 'ssb'))).click()
- driver.switch_to.default_content()
+ 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',))
- wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
+ 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',))
- # StaleElementReferenceException
- while True:
- try:
- driver.switch_to.frame(wait.until(expected_conditions.presence_of_element_located((By.ID, 'document'))))
- break
- except:
- pass
- # NoSuchShadowRootException
- while True:
- try:
- tf_app = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root
- break
- except:
- pass
+ 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',)])
- # 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
+ select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'logout')], ('click',))
+ select(driver, [('tag', 'tf-auth'), ('shadow_root',), ('id', 'login_label')], ('click',))
- driver.switch_to.default_content()
- driver.find_element(By.ID, 'allow').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')])
- 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()
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
- 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()
+ 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')])
- wait.until(expected_conditions.presence_of_element_located((By.ID, 'content')))
+ 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')])
- while True:
- try:
- driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'identity').click()
- break
- except:
- pass
- driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
- 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()
+ 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')])
- 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'))))
- # NoSuchShadowRootException
- while True:
- try:
- tf_app = wait.until(expected_conditions.presence_of_element_located((By.TAG_NAME, 'tf-app'))).shadow_root
- break
- except:
- pass
- driver.switch_to.default_content()
+ 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')])
- driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
+ 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',)])
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
- 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')
-
- 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('testuser')
- 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')
-
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'change_label').click()
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
- 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')))
- while True:
- try:
- driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'identity').click()
- break
- except:
- pass
- driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.ID, 'logout').click()
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
- 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()
- driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('testuser')
- 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')))
+ 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: