)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"59fa2dc0940e0f44cb834540320a6552eb2d5d02","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a265540f_f73937ad","updated":"2023-08-23 09:46:32.000000000","message":"recheck, timeout","commit_id":"2a360f60716c37ed9e3168302ca7ce7c66e1538c"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"284e4d8f7c28a3852bf62a77b9fb9413b8fdb2c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9a854927_e836bff1","updated":"2023-08-29 16:42:11.000000000","message":"Thanks, LGTM.","commit_id":"1a666ec621f29effcb318a02f5dae7561322ec50"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"1954e41dd45eb49a82b44494c96a3d6c3252ebe5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8c58a674_f7464703","updated":"2023-08-31 20:41:21.000000000","message":"recheck, pbr package issue","commit_id":"9c59a3dd9879dce540e61b575f306756ff994bd3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"335e4ca00a72aff3f95e9accedd460d444bad487","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b6f01537_9cf39480","updated":"2023-08-31 14:11:43.000000000","message":"recheck, pbr package issue","commit_id":"9c59a3dd9879dce540e61b575f306756ff994bd3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"97642d080d8cf6f621be3dda8a4d93137a6cbf48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"55125505_860381e7","updated":"2023-09-01 10:47:43.000000000","message":"recheck, random failure","commit_id":"9c59a3dd9879dce540e61b575f306756ff994bd3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"670cf39ceef2de4b0cc3579153434d2467e2a512","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3d83b725_0c49c702","updated":"2023-09-01 06:56:12.000000000","message":"recheck, timeout","commit_id":"9c59a3dd9879dce540e61b575f306756ff994bd3"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"8dc6c5c7418cc4220d4a04c854c540680b499bef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"f978b260_020e4d82","updated":"2023-09-01 08:04:06.000000000","message":"recheck, timeout","commit_id":"9c59a3dd9879dce540e61b575f306756ff994bd3"}],"openstack_dashboard/test/selenium/integration/test_images.py":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"cc72f8cab5e094d5e7c6961cd62662266ec68185","unresolved":true,"context_lines":[{"line_number":9,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":"import os"},{"line_number":13,"context_line":"import tempfile"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import pytest"}],"source_content_type":"text/x-python","patch_set":2,"id":"140d58d3_9194fc6f","line":12,"updated":"2023-08-22 20:28:05.000000000","message":"Add blank line after the license please","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"0bd514e8ab7ec04888c07d956b5eecfd606e56f9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":"import os"},{"line_number":13,"context_line":"import tempfile"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import pytest"}],"source_content_type":"text/x-python","patch_set":2,"id":"284c9930_3309a69e","line":12,"in_reply_to":"140d58d3_9194fc6f","updated":"2023-08-23 08:48:22.000000000","message":"Done","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"ec183a575abd8b0e89521e5281d8862ec61673b1","unresolved":true,"context_lines":[{"line_number":38,"context_line":"        \"actions.hz-dynamic-table-actions \u003e action-list\")"},{"line_number":39,"context_line":"    for element in all_action_list_el:"},{"line_number":40,"context_line":"        if element.text \u003d\u003d action:"},{"line_number":41,"context_line":"            return element"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"@pytest.fixture"}],"source_content_type":"text/x-python","patch_set":2,"id":"ad8ad769_2db10bbf","line":41,"updated":"2023-08-22 12:44:10.000000000","message":"I wonder if this could be done in a single find_element_by_xpath with a more complex expression. Then we wouldn\u0027t have the implicit wait.","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"0bd514e8ab7ec04888c07d956b5eecfd606e56f9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \"actions.hz-dynamic-table-actions \u003e action-list\")"},{"line_number":39,"context_line":"    for element in all_action_list_el:"},{"line_number":40,"context_line":"        if element.text \u003d\u003d action:"},{"line_number":41,"context_line":"            return element"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"@pytest.fixture"}],"source_content_type":"text/x-python","patch_set":2,"id":"fae41c45_c4de9201","line":41,"in_reply_to":"ad8ad769_2db10bbf","updated":"2023-08-23 08:48:22.000000000","message":"Done","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"ec183a575abd8b0e89521e5281d8862ec61673b1","unresolved":true,"context_lines":[{"line_number":51,"context_line":"    :return: path to the generated file"},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    with tempfile.NamedTemporaryFile(prefix\u003dname, suffix\u003dsuffix) as tmp_file:"},{"line_number":54,"context_line":"        tmp_file.write(os.urandom(size))"},{"line_number":55,"context_line":"        yield tmp_file.name"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"8eb47112_879d0ae3","line":54,"updated":"2023-08-22 12:44:10.000000000","message":"This is a lot of random data, are you sure we can\u0027t just fill it with zeroes? Also, doing it all in a single step takes up a lot of memory.","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"0bd514e8ab7ec04888c07d956b5eecfd606e56f9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    :return: path to the generated file"},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    with tempfile.NamedTemporaryFile(prefix\u003dname, suffix\u003dsuffix) as tmp_file:"},{"line_number":54,"context_line":"        tmp_file.write(os.urandom(size))"},{"line_number":55,"context_line":"        yield tmp_file.name"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9798c120_d2fccdf0","line":54,"in_reply_to":"8eb47112_879d0ae3","updated":"2023-08-23 08:48:22.000000000","message":"Done","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"ec183a575abd8b0e89521e5281d8862ec61673b1","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":72,"context_line":"    select_element \u003d wizard.find_element_by_xpath("},{"line_number":73,"context_line":"        \"//*[@name\u003d\u0027image_file\u0027]\")"},{"line_number":74,"context_line":"    select_element.send_keys(os.path.join(os.getcwd(), temporary_file))"},{"line_number":75,"context_line":"    wizard.find_element_by_id(\"imageForm-format\").click()"},{"line_number":76,"context_line":"    wizard.find_element_by_xpath("},{"line_number":77,"context_line":"        \"//*[@label\u003d\u0027QCOW2 - QEMU Emulator\u0027]\").click()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f6d06e2_e53b5e38","line":74,"updated":"2023-08-22 12:44:10.000000000","message":"Maybe it would be better if temporary_file returned the full path already? Also, default to a temporary directory – we don\u0027t know if we will always have write access in the current directory.\nSee how the credentials tests do it.","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"ec183a575abd8b0e89521e5281d8862ec61673b1","unresolved":true,"context_lines":[{"line_number":79,"context_line":"    widgets.wait_till_button_spin_disappear(driver, config)"},{"line_number":80,"context_line":"    messages \u003d widgets.get_and_dismiss_messages(driver)"},{"line_number":81,"context_line":"    assert f\"Success: Image {image_name} was successfully\""},{"line_number":82,"context_line":"    f\" created.\" in messages"},{"line_number":83,"context_line":"    widgets.find_already_visible_element_by_xpath("},{"line_number":84,"context_line":"        f\"//*[contains(text(),\u0027{image_name}\u0027)]//ancestor::tr/td\""},{"line_number":85,"context_line":"        f\"//*[contains(text(),\u0027Active\u0027)]\", driver)"}],"source_content_type":"text/x-python","patch_set":2,"id":"186c8e05_c1a5745a","line":82,"updated":"2023-08-22 12:44:10.000000000","message":"I think this requires () around the string, otherwise it\u0027s just two separate statements","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"0bd514e8ab7ec04888c07d956b5eecfd606e56f9","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    widgets.wait_till_button_spin_disappear(driver, config)"},{"line_number":80,"context_line":"    messages \u003d widgets.get_and_dismiss_messages(driver)"},{"line_number":81,"context_line":"    assert f\"Success: Image {image_name} was successfully\""},{"line_number":82,"context_line":"    f\" created.\" in messages"},{"line_number":83,"context_line":"    widgets.find_already_visible_element_by_xpath("},{"line_number":84,"context_line":"        f\"//*[contains(text(),\u0027{image_name}\u0027)]//ancestor::tr/td\""},{"line_number":85,"context_line":"        f\"//*[contains(text(),\u0027Active\u0027)]\", driver)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bee521ba_6f65a795","line":82,"in_reply_to":"186c8e05_c1a5745a","updated":"2023-08-23 08:48:22.000000000","message":"Done","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"ec183a575abd8b0e89521e5281d8862ec61673b1","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    widgets.find_already_visible_element_by_xpath("},{"line_number":84,"context_line":"        f\"//*[contains(text(),\u0027{image_name}\u0027)]//ancestor::tr/td\""},{"line_number":85,"context_line":"        f\"//*[contains(text(),\u0027Active\u0027)]\", driver)"},{"line_number":86,"context_line":"    assert True"}],"source_content_type":"text/x-python","patch_set":2,"id":"7811ef9a_6a340470","line":86,"updated":"2023-08-22 12:44:10.000000000","message":"this does nothing","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"0bd514e8ab7ec04888c07d956b5eecfd606e56f9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    widgets.find_already_visible_element_by_xpath("},{"line_number":84,"context_line":"        f\"//*[contains(text(),\u0027{image_name}\u0027)]//ancestor::tr/td\""},{"line_number":85,"context_line":"        f\"//*[contains(text(),\u0027Active\u0027)]\", driver)"},{"line_number":86,"context_line":"    assert True"}],"source_content_type":"text/x-python","patch_set":2,"id":"362c4f0c_0959d06a","line":86,"in_reply_to":"7811ef9a_6a340470","updated":"2023-08-23 08:48:22.000000000","message":"Done","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"562354a95cadbe79f89e488e825ae1e19f6a5d6a","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@pytest.fixture"},{"line_number":24,"context_line":"def image_name():"},{"line_number":25,"context_line":"    return \u0027xhorizon_image_%s\u0027 % uuidutils.generate_uuid(dashed\u003dFalse)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@pytest.fixture"}],"source_content_type":"text/x-python","patch_set":4,"id":"48dd39d0_9651e155","line":25,"updated":"2023-08-23 12:05:55.000000000","message":"I added that x when testing, to see there really was a new instance created, there is no reason to have it there now.","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"54323c3c1fc821928ed35f482fa6b0f93e34c4f0","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@pytest.fixture"},{"line_number":24,"context_line":"def image_name():"},{"line_number":25,"context_line":"    return \u0027xhorizon_image_%s\u0027 % uuidutils.generate_uuid(dashed\u003dFalse)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@pytest.fixture"}],"source_content_type":"text/x-python","patch_set":4,"id":"38c19327_15dd01b4","line":25,"in_reply_to":"48dd39d0_9651e155","updated":"2023-08-24 09:46:19.000000000","message":"Done","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"562354a95cadbe79f89e488e825ae1e19f6a5d6a","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    with tempfile.NamedTemporaryFile(prefix\u003dname, suffix\u003dsuffix) as tmp_file:"},{"line_number":47,"context_line":"        tmp_file.write(os.urandom(size))"},{"line_number":48,"context_line":"        yield tmp_file.name"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def test_image_create_from_local_file_demo(login, driver, image_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dcfb118d_198f8f5f","line":48,"updated":"2023-08-23 12:05:55.000000000","message":"why don\u0027t you use this? https://docs.pytest.org/en/6.2.x/tmpdir.html","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a91d4d75ca136029704dd287d88fb66ad968c5ea","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    with tempfile.NamedTemporaryFile(prefix\u003dname, suffix\u003dsuffix) as tmp_file:"},{"line_number":47,"context_line":"        tmp_file.write(os.urandom(size))"},{"line_number":48,"context_line":"        yield tmp_file.name"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def test_image_create_from_local_file_demo(login, driver, image_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dac07a1c_c6633699","line":48,"in_reply_to":"36467d92_b0c9dcbe","updated":"2023-08-23 13:51:46.000000000","message":"I meant you can use the tmp_path fixture to create the file in a directory configured by pytest for the purpose. There is an example code showing how to use it at the url I linked.","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"54323c3c1fc821928ed35f482fa6b0f93e34c4f0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    with tempfile.NamedTemporaryFile(prefix\u003dname, suffix\u003dsuffix) as tmp_file:"},{"line_number":47,"context_line":"        tmp_file.write(os.urandom(size))"},{"line_number":48,"context_line":"        yield tmp_file.name"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def test_image_create_from_local_file_demo(login, driver, image_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"007196d0_5b06d25b","line":48,"in_reply_to":"dac07a1c_c6633699","updated":"2023-08-24 09:46:19.000000000","message":"I think that it is ok to use /tmp (it should be accessible all the time and suitable for case like this). I assume that your point is that if we do not need to use any \"external\" resources (like /tmp directory) then we should not do it. It is a valid point. I did it like you specified. Thank you.","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"46fe4b61b0f8f6fd2c3e6a26c3bd3d9f843bfc2a","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    with tempfile.NamedTemporaryFile(prefix\u003dname, suffix\u003dsuffix) as tmp_file:"},{"line_number":47,"context_line":"        tmp_file.write(os.urandom(size))"},{"line_number":48,"context_line":"        yield tmp_file.name"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def test_image_create_from_local_file_demo(login, driver, image_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"36467d92_b0c9dcbe","line":48,"in_reply_to":"dcfb118d_198f8f5f","updated":"2023-08-23 12:45:06.000000000","message":"What is the benefit of using tmpdir? NamedTemporaryFile create temporary file in /tmp dir and \"yield tmp_file.name\" return path to this file as \"/tmp/filename.qcow2\". So in step \"select_element.send_keys(temporary_file)\" we take file directly from /tmp/filename.qcow2. The file is deleted after test is done. What is the point to create special tmpdir? Is there a possibility that we will not have access to /tmp?","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"77808c222b42c7a7d89db0049d77b044f2d20cc4","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    ))"},{"line_number":60,"context_line":"    driver.get(url)"},{"line_number":61,"context_line":"    driver.find_element_by_xpath("},{"line_number":62,"context_line":"        \"//button[normalize-space()\u003d\u0027Create Image\u0027]\").click()"},{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"37f7c5b4_9aabebe1","line":62,"updated":"2023-08-23 12:07:57.000000000","message":"no need for the // at the beginning","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"46fe4b61b0f8f6fd2c3e6a26c3bd3d9f843bfc2a","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    ))"},{"line_number":60,"context_line":"    driver.get(url)"},{"line_number":61,"context_line":"    driver.find_element_by_xpath("},{"line_number":62,"context_line":"        \"//button[normalize-space()\u003d\u0027Create Image\u0027]\").click()"},{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"ef61391b_83e9acbc","line":62,"in_reply_to":"37f7c5b4_9aabebe1","updated":"2023-08-23 12:45:06.000000000","message":"We need it because it is relative xpath. Or I am missing something?\nCan you describe it more detailed, please? (I tried it and it does not work without //)","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"6560162bcb82a6170a7e684aad9da7760c7ed5c1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    ))"},{"line_number":60,"context_line":"    driver.get(url)"},{"line_number":61,"context_line":"    driver.find_element_by_xpath("},{"line_number":62,"context_line":"        \"//button[normalize-space()\u003d\u0027Create Image\u0027]\").click()"},{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"045ccf85_46bb6cec","line":62,"in_reply_to":"5092cfc4_d2958166","updated":"2023-08-28 07:05:35.000000000","message":"Ack","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"54323c3c1fc821928ed35f482fa6b0f93e34c4f0","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    ))"},{"line_number":60,"context_line":"    driver.get(url)"},{"line_number":61,"context_line":"    driver.find_element_by_xpath("},{"line_number":62,"context_line":"        \"//button[normalize-space()\u003d\u0027Create Image\u0027]\").click()"},{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"5092cfc4_d2958166","line":62,"in_reply_to":"60211e52_cb4a870c","updated":"2023-08-24 09:46:19.000000000","message":"Here in this step we need to select \"all the descendants of the document root\" because our start point is driver. There is not any context node that we are using as a start point (any node that XPath processor is currently looking at). So we basically need to use // there. It is explained in the document that you sent in the previous comment.","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a91d4d75ca136029704dd287d88fb66ad968c5ea","unresolved":true,"context_lines":[{"line_number":59,"context_line":"    ))"},{"line_number":60,"context_line":"    driver.get(url)"},{"line_number":61,"context_line":"    driver.find_element_by_xpath("},{"line_number":62,"context_line":"        \"//button[normalize-space()\u003d\u0027Create Image\u0027]\").click()"},{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"60211e52_cb4a870c","line":62,"in_reply_to":"ef61391b_83e9acbc","updated":"2023-08-23 13:51:46.000000000","message":"See the third, fourth and fifth paragraph of https://www.w3.org/TR/1999/REC-xpath-19991116/#location-paths","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"77808c222b42c7a7d89db0049d77b044f2d20cc4","unresolved":true,"context_lines":[{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("},{"line_number":66,"context_line":"        \"//*[@name\u003d\u0027image_file\u0027]\")"},{"line_number":67,"context_line":"    select_element.send_keys(temporary_file)"},{"line_number":68,"context_line":"    wizard.find_element_by_id(\"imageForm-format\").click()"},{"line_number":69,"context_line":"    wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"b64a11bc_1f6ba85d","line":66,"updated":"2023-08-23 12:07:57.000000000","message":"using the // in here defeats the use of wizard element first – it make it search in the whole document, not just inside the wizard element","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"54323c3c1fc821928ed35f482fa6b0f93e34c4f0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("},{"line_number":66,"context_line":"        \"//*[@name\u003d\u0027image_file\u0027]\")"},{"line_number":67,"context_line":"    select_element.send_keys(temporary_file)"},{"line_number":68,"context_line":"    wizard.find_element_by_id(\"imageForm-format\").click()"},{"line_number":69,"context_line":"    wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"6eed01cd_9267de07","line":66,"in_reply_to":"8a52a551_e558b384","updated":"2023-08-24 09:46:19.000000000","message":"Ok. I tested it and you are definitely right! Thank you for your thoroughness. It is very good point.","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"46fe4b61b0f8f6fd2c3e6a26c3bd3d9f843bfc2a","unresolved":true,"context_lines":[{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("},{"line_number":66,"context_line":"        \"//*[@name\u003d\u0027image_file\u0027]\")"},{"line_number":67,"context_line":"    select_element.send_keys(temporary_file)"},{"line_number":68,"context_line":"    wizard.find_element_by_id(\"imageForm-format\").click()"},{"line_number":69,"context_line":"    wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"c11f4fca_f8be9dfa","line":66,"in_reply_to":"b64a11bc_1f6ba85d","updated":"2023-08-23 12:45:06.000000000","message":"Are you sure? wizard here is in \"position\" of driver. Then anything else that is there is based on this \"new driver\" wizard. So it should not search in the whole document. It should search in whole document of new \"driver\" - wizard.\nAbout // as I mentioned in previous comment. It is relative path. So I think it must be used.","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a91d4d75ca136029704dd287d88fb66ad968c5ea","unresolved":true,"context_lines":[{"line_number":63,"context_line":"    wizard \u003d driver.find_element_by_css_selector(\"wizard\")"},{"line_number":64,"context_line":"    wizard.find_element_by_id(\"imageForm-name\").send_keys(image_name)"},{"line_number":65,"context_line":"    select_element \u003d wizard.find_element_by_xpath("},{"line_number":66,"context_line":"        \"//*[@name\u003d\u0027image_file\u0027]\")"},{"line_number":67,"context_line":"    select_element.send_keys(temporary_file)"},{"line_number":68,"context_line":"    wizard.find_element_by_id(\"imageForm-format\").click()"},{"line_number":69,"context_line":"    wizard.find_element_by_xpath("}],"source_content_type":"text/x-python","patch_set":4,"id":"8a52a551_e558b384","line":66,"in_reply_to":"c11f4fca_f8be9dfa","updated":"2023-08-23 13:51:46.000000000","message":"Any xpath that starts with / or // is an absolute path. If you want to use // with a relative path, use .//","commit_id":"587c8c1ac8e33ffd8ad61041a032b173535aaedc"}],"openstack_dashboard/test/selenium/widgets.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"ec183a575abd8b0e89521e5281d8862ec61673b1","unresolved":true,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"@contextlib.contextmanager"},{"line_number":53,"context_line":"def implicitly_waits_disabled(driver, config):"},{"line_number":54,"context_line":"    try:"},{"line_number":55,"context_line":"        driver.implicitly_wait(0)"},{"line_number":56,"context_line":"        yield"}],"source_content_type":"text/x-python","patch_set":2,"id":"75862708_79f2d88a","line":53,"updated":"2023-08-22 12:44:10.000000000","message":"implicit_waits_disabled","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"0bd514e8ab7ec04888c07d956b5eecfd606e56f9","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"@contextlib.contextmanager"},{"line_number":53,"context_line":"def implicitly_waits_disabled(driver, config):"},{"line_number":54,"context_line":"    try:"},{"line_number":55,"context_line":"        driver.implicitly_wait(0)"},{"line_number":56,"context_line":"        yield"}],"source_content_type":"text/x-python","patch_set":2,"id":"6e323284_246ed868","line":53,"in_reply_to":"75862708_79f2d88a","updated":"2023-08-23 08:48:22.000000000","message":"Done","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"ec183a575abd8b0e89521e5281d8862ec61673b1","unresolved":true,"context_lines":[{"line_number":58,"context_line":"        driver.implicitly_wait(config.selenium.implicit_wait)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def wait_till_button_spin_disappear(driver, config):"},{"line_number":62,"context_line":"    with implicitly_waits_disabled(driver, config):"},{"line_number":63,"context_line":"        WebDriverWait(driver, config.selenium.explicit_wait).until("},{"line_number":64,"context_line":"            EC.invisibility_of_element_located("}],"source_content_type":"text/x-python","patch_set":2,"id":"eb7c7618_30e99153","line":61,"updated":"2023-08-22 12:44:10.000000000","message":"till -\u003e until, let\u0027s avoid regionalisms","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"},{"author":{"_account_id":35133,"name":"Jan Jasek","email":"jjasek@redhat.com","username":"janjasek"},"change_message_id":"0bd514e8ab7ec04888c07d956b5eecfd606e56f9","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        driver.implicitly_wait(config.selenium.implicit_wait)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def wait_till_button_spin_disappear(driver, config):"},{"line_number":62,"context_line":"    with implicitly_waits_disabled(driver, config):"},{"line_number":63,"context_line":"        WebDriverWait(driver, config.selenium.explicit_wait).until("},{"line_number":64,"context_line":"            EC.invisibility_of_element_located("}],"source_content_type":"text/x-python","patch_set":2,"id":"1319ee1b_9a6b3a04","line":61,"in_reply_to":"eb7c7618_30e99153","updated":"2023-08-23 08:48:22.000000000","message":"Done","commit_id":"8abbe7bff6f2bc79cd5e753fc2ed8b2db6905985"}]}
