diff --git a/tools/autotest.py b/tools/autotest.py index b5a7a9df..0d674069 100755 --- a/tools/autotest.py +++ b/tools/autotest.py @@ -23,23 +23,21 @@ def select(driver, path, action = None): 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': + if node.startswith('#'): + context = context.find_element(By.ID, node[1:]) + elif node.startswith('/'): + context = context.find_element(By.XPATH, node) + elif node.startswith('.'): + context = context.find_element(By.CLASS_NAME, node[1:]) + elif node.startswith('='): + context = context.find_element(By.LINK_TEXT, node[1:]) + elif node == 'frame': driver.switch_to.frame(context) context = driver + elif node == 'shadow_root': + context = context.shadow_root else: - raise RuntimeError(f'Unexpected path node: {node}.') + context = context.find_element(By.TAG_NAME, node) if action is not None: if action[0] == 'click': context.click() @@ -52,19 +50,10 @@ def select(driver, path, action = None): 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: + except (selenium.common.exceptions.NoSuchElementException, + selenium.common.exceptions.NoSuchShadowRootException, + selenium.common.exceptions.StaleElementReferenceException, + selenium.common.exceptions.WebDriverException): if time.time() - start_time < 5.0: time.sleep(0.1) pass @@ -78,176 +67,176 @@ try: 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')]) + select(driver, ['tf-navigation', 'shadow_root', '=login'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#register_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'adminuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'admin_password')) + select(driver, ['tf-auth', 'shadow_root', '#confirm'], ('send_keys', 'admin_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['#document', 'frame', '=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',)) + select(driver, ['#document', 'frame', '#gs_room_name'], ('send_keys', 'test room')) + select(driver, ['#document', 'frame', '//*[@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',)) + select(driver, ['tf-navigation', 'shadow_root', '#identity'], ('click',)) + select(driver, ['tf-navigation', 'shadow_root', '#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, ['tf-navigation', 'shadow_root', '=login'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#register_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'testuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#confirm'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['#document']) - select(driver, [('tag', 'tf-navigation'), ('shadow_root',), ('id', 'create_identity')], ('click',)) + select(driver, ['tf-navigation', 'shadow_root', '#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, ['tf-navigation', 'shadow_root', '#identity'], ('click',)) + select(driver, ['tf-navigation', 'shadow_root', '#id_dropdown', '//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, ['#document', 'frame', 'tf-app', 'shadow_root', '#tf-tab-news', 'shadow_root', '.tf-profile', 'shadow_root', '#edit_profile'], ('click',)) + select(driver, ['#document', 'frame', 'tf-app', 'shadow_root', '#tf-tab-news', 'shadow_root', '.tf-profile', 'shadow_root', '#name'], ('send_keys', 'user')) + select(driver, ['#document', 'frame', 'tf-app', 'shadow_root', '#tf-tab-news', 'shadow_root', '.tf-profile', 'shadow_root', '#save_profile'], ('click',)) - select(driver, [('xpath', '//button[text()="✅ Allow"]')], ('click',)) + select(driver, ['//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"
Hello, world!
"\n);')) - select(driver, [('id', 'save')], ('click',)) + select(driver, ['#document']) + select(driver, ['tf-navigation', 'shadow_root', '#close_error'], ('click',)) + select(driver, ['tf-navigation', 'shadow_root', '=edit'], ('click',)) + select(driver, ['#editor', '.cm-content'], ('click',)) + select(driver, ['#editor', '.cm-content'], ('send_keys', 'app.setDocument(\n\t"
Hello, world!
"\n);')) + select(driver, ['#save'], ('click',)) - select(driver, [('id', 'document'), ('frame',), ('id', 'test-div')]) + select(driver, ['#document', 'frame', '#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("
Hello, world, again!
")')) - select(driver, [('id', 'save')], ('click',)) - select(driver, [('id', 'document'), ('frame',), ('id', 'test-div2')]) + select(driver, ['#editor', '.cm-content'], ('click',)) + select(driver, ['#editor', '.cm-content'], ('clear',)) + select(driver, ['#editor', '.cm-content'], ('send_keys', 'app.setDocument("
Hello, world, again!
")')) + select(driver, ['#save'], ('click',)) + select(driver, ['#document', 'frame', '#test-div2']) - select(driver, [('id', 'delete')], ('click',)) + select(driver, ['#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',)) + select(driver, ['#document']) + select(driver, ['tf-navigation', 'shadow_root', '#close_error'], ('click',)) + select(driver, ['tf-navigation', 'shadow_root', '=edit'], ('click',)) driver.get('http://localhost:8888') - select(driver, [('id', 'document'), ('frame',), ('link_text', 'identity')]) + select(driver, ['#document', 'frame', '=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']) - select(driver, [('id', 'document'), ('frame',), ('link_text', 'identity')], ('click',)) + select(driver, ['#document', 'frame', '=identity'], ('click',)) - select(driver, [('id', 'document'), ('frame',), ('id', 'create_id')], ('click',)) - id0 = select(driver, [('id', 'document'), ('frame',), ('tag', 'li')]).text.split(' ')[-1] + select(driver, ['#document', 'frame', '#create_id'], ('click',)) + id0 = select(driver, ['#document', 'frame', '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',)) + select(driver, ['#document', 'frame', '//li/button[text()="Export Identity"]'], ('click',)) + select(driver, ['//button[text()="✅ Allow"]'], ('click',)) + words = select(driver, ['#document', 'frame', '//li//textarea']).get_attribute('value') + select(driver, ['#document', 'frame', '//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',)) + select(driver, ['//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',)) + words = select(driver, ['#document', 'frame', '//textarea'], ('send_keys', words)) + select(driver, ['#document', 'frame', '//button[text()="Import Identity"]'], ('click',)) + select(driver, ['//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] + id1 = select(driver, ['#document', 'frame', '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, ['#document', 'frame', '=ssb'], ('click',)) + select(driver, ['#document', 'frame', 'tf-app', 'shadow_root', '#tf-tab-news', 'shadow_root', '#tf-compose', 'shadow_root', '#edit'], ('send_keys', 'Hello, world!')) + select(driver, ['#document', 'frame', 'tf-app', 'shadow_root', '#tf-tab-news', 'shadow_root', '#tf-compose', 'shadow_root', '#submit'], ('click',)) + select(driver, ['//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, ['tf-navigation', 'shadow_root', '#identity'], ('click',)) + select(driver, ['tf-navigation', 'shadow_root', '#logout'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#login_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'testuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#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, ['tf-navigation', 'shadow_root', '#identity'], ('click',)) + select(driver, ['tf-navigation', 'shadow_root', '#logout'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#guest_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#guestButton'], ('click',)) + select(driver, ['#document', 'frame', '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, ['tf-navigation', 'shadow_root', '#logout'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#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, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'testuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'wrong_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#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, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'wrong_user')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#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, ['tf-auth', 'shadow_root', '#register_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'testuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'wrong_test_password')) + select(driver, ['tf-auth', 'shadow_root', '#confirm'], ('send_keys', 'wrong_test_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#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, ['tf-auth', 'shadow_root', '#register_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'testuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#confirm'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#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, ['tf-auth', 'shadow_root', '#register_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', '😁')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#confirm'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#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, ['tf-auth', 'shadow_root', '#change_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'testuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#new_password'], ('send_keys', 'new_password')) + select(driver, ['tf-auth', 'shadow_root', '#confirm'], ('send_keys', 'new_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['#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',)]) + select(driver, ['tf-navigation', 'shadow_root', '#identity'], ('click',)) + select(driver, ['tf-navigation', 'shadow_root', '#logout'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#login_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'testuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'test_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#error']) + select(driver, ['tf-auth', 'shadow_root', '#login_label'], ('click',)) + select(driver, ['tf-auth', 'shadow_root', '#name'], ('send_keys', 'testuser')) + select(driver, ['tf-auth', 'shadow_root', '#password'], ('send_keys', 'new_password')) + select(driver, ['tf-auth', 'shadow_root', '#loginButton'], ('click',)) + select(driver, ['#document', 'frame']) success = True finally: