)]}'
{"openstack_dashboard/test/integration_tests/scenarios/conftest.py":[{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"b07eb00a29361ec06270ca608e30fe92b2ea482b","unresolved":true,"context_lines":[{"line_number":263,"context_line":"    pass"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"# Instances"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"@pytest.fixture"},{"line_number":269,"context_line":"def instance_name():"}],"source_content_type":"text/x-python","patch_set":18,"id":"254e495d_96f8419b","line":266,"range":{"start_line":266,"start_character":0,"end_line":266,"end_character":11},"updated":"2023-07-21 11:44:00.000000000","message":"I prefer to have all general fixtures here (not openstackSDK fixture for create instances defined in test_instances.py). For some tests like \"test_create_instance_from_volume\" we use fixtures openstackSDK for create/delete instance and also fixtures openstackSDK for create/delete volumes. The same of other types of tests.","commit_id":"15456459168545654d1addb59bbdab8f076ad112"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"d70dd6aeaf15f1bbcb779f1334d06e3d7608a78c","unresolved":false,"context_lines":[{"line_number":263,"context_line":"    pass"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"# Instances"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"@pytest.fixture"},{"line_number":269,"context_line":"def instance_name():"}],"source_content_type":"text/x-python","patch_set":18,"id":"1095be91_8fdd1cb8","line":266,"range":{"start_line":266,"start_character":0,"end_line":266,"end_character":11},"in_reply_to":"254e495d_96f8419b","updated":"2023-07-26 06:37:42.000000000","message":"Done","commit_id":"15456459168545654d1addb59bbdab8f076ad112"}],"openstack_dashboard/test/integration_tests/scenarios/test_instances.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"4f7b5e72573ad9bb0cf8f652933246b153c03e4d","unresolved":true,"context_lines":[{"line_number":50,"context_line":"                [@class\u003d\u0027btn btn-default fa fa-arrow-down\u0027]\")"},{"line_number":51,"context_line":"        except:"},{"line_number":52,"context_line":"            print(f\"Element {label} does not exist\")"},{"line_number":53,"context_line":"            assert False"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def create_new_volume_during_create_instance(element, required_state):"},{"line_number":56,"context_line":"    create_new_volume_btn \u003d element.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":16,"id":"466057d8_c4b0b940","line":53,"updated":"2023-07-11 12:08:03.000000000","message":"Let\u0027s not use asserts outside of the tests themselves. Just let the exception propagate.","commit_id":"f7ec5a1b743af48aeff3b800a2020dea866019f7"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"6bf5e53e7484ee5888da448992d28ba6cc21ca7a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                [@class\u003d\u0027btn btn-default fa fa-arrow-down\u0027]\")"},{"line_number":51,"context_line":"        except:"},{"line_number":52,"context_line":"            print(f\"Element {label} does not exist\")"},{"line_number":53,"context_line":"            assert False"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def create_new_volume_during_create_instance(element, required_state):"},{"line_number":56,"context_line":"    create_new_volume_btn \u003d element.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":16,"id":"8bbe6a0e_9eab9b58","line":53,"in_reply_to":"466057d8_c4b0b940","updated":"2023-07-18 13:30:56.000000000","message":"Done","commit_id":"f7ec5a1b743af48aeff3b800a2020dea866019f7"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"7c0729bc7f77a77a6257ec20596b639c9e03d379","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        f\"//*[@id\u003d\u0027vol-create\u0027][text()\u003d\u0027{required_state}\u0027]\", driver"},{"line_number":59,"context_line":"    )"},{"line_number":60,"context_line":"    create_new_volume_btn.click()"},{"line_number":61,"context_line":"    time.sleep(3)"},{"line_number":62,"context_line":"    if \u0027active\u0027 not in create_new_volume_btn.get_attribute(\"class\"):"},{"line_number":63,"context_line":"        create_new_volume_btn.click()"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"010b4edb_df043b3c","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":17},"updated":"2023-07-18 12:19:48.000000000","message":"button-group YES/NO is set immediately to default state. After 1-2s is set to the same default state again. There is not any difference between element before and after. So there is not possibility to wait for the second set (if there is not any indicator the second set happened).","commit_id":"963633da1602e4052009fa7283c67a976fea63d2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"e76ffb6708b3eb7980fae072d1ef5aef595f05da","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        f\"//*[@id\u003d\u0027vol-create\u0027][text()\u003d\u0027{required_state}\u0027]\", driver"},{"line_number":59,"context_line":"    )"},{"line_number":60,"context_line":"    create_new_volume_btn.click()"},{"line_number":61,"context_line":"    time.sleep(3)"},{"line_number":62,"context_line":"    if \u0027active\u0027 not in create_new_volume_btn.get_attribute(\"class\"):"},{"line_number":63,"context_line":"        create_new_volume_btn.click()"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"95cd0de9_053e4885","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":17},"in_reply_to":"010b4edb_df043b3c","updated":"2023-07-24 08:09:52.000000000","message":"It looked that the \"double setting\" is executed after specific tab (Source) is opened. It is not true and this double settings is executed no matter what tab is opened (Thank you Tatiana). So I changed order in which tabs are set (to set Network and Flavor before Source). It should provide enough time to load/preset required data in Source. It is not very exact but empiric solution (same as hard coded wait).\nIt works for my environment for now. We will see if this bottleneck will show in future.","commit_id":"963633da1602e4052009fa7283c67a976fea63d2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"7c0729bc7f77a77a6257ec20596b639c9e03d379","unresolved":true,"context_lines":[{"line_number":106,"context_line":"    driver.find_element_by_link_text(\"Launch Instance\").click()"},{"line_number":107,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":108,"context_line":"    navigation \u003d wizard.find_element_by_css_selector(\"div.wizard-nav\")"},{"line_number":109,"context_line":"    name_field \u003d utils.find_element_by_xpath(\"//*[@id\u003d\u0027name\u0027]\", wizard)"},{"line_number":110,"context_line":"    name_field.clear()"},{"line_number":111,"context_line":"    name_field.send_keys(instance_name)"},{"line_number":112,"context_line":"    navigation.find_element_by_link_text(\"Source\").click()"}],"source_content_type":"text/x-python","patch_set":17,"id":"a8b3e622_44db32fb","line":109,"range":{"start_line":109,"start_character":17,"end_line":109,"end_character":22},"updated":"2023-07-18 12:19:48.000000000","message":"In utils.py file is created \"new\" function find_element_by_xpath which contains expected condition: EC.visibility_of_element_located\n\nOn my ENV basic find_element function does not work well because selenium is able to locate element but the element is not interactable for another 0.5-1s.","commit_id":"963633da1602e4052009fa7283c67a976fea63d2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"d70dd6aeaf15f1bbcb779f1334d06e3d7608a78c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    driver.find_element_by_link_text(\"Launch Instance\").click()"},{"line_number":107,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":108,"context_line":"    navigation \u003d wizard.find_element_by_css_selector(\"div.wizard-nav\")"},{"line_number":109,"context_line":"    name_field \u003d utils.find_element_by_xpath(\"//*[@id\u003d\u0027name\u0027]\", wizard)"},{"line_number":110,"context_line":"    name_field.clear()"},{"line_number":111,"context_line":"    name_field.send_keys(instance_name)"},{"line_number":112,"context_line":"    navigation.find_element_by_link_text(\"Source\").click()"}],"source_content_type":"text/x-python","patch_set":17,"id":"d294937f_fa6c653a","line":109,"range":{"start_line":109,"start_character":17,"end_line":109,"end_character":22},"in_reply_to":"a8b3e622_44db32fb","updated":"2023-07-26 06:37:42.000000000","message":"Done","commit_id":"963633da1602e4052009fa7283c67a976fea63d2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"b07eb00a29361ec06270ca608e30fe92b2ea482b","unresolved":true,"context_lines":[{"line_number":137,"context_line":"    source_table \u003d wizard.find_element_by_css_selector("},{"line_number":138,"context_line":"        \"ng-include[ng-form\u003dlaunchInstanceSourceForm]\""},{"line_number":139,"context_line":"    )"},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    3s wait to prevent issue comming from double pre-setting Launch Instance tab"},{"line_number":142,"context_line":"    Any better solution?"},{"line_number":143,"context_line":"    20.7.2023 - jjasek"},{"line_number":144,"context_line":"    \"\"\""},{"line_number":145,"context_line":"    time.sleep(3)"},{"line_number":146,"context_line":"    select_boot_sources_type_tab \u003d utils.find_already_visible_element_by_xpath("},{"line_number":147,"context_line":"        \"//*[@id\u003d\u0027boot-source-type\u0027]\", source_table)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9908e25c_4f10d7c9","line":144,"range":{"start_line":140,"start_character":0,"end_line":144,"end_character":7},"updated":"2023-07-21 11:44:00.000000000","message":"The same as \"time.sleep(3)\" comment above.","commit_id":"15456459168545654d1addb59bbdab8f076ad112"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"e76ffb6708b3eb7980fae072d1ef5aef595f05da","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    source_table \u003d wizard.find_element_by_css_selector("},{"line_number":138,"context_line":"        \"ng-include[ng-form\u003dlaunchInstanceSourceForm]\""},{"line_number":139,"context_line":"    )"},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":"    3s wait to prevent issue comming from double pre-setting Launch Instance tab"},{"line_number":142,"context_line":"    Any better solution?"},{"line_number":143,"context_line":"    20.7.2023 - jjasek"},{"line_number":144,"context_line":"    \"\"\""},{"line_number":145,"context_line":"    time.sleep(3)"},{"line_number":146,"context_line":"    select_boot_sources_type_tab \u003d utils.find_already_visible_element_by_xpath("},{"line_number":147,"context_line":"        \"//*[@id\u003d\u0027boot-source-type\u0027]\", source_table)"}],"source_content_type":"text/x-python","patch_set":18,"id":"630d3a63_a41f87b9","line":144,"range":{"start_line":140,"start_character":0,"end_line":144,"end_character":7},"in_reply_to":"9908e25c_4f10d7c9","updated":"2023-07-24 08:09:52.000000000","message":"Answer again the same as for \"time.sleep(3)\" comment above.","commit_id":"15456459168545654d1addb59bbdab8f076ad112"}],"openstack_dashboard/test/integration_tests/scenarios/utils.py":[{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"7c0729bc7f77a77a6257ec20596b639c9e03d379","unresolved":true,"context_lines":[{"line_number":1,"context_line":"from selenium.webdriver.common.by import By"},{"line_number":2,"context_line":"from selenium.webdriver.support.wait import WebDriverWait"},{"line_number":3,"context_line":"from selenium.webdriver.support import expected_conditions as EC"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"def get_and_dismiss_messages(element):"},{"line_number":6,"context_line":"    messages \u003d element.find_elements_by_css_selector(\"div.messages div.alert\")"},{"line_number":7,"context_line":"    collect \u003d []"},{"line_number":8,"context_line":"    for message in messages:"},{"line_number":9,"context_line":"        text \u003d message.find_element_by_css_selector(\"p\").text"},{"line_number":10,"context_line":"        message.find_element_by_css_selector(\"a.close\").click()"},{"line_number":11,"context_line":"        collect.append(text)"},{"line_number":12,"context_line":"    return collect"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"def find_element_by_xpath(element, driver):"},{"line_number":15,"context_line":"    return WebDriverWait(driver, 10).until("},{"line_number":16,"context_line":"        EC.visibility_of_element_located((By.XPATH, element)))"},{"line_number":17,"context_line":"    "}],"source_content_type":"text/x-python","patch_set":17,"id":"afcc60c7_e85fa122","line":16,"range":{"start_line":1,"start_character":0,"end_line":16,"end_character":62},"updated":"2023-07-18 12:19:48.000000000","message":"File for functions that will be very likely used in multiple tests/files but also are not fixtures (so I prefer to separate them from conftest.py)","commit_id":"963633da1602e4052009fa7283c67a976fea63d2"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"d70dd6aeaf15f1bbcb779f1334d06e3d7608a78c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from selenium.webdriver.common.by import By"},{"line_number":2,"context_line":"from selenium.webdriver.support.wait import WebDriverWait"},{"line_number":3,"context_line":"from selenium.webdriver.support import expected_conditions as EC"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"def get_and_dismiss_messages(element):"},{"line_number":6,"context_line":"    messages \u003d element.find_elements_by_css_selector(\"div.messages div.alert\")"},{"line_number":7,"context_line":"    collect \u003d []"},{"line_number":8,"context_line":"    for message in messages:"},{"line_number":9,"context_line":"        text \u003d message.find_element_by_css_selector(\"p\").text"},{"line_number":10,"context_line":"        message.find_element_by_css_selector(\"a.close\").click()"},{"line_number":11,"context_line":"        collect.append(text)"},{"line_number":12,"context_line":"    return collect"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"def find_element_by_xpath(element, driver):"},{"line_number":15,"context_line":"    return WebDriverWait(driver, 10).until("},{"line_number":16,"context_line":"        EC.visibility_of_element_located((By.XPATH, element)))"},{"line_number":17,"context_line":"    "}],"source_content_type":"text/x-python","patch_set":17,"id":"ce385d1e_185bc7f2","line":16,"range":{"start_line":1,"start_character":0,"end_line":16,"end_character":62},"in_reply_to":"afcc60c7_e85fa122","updated":"2023-07-26 06:37:42.000000000","message":"Done","commit_id":"963633da1602e4052009fa7283c67a976fea63d2"}]}
