diff --git a/Tests/Regression/Reporter/GUI_Common.robot b/Tests/Regression/Reporter/GUI_Common.robot index efa984e0b..f4771e39c 100644 --- a/Tests/Regression/Reporter/GUI_Common.robot +++ b/Tests/Regression/Reporter/GUI_Common.robot @@ -688,9 +688,11 @@ Verify HTML Cover Page [Arguments] ${html} ${cover_section}= Get Element ${html} //div[@id="TitlePage"] ${title} Get Element Text ${cover_section} div[@class="title center"] - Should Be Equal ${title} quickdemo ${data} Get Element Text ${cover_section} div[@class="subtitle center"] - Should Be Equal ${data} 2023-07-28 07:42 - 07:50 + VAR @{cover_txtdata} ${title} ${data} + + @{cover_expected} Convert To List ${Cover.text} + Lists Should Be Equal ${cover_expected} ${cover_txtdata} msg=[ Expected != Converted ] Get HTML Report Heading Section Object [Documentation] @@ -953,4 +955,351 @@ Verify HTML Report Error Details Content @{upper_mid_row_expected} Convert To List ${${section}.upper_mid_row} Lists Should Be Equal ${upper_mid_row_expected} ${upper_mid_row} msg=[ Expected != Converted ] +Verify XLSX Cover Page + [Arguments] ${xlsx_file} + @{xlsx_sheets}= Read All Xlsx Sheets ${xlsx_file} + List Should Contain Value ${xlsx_sheets} Cover + @{cover_txtdata}= Read Xlsx Text Data From Sheet ${xlsx_file} Cover + @{cover_expected} Convert To List ${Cover.text} + + ${len} Get Length ${cover_expected} + FOR ${i} IN RANGE 0 ${len} + Should Be Equal ${cover_expected}[${i}] ${cover_txtdata}[${i}][0] msg=[ Expected != Converted ] + END + +Verify XLSX Report Contents + [Documentation] + ... Verify the section for the given section name and full xlsx sheet name for the expected text. Provide full xlsx file path. + ... ${start_at} and ${stop_at} are used to manipulate the returned text data. See the Python function doc. for more information. + ... Custom variable is to select the expected data only for this type of report. If they exist in yaml file. + [Arguments] ${xlsx_file} ${section} ${xlsx_sheet} ${start_at}=${None} ${stop_at}=${None} ${custom}=${False} + Log \t- ${section} console=${True} + + IF ${custom} == ${True} + VAR ${section} ${section} XLSX + END + + @{section_txtdata}= Read Xlsx Text Data From Sheet ${xlsx_file} ${xlsx_sheet} ${start_at} ${stop_at} + Log ${section_txtdata} + +Verify XLSX Report Notes + [Documentation] + ... Verify the section for the given section name and full xlsx sheet name for the expected text. Provide full xlsx file path. + ... ${start_at} and ${stop_at} are used to manipulate the returned text data. See the Python function doc. for more information. + ... Custom variable is to select the expected data only for this type of report. If they exist in yaml file. + [Arguments] ${xlsx_file} ${section} ${xlsx_sheet} ${start_at}=${None} ${stop_at}=${None} ${custom}=${False} + Log \t- ${section} console=${True} + + IF ${custom} == ${True} + VAR ${section} ${section} XLSX + END + + @{section_txtdata}= Read Xlsx Text Data From Sheet ${xlsx_file} ${xlsx_sheet} ${start_at} ${stop_at} + Log ${section_txtdata} + @{notes_expected} Convert To List ${${section}.text} + + ${len} Get Length ${notes_expected} + FOR ${i} IN RANGE 0 ${len} + Should Be Equal ${notes_expected}[${i}] ${section_txtdata}[${i}][0] msg=[ Expected != Converted ] + END + +Verify XLSX Report Graph + [Documentation] + ... Verify the section for the given section name and full xlsx sheet name for the expected image. Provide full xlsx file path. + ... It is required to specify in which cell the image is stored. + ... Also provide the paths to the expected xlsx images directory and the directory where the image will be saved. + [Arguments] ${xlsx_file} ${section} ${cell_id} ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + Log \t- ${section} console=${True} + + ${img}= Extract Image From Xlsx Sheet ${xlsx_file} ${xlsx_sheet} ${cell_id} ${xlsx_img_path} + Convert Image To Black And White ${xlsx_img_path}${/}${img} + Compare Images ${xlsx_expected_img_path}${/}${img} ${xlsx_img_path}${/}${img} + ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + +Verify XLSX Report Table Content + [Documentation] + ... Verify the section for the given section name and full xlsx sheet name for the expected table text. Provide full xlsx file path. + ... ${start_at} and ${stop_at} are used to manipulate the returned text data. See the Python function doc. for more information. + ... Custom variable is to select the expected data only for this type of report. If they exist in yaml file. + [Arguments] ${xlsx_file} ${section} ${xlsx_sheet} ${start_at}=${None} ${stop_at}=${None} ${custom}=${False} + Log \t- ${section} console=${True} + + IF ${custom} == ${True} + VAR ${section} ${section} XLSX + END + + @{section_table}= Read Xlsx Text Data From Sheet ${xlsx_file} ${xlsx_sheet} ${start_at} ${stop_at} + Log ${section} table content: ${section_table} + VAR ${st_length_expected} ${${section}.length} + @{st_header_expected} Convert To List ${${section}.header} + @{st_header_row} Convert To List ${section_table}[0] + Length Should Be ${section_table} ${st_length_expected} + Lists Should Be Equal ${st_header_expected} ${st_header_row} msg=[ Expected != Converted ] + FOR ${i} IN RANGE 0 ${st_length_expected} + VAR ${row} ${section_table}[${i}] + Should Not Be Empty ${row} msg=Row ${i} is empty in the ${section}! + END + + @{rows_numbers} Convert To List ${${section}.rows_numbers} + + @{first_data_row} Convert To List ${section_table}[${rows_numbers}[0]] + @{first_row_expected} Convert To List ${${section}.first_row} + Lists Should Be Equal ${first_row_expected} ${first_data_row} msg=[ Expected != Converted ] + + @{last_row} Convert To List ${section_table}[${rows_numbers}[1]] + @{last_row_expected} Convert To List ${${section}.last_row} + Lists Should Be Equal ${last_row_expected} ${last_row} msg=[ Expected != Converted ] + + @{quater_row} Convert To List ${section_table}[${rows_numbers}[2]] + @{quater_row_expected} Convert To List ${${section}.quater_row} + Lists Should Be Equal ${quater_row_expected} ${quater_row} msg=[ Expected != Converted ] + + @{mid_row} Convert To List ${section_table}[${rows_numbers}[3]] + @{mid_row_expected} Convert To List ${${section}.mid_row} + Lists Should Be Equal ${mid_row_expected} ${mid_row} msg=[ Expected != Converted ] + + @{upper_mid_row} Convert To List ${section_table}[${rows_numbers}[4]] + @{upper_mid_row_expected} Convert To List ${${section}.upper_mid_row} + Lists Should Be Equal ${upper_mid_row_expected} ${upper_mid_row} msg=[ Expected != Converted ] + +Verify XLSX Report Error Details Content + [Documentation] + ... Verify the section for the given section name and full xlsx sheet name for the expected table text and images. Provide full xlsx file path. + ... Also provide the paths to the expected xlsx images directory and the directory where the image will be saved. + ... ${start_at} and ${stop_at} are used to manipulate the returned text data. See the Python function doc. for more information. + ... Custom variable is to select the expected data only for this type of report. If they exist in yaml file. + [Arguments] ${xlsx_file} ${section} ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} + ... ${start_at}=${None} ${stop_at}=${None} ${custom}=${False} + Log \t- ${section} console=${True} + + IF ${custom} == ${True} + VAR ${section} ${section} XLSX + END + + @{section_table}= Read Xlsx Text Data From Sheet ${xlsx_file} ${xlsx_sheet} ${start_at} ${stop_at} + Log ${section} table content: ${section_table} + VAR ${st_length_expected} ${${section}.length} + @{st_header_col_expected} Convert To List ${${section}.header_col} + Length Should Be ${section_table} ${st_length_expected} + FOR ${i} IN RANGE 0 ${st_length_expected} + VAR ${row} ${section_table}[${i}] + Should Not Be Empty ${row} msg=Row ${i} is empty in the ${section}! + IF '${row}[0]' not in @{st_header_col_expected} + Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${st_header_col_expected}. + END + + ${img}= Extract Image From Xlsx Sheet ${xlsx_file} ${xlsx_sheet} B${i + 3} ${xlsx_img_path} + IF '${img}' != '${0}' + Log Image was found in B${i} cell. + Compare Images ${xlsx_expected_img_path}${/}${img} ${xlsx_img_path}${/}${img} + END + + END + + # !need to convert empty expected list value to the ${space} where screenshot should be! + @{rows_numbers} Convert To List ${${section}.rows_numbers} + + @{first_data_row} Convert To List ${section_table}[${rows_numbers}[0]] + @{first_row_expected} Convert To List ${${section}.first_row} + ${empty_i} Get Index From List ${first_row_expected} ${EMPTY} + IF '${empty_i}' != '-1' + Remove From List ${first_row_expected} ${empty_i} + Insert Into List ${first_row_expected} ${empty_i} ${SPACE} + END + Lists Should Be Equal ${first_row_expected} ${first_data_row} msg=[ Expected != Converted ] + + @{last_row} Convert To List ${section_table}[${rows_numbers}[1]] + @{last_row_expected} Convert To List ${${section}.last_row} + ${empty_i} Get Index From List ${last_row_expected} ${EMPTY} + IF '${empty_i}' != '-1' + Remove From List ${last_row_expected} ${empty_i} + Insert Into List ${last_row_expected} ${empty_i} ${SPACE} + END + Lists Should Be Equal ${last_row_expected} ${last_row} msg=[ Expected != Converted ] + + @{quater_row} Convert To List ${section_table}[${rows_numbers}[2]] + @{quater_row_expected} Convert To List ${${section}.quater_row} + ${empty_i} Get Index From List ${quater_row_expected} ${EMPTY} + IF '${empty_i}' != '-1' + Remove From List ${quater_row_expected} ${empty_i} + Insert Into List ${quater_row_expected} ${empty_i} ${SPACE} + END + Lists Should Be Equal ${quater_row_expected} ${quater_row} msg=[ Expected != Converted ] + + @{mid_row} Convert To List ${section_table}[${rows_numbers}[3]] + @{mid_row_expected} Convert To List ${${section}.mid_row} + ${empty_i} Get Index From List ${mid_row_expected} ${EMPTY} + IF '${empty_i}' != '-1' + Remove From List ${mid_row_expected} ${empty_i} + Insert Into List ${mid_row_expected} ${empty_i} ${SPACE} + END + Lists Should Be Equal ${mid_row_expected} ${mid_row} msg=[ Expected != Converted ] + + @{upper_mid_row} Convert To List ${section_table}[${rows_numbers}[4]] + @{upper_mid_row_expected} Convert To List ${${section}.upper_mid_row} + ${empty_i} Get Index From List ${upper_mid_row_expected} ${EMPTY} + IF '${empty_i}' != '-1' + Remove From List ${upper_mid_row_expected} ${empty_i} + Insert Into List ${upper_mid_row_expected} ${empty_i} ${SPACE} + END + Lists Should Be Equal ${upper_mid_row_expected} ${upper_mid_row} msg=[ Expected != Converted ] + +Verify DOCX Cover Page + [Arguments] ${docx_data} + Dictionary Should Contain Key ${docx_data} Cover + @{cover_txtdata} Convert To List ${docx_data}[Cover][text] + @{cover_expected} Convert To List ${Cover.text} + Lists Should Be Equal ${cover_expected} ${cover_txtdata} msg=[ Expected != Converted ] + +Verify DOCX Report Contents + [Documentation] + ... Verify the section for the given docx data dict and section name for the expected text. + ... Custom variable is to select the expected data only for this type of report. If they exist in yaml file. + [Arguments] ${docx_data} ${section} ${custom}=${False} + Log \t- ${section} console=${True} + + @{section_txtdata} Convert To List ${docx_data}[${section}][text] + Log ${section_txtdata} + + IF ${custom} == ${True} + VAR ${section} ${section} DOCX + END + +Verify DOCX Report Notes + [Documentation] + ... Verify the section for the given docx data dict and section name for the expected text. + ... Custom variable is to select the expected data only for this type of report. If they exist in yaml file. + [Arguments] ${docx_data} ${section} ${custom}=${False} + Log \t- ${section} console=${True} + + @{section_txtdata} Convert To List ${docx_data}[${section}][text] + Log ${section_txtdata} + + IF ${custom} == ${True} + VAR ${section} ${section} DOCX + END + + @{notes_expected} Convert To List ${${section}.text} + + ${len} Get Length ${notes_expected} + FOR ${i} IN RANGE 0 ${len} + Should Be Equal ${notes_expected}[${i}] ${section_txtdata}[${i}] msg=[ Expected != Converted ] + END + +Verify DOCX Report Graph + [Documentation] + ... Verify the section for the given section name for the expected image. Provide full docx file path. + ... Also provide the paths to the expected docx images directory and the directory where the image will be saved. + [Arguments] ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} + Log \t- ${section} console=${True} + + @{img_names}= Extract DOCX Images Under Heading ${section} ${docx_file} ${docx_img_path} + VAR ${img_name} ${img_names}[0] + Convert Image To Black And White ${docx_img_path}${/}${img_name} + Compare Images ${docx_expected_img_path}${/}${img_name} ${docx_img_path}${/}${img_name} + ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + +Verify DOCX Report Table Content + [Documentation] + ... Verify the section for the given docx data dict and section name for the expected table text. + ... Custom variable is to select the expected data only for this type of report. If they exist in yaml file. + [Arguments] ${docx_data} ${section} ${custom}=${False} + Log \t- ${section} console=${True} + + @{section_table} Convert To List ${docx_data}[${section}][table] + Log ${section_table} + + IF ${custom} == ${True} + VAR ${section} ${section} DOCX + END + + Log ${section} table content: ${section_table} + VAR ${st_length_expected} ${${section}.length} + @{st_header_expected} Convert To List ${${section}.header} + @{st_header_row} Convert To List ${section_table}[0] + Length Should Be ${section_table} ${st_length_expected} + Lists Should Be Equal ${st_header_expected} ${st_header_row} msg=[ Expected != Converted ] + FOR ${i} IN RANGE 0 ${st_length_expected} + VAR ${row} ${section_table}[${i}] + Should Not Be Empty ${row} msg=Row ${i} is empty in the ${section}! + END + + @{rows_numbers} Convert To List ${${section}.rows_numbers} + + @{first_data_row} Convert To List ${section_table}[${rows_numbers}[0]] + @{first_row_expected} Convert To List ${${section}.first_row} + Lists Should Be Equal ${first_row_expected} ${first_data_row} msg=[ Expected != Converted ] + + @{last_row} Convert To List ${section_table}[${rows_numbers}[1]] + @{last_row_expected} Convert To List ${${section}.last_row} + Lists Should Be Equal ${last_row_expected} ${last_row} msg=[ Expected != Converted ] + + @{quater_row} Convert To List ${section_table}[${rows_numbers}[2]] + @{quater_row_expected} Convert To List ${${section}.quater_row} + Lists Should Be Equal ${quater_row_expected} ${quater_row} msg=[ Expected != Converted ] + + @{mid_row} Convert To List ${section_table}[${rows_numbers}[3]] + @{mid_row_expected} Convert To List ${${section}.mid_row} + Lists Should Be Equal ${mid_row_expected} ${mid_row} msg=[ Expected != Converted ] + + @{upper_mid_row} Convert To List ${section_table}[${rows_numbers}[4]] + @{upper_mid_row_expected} Convert To List ${${section}.upper_mid_row} + Lists Should Be Equal ${upper_mid_row_expected} ${upper_mid_row} msg=[ Expected != Converted ] + +Verify DOCX Report Error Details Content + [Documentation] + ... Verify the section for the given docx data dict and section name for the expected table text and images. + ... Provide full docx file path for image comparison. + ... Also provide the paths to the expected docx images directory and the directory where the image will be saved. + ... Custom variable is to select the expected data only for this type of report. If they exist in yaml file. + [Arguments] ${docx_data} ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${custom}=${False} + Log \t- ${section} console=${True} + + IF ${custom} == ${True} + VAR ${section} ${section} DOCX + END + + @{section_table}= Convert To List ${docx_data}[${section}][table] + Log ${section} table content: ${section_table} + VAR ${st_length_expected} ${${section}.length} + @{st_header_col_expected} Convert To List ${${section}.header_col} + Length Should Be ${section_table} ${st_length_expected} + FOR ${i} IN RANGE 0 ${st_length_expected} + VAR ${row} ${section_table}[${i}] + Should Not Be Empty ${row} msg=Row ${i} is empty in the ${section}! + IF '${row}[0]' not in @{st_header_col_expected} + Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${st_header_col_expected}. + END + + END + + @{img_names}= Extract DOCX Images Under Heading ${section} ${docx_file} ${docx_img_path} + FOR ${img_name} IN @{img_names} + Compare Images ${docx_expected_img_path}${/}${img_name} ${docx_img_path}${/}${img_name} + END + + @{rows_numbers} Convert To List ${${section}.rows_numbers} + + @{first_data_row} Convert To List ${section_table}[${rows_numbers}[0]] + @{first_row_expected} Convert To List ${${section}.first_row} + Lists Should Be Equal ${first_row_expected} ${first_data_row} msg=[ Expected != Converted ] + + @{last_row} Convert To List ${section_table}[${rows_numbers}[1]] + @{last_row_expected} Convert To List ${${section}.last_row} + Lists Should Be Equal ${last_row_expected} ${last_row} msg=[ Expected != Converted ] + + @{quater_row} Convert To List ${section_table}[${rows_numbers}[2]] + @{quater_row_expected} Convert To List ${${section}.quater_row} + Lists Should Be Equal ${quater_row_expected} ${quater_row} msg=[ Expected != Converted ] + + @{mid_row} Convert To List ${section_table}[${rows_numbers}[3]] + @{mid_row_expected} Convert To List ${${section}.mid_row} + Lists Should Be Equal ${mid_row_expected} ${mid_row} msg=[ Expected != Converted ] + + @{upper_mid_row} Convert To List ${section_table}[${rows_numbers}[4]] + @{upper_mid_row_expected} Convert To List ${${section}.upper_mid_row} + Lists Should Be Equal ${upper_mid_row_expected} ${upper_mid_row} msg=[ Expected != Converted ] + # \ No newline at end of file diff --git a/Tests/Regression/Reporter/GUI_Features.robot b/Tests/Regression/Reporter/GUI_Features.robot index 811ef0372..e4e515e9e 100644 --- a/Tests/Regression/Reporter/GUI_Features.robot +++ b/Tests/Regression/Reporter/GUI_Features.robot @@ -201,7 +201,7 @@ Verify the Content Of the HTML Report Wait Until Created ${html_file} timeout=9 minutes Close GUI - Log To Console Verification of saved data in the RFSwarm HTML raport started. + Log To Console Verification of saved data in the RFSwarm HTML report started. ${html} Parse HTML File ${html_file} @{headings}= Extract All HTML Report Headings ${html} Log ${headings} @@ -374,7 +374,7 @@ Verify the Content Of the HTML Report ... Move File ${html_file} ${OUTPUT_DIR}${/}${testdata}${/}${resultdata}.html Verify the Content Of the DOCX Report - [Tags] ubuntu-latest windows-latest macos-latest Issue #38 DOCX robot:continue-on-failure + [Tags] ubuntu-latest windows-latest macos-latest Issue #38 DOCX robot:continue-on-failure Log To Console ${\n}TAGS: ${TEST TAGS} VAR ${testdata} Issue-#36_37_38 VAR ${resultdata} 20230728_154253_Odoo-demo @@ -382,6 +382,8 @@ Verify the Content Of the DOCX Report VAR ${resultfolder} ${basefolder}${/}${resultdata} VAR ${template_dir} ${basefolder}${/}sample.template VAR ${docx_file} ${resultfolder}${/}${resultdata}.docx + VAR ${docx_img_path} ${OUTPUT_DIR}${/}${testdata}${/}docx_images + VAR ${docx_expected_img_path} ${CURDIR}${/}testdata${/}Issue-#38${/}docx_images VAR ${img_comp_threshold} 0.7 VAR ${move_tolerance} 30 @@ -393,491 +395,149 @@ Verify the Content Of the DOCX Report Wait Until Created ${resultfolder}${/}${resultdata}.docx timeout=9 minutes Close GUI - Log To Console Verification of saved data in the RFSwarm DOCX raport started. + Log To Console Verification of saved data in the RFSwarm DOCX report started. File Should Exist ${docx_file} - &{docx_paragraphs}= Read Paragraphs Docx File ${docx_file} - @{docx_images_names}= Extract Images From Docx ${docx_file} ${OUTPUT_DIR}${/}${testdata}${/}docx_images - @{expected_docx_images_names}= List Files In Directory ${CURDIR}${/}testdata${/}Issue-#38${/}docx_images - Run Keyword And Continue On Failure Lists Should Be Equal - ... ${expected_docx_images_names} ${docx_images_names} msg=Not all images were extracted form the docx. [ Expected != Extracted ] ignore_order=${True} - @{docx_tables}= Extract Tables From Docx ${docx_file} - Log ${docx_paragraphs} - Log ${docx_images_names} - Log ${docx_tables} - - @{docx_images}= List Files In Directory ${OUTPUT_DIR}${/}${testdata}${/}docx_images absolute=${true} - ${docx_images}= Sort Docx Images ${docx_images} - Log ${docx_images} - @{expected_docx_images}= List Files In Directory ${CURDIR}${/}testdata${/}Issue-#38${/}docx_images absolute=${True} - ${expected_docx_images} Sort Docx Images ${expected_docx_images} - Log ${expected_docx_images} - - Dictionary Should Contain Key ${docx_paragraphs} No Heading - @{no_heading_contet} Convert To List ${docx_paragraphs}[No Heading] - VAR @{no_heading_expected} quickdemo 2023-07-28 07:42 - 07:50 - Lists Should Be Equal ${no_heading_expected} ${no_heading_contet} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 1 This is Heading + &{docx_data} Read DOCX File ${docx_file} + Log ${docx_data} + + Verify DOCX Cover Page ${docx_data} + + VAR ${section} This is Heading + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. # Contents: - Dictionary Should Contain Key ${docx_paragraphs} 2 Contents contents - Dictionary Should Contain Key ${docx_paragraphs} 3 Contents graphs - Dictionary Should Contain Key ${docx_paragraphs} 4 Contents tables + Log \nVerifying Contents: console=${True} + VAR ${section} Contents contents + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Contents ${docx_data} ${section} + + VAR ${section} Contents graphs + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Contents ${docx_data} ${section} + + VAR ${section} Contents tables + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Contents ${docx_data} ${section} # Notes: - Dictionary Should Contain Key ${docx_paragraphs} 5 Note - @{5_Note_contet} Convert To List ${docx_paragraphs}[5 Note] - VAR @{5_Note_expected} Hello i am a simple and obvious note :-) This is just second line. - first line - second line - third line - Lists Should Be Equal ${5_Note_expected} ${5_Note_contet} msg=[ Expected != Converted ] - Dictionary Should Contain Key ${docx_paragraphs} 5.1 Second Note - Should Contain ${docx_paragraphs}[5.1 Second Note] This is my second note. - Dictionary Should Contain Key ${docx_paragraphs} 5.1.1 Third Note - Should Contain ${docx_paragraphs}[5.1.1 Third Note] This is my third note. + Log \nVerifying Notes: console=${True} + VAR ${section} Note + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Notes ${docx_data} ${section} custom=${True} + + VAR ${section} Second Note + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Notes ${docx_data} ${section} + + VAR ${section} Third Note + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Notes ${docx_data} ${section} # Graphs - when new graphs are required, save them using the function in read_docx.py! - Dictionary Should Contain Key ${docx_paragraphs} 6 Data Graph Left Metric - Convert Image To Black And White ${docx_images}[0] - Compare Images ${expected_docx_images}[0] ${docx_images}[0] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + Log \nVerifying Graphs: console=${True} + VAR ${section} Data Graph Left Metric + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} - Dictionary Should Contain Key ${docx_paragraphs} 7 Data Graph Left Result - Convert Image To Black And White ${docx_images}[1] - Compare Images ${expected_docx_images}[1] ${docx_images}[1] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + VAR ${section} Data Graph Left Result + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} - Dictionary Should Contain Key ${docx_paragraphs} 8 Data Graph Left Result FAIL - Convert Image To Black And White ${docx_images}[2] - Compare Images ${expected_docx_images}[2] ${docx_images}[2] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + VAR ${section} Data Graph Left Result FAIL + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} - Dictionary Should Contain Key ${docx_paragraphs} 9 Data Graph Left Result TPS - Convert Image To Black And White ${docx_images}[3] - Compare Images ${expected_docx_images}[3] ${docx_images}[3] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + VAR ${section} Data Graph Left Result TPS + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} - Dictionary Should Contain Key ${docx_paragraphs} 10 Data Graph Left Result Total TPS - Convert Image To Black And White ${docx_images}[4] - Compare Images ${expected_docx_images}[4] ${docx_images}[4] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + VAR ${section} Data Graph Left Result Total TPS + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} - Dictionary Should Contain Key ${docx_paragraphs} 11 Data Graph Right Metric - Convert Image To Black And White ${docx_images}[5] - Compare Images ${expected_docx_images}[5] ${docx_images}[5] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + VAR ${section} Data Graph Right Metric + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} - Dictionary Should Contain Key ${docx_paragraphs} 12 Data Graph Right Result - Convert Image To Black And White ${docx_images}[6] - Compare Images ${expected_docx_images}[6] ${docx_images}[6] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + VAR ${section} Data Graph Right Result + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} - Dictionary Should Contain Key ${docx_paragraphs} 13 Data Graph LR Combined - Convert Image To Black And White ${docx_images}[7] - Compare Images ${expected_docx_images}[7] ${docx_images}[7] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + VAR ${section} Data Graph LR Combined + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} - Dictionary Should Contain Key ${docx_paragraphs} 14 Data Graph ST ET - Convert Image To Black And White ${docx_images}[8] - Compare Images ${expected_docx_images}[8] ${docx_images}[8] threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + VAR ${section} Data Graph ST ET + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Graph ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} ${img_comp_threshold} ${move_tolerance} # Tables: - Length Should Be ${docx_tables} 13 - - Dictionary Should Contain Key ${docx_paragraphs} 15 Data Table Metric - Log Data Table Metric: ${docx_tables}[0] - VAR ${table_metric_expected_length} 437 - VAR @{table_metric_header_expected} PrimaryMetric MetricType SecondaryMetric Minimum Average 90%ile Maximum Std. Dev. - @{table_metric_header_row} Convert To List ${docx_tables}[0][0] # table first row (header) - Length Should Be ${docx_tables}[0] ${table_metric_expected_length} - Lists Should Be Equal ${table_metric_header_expected} ${table_metric_header_row} msg=[ Expected != Converted ] - # [1] equals first data row - @{15_sect_1} Convert To List ${docx_tables}[0][1] - VAR @{15_sect_1_expected} 1 Scenario_Delay Odoo Sales 0 0.0 None 0 None - Lists Should Be Equal ${15_sect_1_expected} ${15_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{15_sect_-1} Convert To List ${docx_tables}[0][-1] - VAR @{15_sect_-1_expected} Waits until the element ``locator`` is visible. Summary stDev 0.006 0.047 0.089 0.089 0.038 - Lists Should Be Equal ${15_sect_-1_expected} ${15_sect_-1} msg=[ Expected != Converted ] - # [107] equals quater row - @{15_sect_107} Convert To List ${docx_tables}[0][107] - VAR @{15_sect_107_expected} Delay_4 Scenario Odoo Receipts 0 0.0 None 0 None - Lists Should Be Equal ${15_sect_107_expected} ${15_sect_107} msg=[ Expected != Converted ] - # [218] equals middle row - @{15_sect_218} Convert To List ${docx_tables}[0][218] - VAR @{15_sect_218_expected} Odoo Open Receipt Summary max None None None None None - Lists Should Be Equal ${15_sect_218_expected} ${15_sect_218} msg=[ Expected != Converted ] - # [327] equals upper middle row - @{15_sect_327} Convert To List ${docx_tables}[0][327] - VAR @{15_sect_327_expected} Returns the number of elements matching ``locator``. Summary _fail 0 0.0 0.0 0 0.0 - Lists Should Be Equal ${15_sect_327_expected} ${15_sect_327} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${table_metric_expected_length} - VAR ${row} ${docx_tables}[0][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Metric! - END + Log \nVerifying Tables: console=${True} + VAR ${section} Data Table Metric + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Table Content ${docx_data} ${section} - Dictionary Should Contain Key ${docx_paragraphs} 16 Data Table Result - Log Data Table Result: ${docx_tables}[1] - VAR ${table_result_expected_length} 42 - VAR @{table_result_header_expected} Result Name Minimum Average 90%ile Maximum Std. Dev. Count - @{table_result_header_row} Convert To List ${docx_tables}[1][0] - Length Should Be ${docx_tables}[1] ${table_result_expected_length} - Lists Should Be Equal ${table_result_header_expected} ${table_result_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${table_result_expected_length} - VAR ${row} ${docx_tables}[1][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Result! - END - # [1] equals first data row - @{16_sect_1} Convert To List ${docx_tables}[1][1] - VAR @{16_sect_1_expected} :example: 'John Doe' 0.001 0.001 None 0.001 0.0 4 - Lists Should Be Equal ${16_sect_1_expected} ${16_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{16_sect_-1} Convert To List ${docx_tables}[1][-1] - VAR @{16_sect_-1_expected} Waits until the element ``locator`` is visible. 0.045 0.115 None 0.204 0.078 5 - Lists Should Be Equal ${16_sect_-1_expected} ${16_sect_-1} msg=[ Expected != Converted ] - # [12] equals quater row - @{16_sect_12} Convert To List ${docx_tables}[1][12] - VAR @{16_sect_12_expected} Odoo Confirm Sale 0.0 11.09 54.927 54.927 23.013 10 - Lists Should Be Equal ${16_sect_12_expected} ${16_sect_12} msg=[ Expected != Converted ] - # [21] equals middle row - @{16_sect_21} Convert To List ${docx_tables}[1][21] - VAR @{16_sect_21_expected} Odoo Open Receipt 0.0 0.0 None 0.0 None 1 - Lists Should Be Equal ${16_sect_21_expected} ${16_sect_21} msg=[ Expected != Converted ] - # [30] equals upper middle row - @{16_sect_30} Convert To List ${docx_tables}[1][30] - VAR @{16_sect_30_expected} Opening browser 'Chrome' to base url 'https://192.168.13.58'. 1.781 2.781 None 3.308 0.621 5 - Lists Should Be Equal ${16_sect_30_expected} ${16_sect_30} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 17 Data Table Result TPS - Log Data Table Result TPS: ${docx_tables}[2] - VAR ${table_result_tps_expected_length} 60 - VAR @{table_result_tps_expected} Result Name Result Count - @{table_result_tps_header_row} Convert To List ${docx_tables}[2][0] - Length Should Be ${docx_tables}[2] ${table_result_tps_expected_length} - Lists Should Be Equal ${table_result_tps_expected} ${table_result_tps_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${table_result_tps_expected_length} - VAR ${row} ${docx_tables}[2][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Result TPS! - END - # [1] equals first data row - @{17_sect_1} Convert To List ${docx_tables}[2][1] - VAR @{17_sect_1_expected} Open Odoo Login Screen PASS 30 - Lists Should Be Equal ${17_sect_1_expected} ${17_sect_1} msg=[ Expected != Converted ] - # [-2] equals almost last row - @{17_sect_-2} Convert To List ${docx_tables}[2][-2] - VAR @{17_sect_-2_expected} Odoo Confirm RFQ FAIL 1 - Lists Should Be Equal ${17_sect_-2_expected} ${17_sect_-2} msg=[ Expected != Converted ] - # [15] equals quater row - @{17_sect_15} Convert To List ${docx_tables}[2][15] - VAR @{17_sect_15_expected} :example: 'John Doe' PASS 4 - Lists Should Be Equal ${17_sect_15_expected} ${17_sect_15} msg=[ Expected != Converted ] - # [30] equals middle row - @{17_sect_30} Convert To List ${docx_tables}[2][30] - VAR @{17_sect_30_expected} Clicking element '(//tr/td/span[text()='RFQ'])[1]'. PASS 1 - Lists Should Be Equal ${17_sect_30_expected} ${17_sect_30} msg=[ Expected != Converted ] - # [45] equals upper middle row - @{17_sect_45} Convert To List ${docx_tables}[2][45] - VAR @{17_sect_45_expected} Odoo Validate Receipt NOT RUN 1 - Lists Should Be Equal ${17_sect_45_expected} ${17_sect_45} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 18 Data Table Result TotalTPS - Log Data Table Result TotalTPS: ${docx_tables}[3] - VAR ${table_result_ttps_expected_length} 4 - VAR @{table_result_ttps_header_expected} Result Count - @{table_result_ttps_header_row} Convert To List ${docx_tables}[3][0] - Length Should Be ${docx_tables}[3] ${table_result_ttps_expected_length} - Lists Should Be Equal ${table_result_ttps_header_expected} ${table_result_ttps_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${table_result_ttps_expected_length} - VAR ${row} ${docx_tables}[3][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Result TotalTPS! - END - # [1] equals first data row - @{18_sect_1} Convert To List ${docx_tables}[3][1] - VAR @{18_sect_1_expected} PASS 166 - Lists Should Be Equal ${18_sect_1_expected} ${18_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{18_sect_-1} Convert To List ${docx_tables}[3][-1] - VAR @{18_sect_-1_expected} FAIL 19 - Lists Should Be Equal ${18_sect_-1_expected} ${18_sect_-1} msg=[ Expected != Converted ] - # [2] equals last row - @{18_sect_2} Convert To List ${docx_tables}[3][2] - VAR @{18_sect_2_expected} NOT RUN 55 - Lists Should Be Equal ${18_sect_2_expected} ${18_sect_2} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 19 Data Table ResultSummary - Log Data Table ResultSummary: ${docx_tables}[4] - VAR ${table_resultSum_expected_length} 42 - VAR @{table_resultSum_header_expected} - ... ${EMPTY} Result Name Minimum Average 90%ile Maximum Std. Dev. Pass Fail Other # first colum is ${None} because of the enabled colors - @{table_resultSum_header_row} Convert To List ${docx_tables}[4][0] - Length Should Be ${docx_tables}[4] ${table_resultSum_expected_length} - Lists Should Be Equal ${table_resultSum_header_expected} ${table_resultSum_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${table_resultSum_expected_length} - VAR ${row} ${docx_tables}[4][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table ResultSummary! - END - # [1] equals first data row - @{19_sect_1} Convert To List ${docx_tables}[4][1] - VAR @{19_sect_1_expected} ${EMPTY} :example: 'John Doe' 0.001 0.001 None 0.001 0.0 4 0 0 - Lists Should Be Equal ${19_sect_1_expected} ${19_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{19_sect_-1} Convert To List ${docx_tables}[4][-1] - VAR @{19_sect_-1_expected} ${EMPTY} Waits until the element ``locator`` is visible. 0.045 0.115 None 0.204 0.078 5 0 0 - Lists Should Be Equal ${19_sect_-1_expected} ${19_sect_-1} msg=[ Expected != Converted ] - # [11] equals quater row - @{19_sect_11} Convert To List ${docx_tables}[4][11] - VAR @{19_sect_11_expected} ${EMPTY} Odoo Confirm RFQ None None None None None 0 1 1 - Lists Should Be Equal ${19_sect_11_expected} ${19_sect_11} msg=[ Expected != Converted ] - # [21] equals middle row - @{19_sect_21} Convert To List ${docx_tables}[4][21] - VAR @{19_sect_21_expected} ${EMPTY} Odoo Open Receipt None None None None None 0 0 1 - Lists Should Be Equal ${19_sect_21_expected} ${19_sect_21} msg=[ Expected != Converted ] - # [31] equals upper middle row - @{19_sect_31} Convert To List ${docx_tables}[4][31] - VAR @{19_sect_31_expected} ${EMPTY} Returns the number of elements matching ``locator``. 0.012 0.012 None 0.012 None 1 0 2 - Lists Should Be Equal ${19_sect_31_expected} ${19_sect_31} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 20 Data Table Polish Lang - Log Data Table Polish Lang: ${docx_tables}[5] - VAR ${table_polish_expected_length} 42 - VAR @{table_polish_header_expected} - ... Nazwa Wyniku Minimum Średnia 90%yl Maksimum Odchylenie Standardowe Pomyślnie Niepowodzenie Inne - @{table_polish_header_row} Convert To List ${docx_tables}[5][0] #first row (header) - Length Should Be ${docx_tables}[5] ${table_polish_expected_length} - Lists Should Be Equal ${table_polish_header_expected} ${table_polish_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${table_polish_expected_length} - VAR ${row} ${docx_tables}[5][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table ResultSummary! - END + VAR ${section} Data Table Result + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Table Content ${docx_data} ${section} - Dictionary Should Contain Key ${docx_paragraphs} 21 Data Table ST ET - Log Data Table ST ET: ${docx_tables}[6] - VAR ${table_resultSum_expected_length} 14 - FOR ${i} IN RANGE 0 ${table_resultSum_expected_length} - VAR ${row} ${docx_tables}[6][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table ST ET! - END - # [1] equals first data row - @{21_sect_1} Convert To List ${docx_tables}[6][1] - VAR @{21_sect_1_expected} :example: 'John Doe' 0.001 0.001 None 0.001 None 1 0 0 - Lists Should Be Equal ${21_sect_1_expected} ${21_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{21_sect_-1} Convert To List ${docx_tables}[6][-1] - VAR @{21_sect_-1_expected} Open Odoo Login Screen 1.712 1.834 None 1.956 0.173 2 0 0 - Lists Should Be Equal ${21_sect_-1_expected} ${21_sect_-1} msg=[ Expected != Converted ] - # [4] equals quater row - @{21_sect_4} Convert To List ${docx_tables}[6][4] - VAR @{21_sect_4_expected} Odoo Fill Sale Data 0.713 0.713 None 0.713 None 1 0 1 - Lists Should Be Equal ${21_sect_4_expected} ${21_sect_4} msg=[ Expected != Converted ] - # [7] equals middle row - @{21_sect_7} Convert To List ${docx_tables}[6][7] - VAR @{21_sect_7_expected} Odoo Open Delivery Orders 0.433 0.433 None 0.433 None 1 0 1 - Lists Should Be Equal ${21_sect_7_expected} ${21_sect_7} msg=[ Expected != Converted ] - # [10] equals upper middle row - @{21_sect_10} Convert To List ${docx_tables}[6][10] - VAR @{21_sect_10_expected} Odoo Return to Inventory Overview None None None None None 0 0 1 - Lists Should Be Equal ${21_sect_10_expected} ${21_sect_10} msg=[ Expected != Converted ] + VAR ${section} Data Table Result TPS + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Table Content ${docx_data} ${section} + + VAR ${section} Data Table Result TotalTPS + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Table Content ${docx_data} ${section} + + VAR ${section} Data Table ResultSummary + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Table Content ${docx_data} ${section} custom=${True} + + VAR ${section} Data Table Polish Lang + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Table Content ${docx_data} ${section} + + VAR ${section} Data Table ST ET + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Table Content ${docx_data} ${section} # Error Details: - # Error Details Screenshots: - VAR ${first_error_image} 50 - ${len}= Get Length ${expected_docx_images} - FOR ${image_num} IN RANGE ${first_error_image} ${len} - Compare Images ${expected_docx_images}[${image_num}] ${docx_images}[${image_num}] # images should be the same tolerance is not needed - END + Log \nVerifying Error Details: console=${True} + VAR ${section} Error Details + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Error Details Content ${docx_data} ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} - Dictionary Should Contain Key ${docx_paragraphs} 22 Error Details - Log Error Details Table content: ${docx_tables}[7] - VAR ${table_error_expected_length} 33 - VAR @{expected_header_col} Result: Error: Screenshot: - Length Should Be ${docx_tables}[7] ${table_error_expected_length} - FOR ${i} IN RANGE 0 ${table_error_expected_length} - VAR ${row} ${docx_tables}[7][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - END - # [0] equals first data row - @{22_sect_0} Convert To List ${docx_tables}[7][0] - VAR @{22_sect_0_expected} Result: Odoo Create Sale Test: Odoo Sales Script: Odoo.robot Count: 4 - Lists Should Be Equal ${22_sect_0_expected} ${22_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{22_sect_-1} Convert To List ${docx_tables}[7][-1] - VAR @{22_sect_-1_expected} Screenshot: ${EMPTY} - Lists Should Be Equal ${22_sect_-1_expected} ${22_sect_-1} msg=[ Expected != Converted ] - # [10] equals quater row - @{22_sect_10} Convert To List ${docx_tables}[7][10] - VAR @{22_sect_10_expected} Error: Text 'Scheduled Date' did not appear in 2 minutes. Count: 2 - Lists Should Be Equal ${22_sect_10_expected} ${22_sect_10} msg=[ Expected != Converted ] - # [15] equals middle row - @{22_sect_15} Convert To List ${docx_tables}[7][15] - VAR @{22_sect_15_expected} - ... Result: Text 'Requests for Quotation' did not appear in 2 minutes. Test: Odoo Process RFQs Script: Odoo.robot Count: 1 - Lists Should Be Equal ${22_sect_15_expected} ${22_sect_15} msg=[ Expected != Converted ] - # [20] equals upper middle row - @{22_sect_20} Convert To List ${docx_tables}[7][20] - VAR @{22_sect_20_expected} Screenshot: ${EMPTY} - Lists Should Be Equal ${22_sect_20_expected} ${22_sect_20} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 23 Error Details No Screenshots - Log Error Details Table content: ${docx_tables}[8] - VAR ${table_error_expected_length} 22 - VAR @{expected_header_col} Result: Error: - Length Should Be ${docx_tables}[8] ${table_error_expected_length} - FOR ${i} IN RANGE 0 ${table_error_expected_length} - VAR ${row} ${docx_tables}[8][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - END - # [0] equals first data row - @{23_sect_0} Convert To List ${docx_tables}[8][0] - VAR @{23_sect_0_expected} Result: Odoo Create Sale Test: Odoo Sales Script: Odoo.robot Count: 4 - Lists Should Be Equal ${23_sect_0_expected} ${23_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{23_sect_-1} Convert To List ${docx_tables}[8][-1] - VAR @{23_sect_-1_expected} Error: Text 'Scheduled Date' did not appear in 2 minutes. Count: 1 - Lists Should Be Equal ${23_sect_-1_expected} ${23_sect_-1} msg=[ Expected != Converted ] - # [5] equals quater row - @{23_sect_5} Convert To List ${docx_tables}[8][5] - VAR @{23_sect_5_expected} Error: Text 'Inventory Overview' did not appear in 2 minutes. Count: 3 - Lists Should Be Equal ${23_sect_5_expected} ${23_sect_5} msg=[ Expected != Converted ] - # [11] equals middle row - @{23_sect_11} Convert To List ${docx_tables}[8][11] - VAR @{23_sect_11_expected} Error: Text 'Requests for Quotation' did not appear in 2 minutes. Count: 1 - Lists Should Be Equal ${23_sect_11_expected} ${23_sect_11} msg=[ Expected != Converted ] - # [16] equals upper middle row - @{23_sect_16} Convert To List ${docx_tables}[8][16] - VAR @{23_sect_16_expected} Result: Odoo Confirm RFQ Test: Odoo Process RFQs Script: Odoo.robot Count: 1 - Lists Should Be Equal ${23_sect_16_expected} ${23_sect_16} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 24 Error Details No GBRN - Log Error Details Table content: ${docx_tables}[9] - VAR ${table_error_expected_length} 8 - VAR @{expected_header_col} Error: Screenshot: - Length Should Be ${docx_tables}[9] ${table_error_expected_length} - FOR ${i} IN RANGE 0 ${table_error_expected_length} - VAR ${row} ${docx_tables}[9][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - END - # [0] equals first data row - @{24_sect_0} Convert To List ${docx_tables}[9][0] - VAR @{24_sect_0_expected} Error: Text 'New' did not appear in 2 minutes. Count: 14 - Lists Should Be Equal ${24_sect_0_expected} ${24_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{24_sect_-1} Convert To List ${docx_tables}[9][-1] - VAR @{24_sect_-1_expected} Screenshot: ${EMPTY} - Lists Should Be Equal ${24_sect_-1_expected} ${24_sect_-1} msg=[ Expected != Converted ] - # [4] equals middle row - @{24_sect_4} Convert To List ${docx_tables}[9][4] - VAR @{24_sect_4_expected} Error: Text 'Requests for Quotation' did not appear in 2 minutes. Count: 2 - Lists Should Be Equal ${24_sect_4_expected} ${24_sect_4} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 25 Error Details No GBET - Log Error Details Table content: ${docx_tables}[10] - VAR ${table_error_expected_length} 49 - VAR @{expected_header_col} Result: Error: Screenshot: - Length Should Be ${docx_tables}[10] ${table_error_expected_length} - FOR ${i} IN RANGE 0 ${table_error_expected_length} - VAR ${row} ${docx_tables}[10][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - END - # [0] equals first data row - @{25_sect_0} Convert To List ${docx_tables}[10][0] - VAR @{25_sect_0_expected} Result: Odoo Create Sale Test: Odoo Sales Script: Odoo.robot Count: 4 - Lists Should Be Equal ${25_sect_0_expected} ${25_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{25_sect_-1} Convert To List ${docx_tables}[10][-1] - VAR @{25_sect_-1_expected} Screenshot: ${EMPTY} - Lists Should Be Equal ${25_sect_-1_expected} ${25_sect_-1} msg=[ Expected != Converted ] - # [12] equals quater row - @{25_sect_12} Convert To List ${docx_tables}[10][12] - VAR @{25_sect_12_expected} Error: Text 'Salesperson' did not appear in 2 minutes. - Lists Should Be Equal ${25_sect_12_expected} ${25_sect_12} msg=[ Expected != Converted ] - # [24] equals middle row - @{25_sect_24} Convert To List ${docx_tables}[10][24] - VAR @{25_sect_24_expected} Error: Text 'Scheduled Date' did not appear in 2 minutes. - Lists Should Be Equal ${25_sect_24_expected} ${25_sect_24} msg=[ Expected != Converted ] - # [36] equals upper middle row - @{25_sect_36} Convert To List ${docx_tables}[10][36] - VAR @{25_sect_36_expected} Screenshot: ${EMPTY} - Lists Should Be Equal ${25_sect_36_expected} ${25_sect_36} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 26 Error Details Polish Lang - Log Error Details Table content: ${docx_tables}[11] - VAR ${table_error_expected_length} 38 - VAR @{expected_header_col} Nazwa Wyniku: Błąd: - Length Should Be ${docx_tables}[11] ${table_error_expected_length} - FOR ${i} IN RANGE 0 ${table_error_expected_length} - VAR ${row} ${docx_tables}[11][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - END - # [0] equals first data row - @{26_sect_0} Convert To List ${docx_tables}[11][0] - VAR @{26_sect_0_expected} Nazwa Wyniku: Odoo Create Sale Test: Odoo Sales Skrypt: Odoo.robot - Lists Should Be Equal ${26_sect_0_expected} ${26_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{26_sect_-1} Convert To List ${docx_tables}[11][-1] - VAR @{26_sect_-1_expected} Błąd: Text 'Scheduled Date' did not appear in 2 minutes. - Lists Should Be Equal ${26_sect_-1_expected} ${26_sect_-1} msg=[ Expected != Converted ] - # [10] equals quater row - @{26_sect_10} Convert To List ${docx_tables}[11][10] - VAR @{26_sect_10_expected} Nazwa Wyniku: Odoo Create Sale Test: Odoo Sales Skrypt: Odoo.robot - Lists Should Be Equal ${26_sect_10_expected} ${26_sect_10} msg=[ Expected != Converted ] - # [19] equals middle row - @{26_sect_19} Convert To List ${docx_tables}[11][19] - VAR @{26_sect_19_expected} Błąd: Button with locator 'Validate' not found. - Lists Should Be Equal ${26_sect_19_expected} ${26_sect_19} msg=[ Expected != Converted ] - # [29] equals upper middle row - @{26_sect_29} Convert To List ${docx_tables}[11][29] - VAR @{26_sect_29_expected} Błąd: Text 'Requests for Quotation' did not appear in 2 minutes. - Lists Should Be Equal ${26_sect_29_expected} ${26_sect_29} msg=[ Expected != Converted ] - - Dictionary Should Contain Key ${docx_paragraphs} 27 Error Details ST ET - Log Error Details Table content: ${docx_tables}[12] - VAR ${table_error_expected_length} 9 - VAR @{expected_header_col} Result: Error: Screenshot: - Length Should Be ${docx_tables}[12] ${table_error_expected_length} - FOR ${i} IN RANGE 0 ${table_error_expected_length} - VAR ${row} ${docx_tables}[12][${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - END - # [0] equals first data row - @{27_sect_0} Convert To List ${docx_tables}[12][0] - VAR @{27_sect_0_expected} Result: Odoo Create Sale Test: Odoo Sales Script: Odoo.robot Count: 2 - Lists Should Be Equal ${27_sect_0_expected} ${27_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{27_sect_-1} Convert To List ${docx_tables}[12][-1] - VAR @{27_sect_-1_expected} Screenshot: ${EMPTY} - Lists Should Be Equal ${27_sect_-1_expected} ${27_sect_-1} msg=[ Expected != Converted ] - # [3] equals quater row - @{27_sect_3} Convert To List ${docx_tables}[12][3] - VAR @{27_sect_3_expected} Result: Odoo Open Delivery Orders Test: Odoo Deliveries Script: Odoo.robot Count: 1 - Lists Should Be Equal ${27_sect_3_expected} ${27_sect_3} msg=[ Expected != Converted ] - # [5] equals middle row - @{27_sect_5} Convert To List ${docx_tables}[12][5] - VAR @{27_sect_5_expected} Screenshot: ${EMPTY} - Lists Should Be Equal ${27_sect_5_expected} ${27_sect_5} msg=[ Expected != Converted ] - # [20] equals upper middle row - @{27_sect_7} Convert To List ${docx_tables}[12][7] - VAR @{27_sect_7_expected} Error: Button with locator 'Validate' not found. Count: 1 - Lists Should Be Equal ${27_sect_7_expected} ${27_sect_7} msg=[ Expected != Converted ] + VAR ${section} Error Details No Screenshots + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Error Details Content ${docx_data} ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} + + VAR ${section} Error Details No GBRN + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Error Details Content ${docx_data} ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} + + VAR ${section} Error Details No GBET + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Error Details Content ${docx_data} ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} + + VAR ${section} Error Details Polish Lang + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Error Details Content ${docx_data} ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} + + VAR ${section} Error Details ST ET + Dictionary Should Contain Key ${docx_data} ${section} msg=Didn't find "${section}" section. + Verify DOCX Report Error Details Content ${docx_data} ${section} ${docx_file} ${docx_expected_img_path} ${docx_img_path} [Teardown] Run Keywords ... Close GUI AND ... Move File ${docx_file} ${OUTPUT_DIR}${/}${testdata}${/}${resultdata}.docx Verify the Content Of the XLSX Report - [Tags] ubuntu-latest windows-latest macos-latest Issue #37 XLSX robot:continue-on-failure + [Tags] ubuntu-latest windows-latest macos-latest Issue #37 XLSX robot:continue-on-failure Log To Console ${\n}TAGS: ${TEST TAGS} VAR ${testdata} Issue-#36_37_38 VAR ${resultdata} 20230728_154253_Odoo-demo @@ -885,8 +545,8 @@ Verify the Content Of the XLSX Report VAR ${resultfolder} ${basefolder}${/}${resultdata} VAR ${template_dir} ${basefolder}${/}sample.template VAR ${xlsx_file} ${resultfolder}${/}${resultdata}.xlsx - VAR ${xlsx_images} ${OUTPUT_DIR}${/}${testdata}${/}xlsx_images - VAR ${xlsx_expected_images} ${CURDIR}${/}testdata${/}Issue-#37${/}xlsx_images + VAR ${xlsx_img_path} ${OUTPUT_DIR}${/}${testdata}${/}xlsx_images + VAR ${xlsx_expected_img_path} ${CURDIR}${/}testdata${/}Issue-#37${/}xlsx_images VAR ${img_comp_threshold} 0.7 VAR ${move_tolerance} 30 @@ -898,524 +558,178 @@ Verify the Content Of the XLSX Report Wait Until Created ${xlsx_file} timeout=9 minutes Close GUI - Log To Console Verification of saved data in the RFSwarm XLSX raport started. + Log To Console Verification of saved data in the RFSwarm XLSX report started. File Should Exist ${xlsx_file} @{xlsx_sheets}= Read All Xlsx Sheets ${xlsx_file} Log ${xlsx_sheets} - List Should Contain Value ${xlsx_sheets} Cover - @{covercontent}= Read Xlsx Text Data From Sheet ${xlsx_file} Cover - VAR @{cover_expected_0} quickdemo - Lists Should Be Equal ${cover_expected_0} ${cover_content}[0] msg=[ Expected != Converted ] - VAR @{cover_expected_1} 2023-07-28 07:42 - 07:50 - Lists Should Be Equal ${cover_expected_1} ${cover_content}[1] msg=[ Expected != Converted ] + Verify XLSX Cover Page ${xlsx_file} - List Should Contain Value ${xlsx_sheets} 1 This is Heading + VAR ${section} This is Heading + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. # Contents: - List Should Contain Value ${xlsx_sheets} 2 Contents contents - List Should Contain Value ${xlsx_sheets} 3 Contents graphs - List Should Contain Value ${xlsx_sheets} 4 Contents tables + Log \nVerifying Contents: console=${True} + VAR ${section} Contents contents + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Contents ${xlsx_file} ${section} ${xlsx_sheet} + + VAR ${section} Contents graphs + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Contents ${xlsx_file} ${section} ${xlsx_sheet} + + VAR ${section} Contents tables + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Contents ${xlsx_file} ${section} ${xlsx_sheet} # Notes: - List Should Contain Value ${xlsx_sheets} 5 Note - @{5_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 5 Note - VAR @{5_sect_expected} Hello i am a simple and obvious note :-) This is just second line. - ... ${SPACE}- first line ${SPACE}- second line ${SPACE}- third line - ... 5.1 Second Note This is my second note. 5.1.1 Third Note This is my third note. - ${len} Get Length ${5_sect_expected} - FOR ${i} IN RANGE 0 ${len} - Should Be Equal ${5_sect_expected}[${i}] ${5_sect_content}[${i}][0] msg=[ Expected != Converted ] - END + Log \nVerifying Notes: console=${True} + VAR ${section1} Note + VAR ${section2} Second Note + VAR ${section3} Third Note + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section1} + ${sheet_number} Get Substring ${xlsx_sheet} 0 1 + + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section1}" section. + Verify XLSX Report Notes ${xlsx_file} ${section1} ${xlsx_sheet} stop_at=${sheet_number}.1 ${section2} custom=${True} + + Verify XLSX Report Notes ${xlsx_file} ${section2} ${xlsx_sheet} start_at=${sheet_number}.1 ${section2} stop_at=${sheet_number}.1.1 ${section3} + + Verify XLSX Report Notes ${xlsx_file} ${section3} ${xlsx_sheet} start_at=${sheet_number}.1.1 ${section3} # Graphs - when new graphs are required, save them using the function in read_xlsx.py! - List Should Contain Value ${xlsx_sheets} 6 Data Graph Left Metric - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 6 Data Graph Left Metric B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} - - List Should Contain Value ${xlsx_sheets} 7 Data Graph Left Result - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 7 Data Graph Left Result B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} - - List Should Contain Value ${xlsx_sheets} 8 Data Graph Left Result FAIL - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 8 Data Graph Left Result FAIL B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} - - List Should Contain Value ${xlsx_sheets} 9 Data Graph Left Result TPS - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 9 Data Graph Left Result TPS B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} - - List Should Contain Value ${xlsx_sheets} 10 Data Graph Left Result Total TPS - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 10 Data Graph Left Result Total TPS B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} - - List Should Contain Value ${xlsx_sheets} 11 Data Graph Right Metric - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 11 Data Graph Right Metric B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} - - List Should Contain Value ${xlsx_sheets} 12 Data Graph Right Result - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 12 Data Graph Right Result B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} - - List Should Contain Value ${xlsx_sheets} 13 Data Graph LR Combined - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 13 Data Graph LR Combined B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} - - List Should Contain Value ${xlsx_sheets} 14 Data Graph ST ET - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 14 Data Graph ST ET B3 ${xlsx_images} - Convert Image To Black And White ${xlsx_images}${/}${img} - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - ... threshold=${img_comp_threshold} move_tolerance=${move_tolerance} blur=${True} + Log \nVerifying Graphs: console=${True} + VAR ${section} Data Graph Left Metric + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + + VAR ${section} Data Graph Left Result + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + + VAR ${section} Data Graph Left Result FAIL + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + + VAR ${section} Data Graph Left Result TPS + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + + VAR ${section} Data Graph Left Result Total TPS + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + + VAR ${section} Data Graph Right Metric + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + + VAR ${section} Data Graph Right Result + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + + VAR ${section} Data Graph LR Combined + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} + + VAR ${section} Data Graph ST ET + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Graph ${xlsx_file} ${section} B3 ${xlsx_sheet} + ... ${xlsx_expected_img_path} ${xlsx_img_path} ${img_comp_threshold} ${move_tolerance} # Tables: - List Should Contain Value ${xlsx_sheets} 15 Data Table Metric - @{15_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 15 Data Table Metric - Log Data Table Metric: ${15_sect_content} - VAR ${15_sect_length_expected} 437 - VAR @{15_sect_header_expected} PrimaryMetric MetricType SecondaryMetric Minimum Average 90%ile Maximum Std. Dev. - @{15_sect_header_row} Convert To List ${15_sect_content}[0] # table first row (header) - Length Should Be ${15_sect_content} ${15_sect_length_expected} - Lists Should Be Equal ${15_sect_header_expected} ${15_sect_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${15_sect_length_expected} - VAR ${row} ${15_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Metric! - END - # [1] equals first data row - @{15_sect_1} Convert To List ${15_sect_content}[1] - VAR @{15_sect_1_expected} 1 Scenario_Delay Odoo Sales 0 0.0 None 0 None - Lists Should Be Equal ${15_sect_1_expected} ${15_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{15_sect_-1} Convert To List ${15_sect_content}[-1] - VAR @{15_sect_-1_expected} Waits until the element ``locator`` is visible. Summary stDev 0.006 0.047 0.089 0.089 0.038 - Lists Should Be Equal ${15_sect_-1_expected} ${15_sect_-1} msg=[ Expected != Converted ] - # [107] equals quater row - @{15_sect_107} Convert To List ${15_sect_content}[107] - VAR @{15_sect_107_expected} Delay_4 Scenario Odoo Receipts 0 0.0 None 0 None - Lists Should Be Equal ${15_sect_107_expected} ${15_sect_107} msg=[ Expected != Converted ] - # [218] equals middle row - @{15_sect_218} Convert To List ${15_sect_content}[218] - VAR @{15_sect_218_expected} Odoo Open Receipt Summary max None None None None None - Lists Should Be Equal ${15_sect_218_expected} ${15_sect_218} msg=[ Expected != Converted ] - # [327] equals upper middle row - @{15_sect_327} Convert To List ${15_sect_content}[327] - VAR @{15_sect_327_expected} Returns the number of elements matching ``locator``. Summary _fail 0 0.0 0.0 0 0.0 - Lists Should Be Equal ${15_sect_327_expected} ${15_sect_327} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 16 Data Table Result - @{16_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 16 Data Table Result - Log Data Table Result: ${16_sect_content} - VAR ${16_sect_length_expected} 42 - VAR @{16_sect_header_expected} Result Name Minimum Average 90%ile Maximum Std. Dev. Count - @{16_sect_header_row} Convert To List ${16_sect_content}[0] - Length Should Be ${16_sect_content} ${16_sect_length_expected} - Lists Should Be Equal ${16_sect_header_expected} ${16_sect_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${16_sect_length_expected} - VAR ${row} ${16_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Result! - END - # [1] equals first data row - @{16_sect_1} Convert To List ${16_sect_content}[1] - VAR @{16_sect_1_expected} :example: 'John Doe' 0.001 0.001 None 0.001 0.0 4 - Lists Should Be Equal ${16_sect_1_expected} ${16_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{16_sect_-1} Convert To List ${16_sect_content}[-1] - VAR @{16_sect_-1_expected} Waits until the element ``locator`` is visible. 0.045 0.115 None 0.204 0.078 5 - Lists Should Be Equal ${16_sect_-1_expected} ${16_sect_-1} msg=[ Expected != Converted ] - # [12] equals quater row - @{16_sect_12} Convert To List ${16_sect_content}[12] - VAR @{16_sect_12_expected} Odoo Confirm Sale 0.0 11.09 54.927 54.927 23.013 10 - Lists Should Be Equal ${16_sect_12_expected} ${16_sect_12} msg=[ Expected != Converted ] - # [21] equals middle row - @{16_sect_21} Convert To List ${16_sect_content}[21] - VAR @{16_sect_21_expected} Odoo Open Receipt 0.0 0.0 None 0.0 None 1 - Lists Should Be Equal ${16_sect_21_expected} ${16_sect_21} msg=[ Expected != Converted ] - # [30] equals upper middle row - @{16_sect_30} Convert To List ${16_sect_content}[30] - VAR @{16_sect_30_expected} Opening browser 'Chrome' to base url 'https://192.168.13.58'. 1.781 2.781 None 3.308 0.621 5 - Lists Should Be Equal ${16_sect_30_expected} ${16_sect_30} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 17 Data Table Result TPS - @{17_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 17 Data Table Result TPS - Log Data Table Result TPS: ${17_sect_content} - VAR ${17_sect_length_expected} 60 - VAR @{17_sect_header_expected} Result Name Result Count - @{17_sect_header_row} Convert To List ${17_sect_content}[0] # table first row (header) - Length Should Be ${17_sect_content} ${17_sect_length_expected} - Lists Should Be Equal ${17_sect_header_expected} ${17_sect_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${17_sect_length_expected} - VAR ${row} ${17_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Result TPS! - END - # [1] equals first data row - @{17_sect_1} Convert To List ${17_sect_content}[1] - VAR @{17_sect_1_expected} Open Odoo Login Screen PASS 30 - Lists Should Be Equal ${17_sect_1_expected} ${17_sect_1} msg=[ Expected != Converted ] - # [-2] equals almost last row - @{17_sect_-2} Convert To List ${17_sect_content}[-2] - VAR @{17_sect_-2_expected} Odoo Confirm RFQ FAIL 1 - Lists Should Be Equal ${17_sect_-2_expected} ${17_sect_-2} msg=[ Expected != Converted ] - # [15] equals quater row - @{17_sect_15} Convert To List ${17_sect_content}[15] - VAR @{17_sect_15_expected} :example: 'John Doe' PASS 4 - Lists Should Be Equal ${17_sect_15_expected} ${17_sect_15} msg=[ Expected != Converted ] - # [30] equals middle row - @{17_sect_30} Convert To List ${17_sect_content}[30] - VAR @{17_sect_30_expected} Clicking element '(//tr/td/span[text()='RFQ'])[1]'. PASS 1 - Lists Should Be Equal ${17_sect_30_expected} ${17_sect_30} msg=[ Expected != Converted ] - # [45] equals upper middle row - @{17_sect_45} Convert To List ${17_sect_content}[45] - VAR @{17_sect_45_expected} Odoo Validate Receipt NOT RUN 1 - Lists Should Be Equal ${17_sect_45_expected} ${17_sect_45} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 18 Data Table Result TotalTPS - @{18_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 18 Data Table Result TotalTPS - Log Data Table Result TotalTPS: ${18_sect_content} - VAR ${18_sect_length_expected} 4 - VAR @{18_sect_header_expected} Result Count - @{18_sect_header_row} Convert To List ${18_sect_content}[0] # table first row (header) - Length Should Be ${18_sect_content} ${18_sect_length_expected} - Lists Should Be Equal ${18_sect_header_expected} ${18_sect_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${18_sect_length_expected} - VAR ${row} ${18_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Result TotalTPS! - END - # [1] equals first data row - @{18_sect_1} Convert To List ${18_sect_content}[1] - VAR @{18_sect_1_expected} PASS 166 - Lists Should Be Equal ${18_sect_1_expected} ${18_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{18_sect_-1} Convert To List ${18_sect_content}[-1] - VAR @{18_sect_-1_expected} FAIL 19 - Lists Should Be Equal ${18_sect_-1_expected} ${18_sect_-1} msg=[ Expected != Converted ] - # [2] equals last row - @{18_sect_2} Convert To List ${18_sect_content}[2] - VAR @{18_sect_2_expected} NOT RUN 55 - Lists Should Be Equal ${18_sect_2_expected} ${18_sect_2} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 19 Data Table ResultSummary - @{19_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 19 Data Table ResultSummary - Log Data Table ResultSummary: ${19_sect_content} - VAR ${19_sect_length_expected} 42 - VAR @{19_sect_header_expected} Result Name Minimum Average 90%ile Maximum Std. Dev. Pass Fail Other - @{19_sect_header_row} Convert To List ${19_sect_content}[0] # table first row (header) - Length Should Be ${19_sect_content} ${19_sect_length_expected} - Lists Should Be Equal ${19_sect_header_expected} ${19_sect_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${19_sect_length_expected} - VAR ${row} ${19_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table ResultSummary! - END - # [1] equals first data row - @{19_sect_1} Convert To List ${19_sect_content}[1] - VAR @{19_sect_1_expected} :example: 'John Doe' 0.001 0.001 None 0.001 0.0 4 0 0 - Lists Should Be Equal ${19_sect_1_expected} ${19_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{19_sect_-1} Convert To List ${19_sect_content}[-1] - VAR @{19_sect_-1_expected} Waits until the element ``locator`` is visible. 0.045 0.115 None 0.204 0.078 5 0 0 - Lists Should Be Equal ${19_sect_-1_expected} ${19_sect_-1} msg=[ Expected != Converted ] - # [11] equals quater row - @{19_sect_11} Convert To List ${19_sect_content}[11] - VAR @{19_sect_11_expected} Odoo Confirm RFQ None None None None None 0 1 1 - Lists Should Be Equal ${19_sect_11_expected} ${19_sect_11} msg=[ Expected != Converted ] - # [21] equals middle row - @{19_sect_21} Convert To List ${19_sect_content}[21] - VAR @{19_sect_21_expected} Odoo Open Receipt None None None None None 0 0 1 - Lists Should Be Equal ${19_sect_21_expected} ${19_sect_21} msg=[ Expected != Converted ] - # [31] equals upper middle row - @{19_sect_31} Convert To List ${19_sect_content}[31] - VAR @{19_sect_31_expected} Returns the number of elements matching ``locator``. 0.012 0.012 None 0.012 None 1 0 2 - Lists Should Be Equal ${19_sect_31_expected} ${19_sect_31} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 20 Data Table Polish Lang - @{20_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 20 Data Table Polish Lang - Log Data Table Polish Lang: ${20_sect_content} - VAR ${20_sect_length_expected} 42 - VAR @{20_sect_header_expected} - ... Nazwa Wyniku Minimum Średnia 90%yl Maksimum Odchylenie Standardowe Pomyślnie Niepowodzenie Inne - @{20_sect_header_row} Convert To List ${20_sect_content}[0] # table first row (header) - Length Should Be ${20_sect_content} ${20_sect_length_expected} - Lists Should Be Equal ${20_sect_header_expected} ${20_sect_header_row} msg=[ Expected != Converted ] - FOR ${i} IN RANGE 0 ${20_sect_length_expected} - VAR ${row} ${20_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table Polish Lang! - END + Log \nVerifying Tables: console=${True} + VAR ${section} Data Table Metric + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Table Content ${xlsx_file} ${section} ${xlsx_sheet} - List Should Contain Value ${xlsx_sheets} 21 Data Table ST ET - @{21_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 21 Data Table ST ET - Log Data Table ST ET: ${21_sect_content} - VAR ${21_sect_length_expected} 14 - FOR ${i} IN RANGE 0 ${21_sect_length_expected} - VAR ${row} ${21_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Data Table ST ET! - END - # [1] equals first data row - @{21_sect_1} Convert To List ${21_sect_content}[1] - VAR @{21_sect_1_expected} :example: 'John Doe' 0.001 0.001 None 0.001 None 1 0 0 - Lists Should Be Equal ${21_sect_1_expected} ${21_sect_1} msg=[ Expected != Converted ] - # [-1] equals last row - @{21_sect_-1} Convert To List ${21_sect_content}[-1] - VAR @{21_sect_-1_expected} Open Odoo Login Screen 1.712 1.834 None 1.956 0.173 2 0 0 - Lists Should Be Equal ${21_sect_-1_expected} ${21_sect_-1} msg=[ Expected != Converted ] - # [4] equals quater row - @{21_sect_4} Convert To List ${21_sect_content}[4] - VAR @{21_sect_4_expected} Odoo Fill Sale Data 0.713 0.713 None 0.713 None 1 0 1 - Lists Should Be Equal ${21_sect_4_expected} ${21_sect_4} msg=[ Expected != Converted ] - # [7] equals middle row - @{21_sect_7} Convert To List ${21_sect_content}[7] - VAR @{21_sect_7_expected} Odoo Open Delivery Orders 0.433 0.433 None 0.433 None 1 0 1 - Lists Should Be Equal ${21_sect_7_expected} ${21_sect_7} msg=[ Expected != Converted ] - # [10] equals upper middle row - @{21_sect_10} Convert To List ${21_sect_content}[10] - VAR @{21_sect_10_expected} Odoo Return to Inventory Overview None None None None None 0 0 1 - Lists Should Be Equal ${21_sect_10_expected} ${21_sect_10} msg=[ Expected != Converted ] + VAR ${section} Data Table Result + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Table Content ${xlsx_file} ${section} ${xlsx_sheet} + + VAR ${section} Data Table Result TPS + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Table Content ${xlsx_file} ${section} ${xlsx_sheet} + + VAR ${section} Data Table Result TotalTPS + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Table Content ${xlsx_file} ${section} ${xlsx_sheet} + + VAR ${section} Data Table ResultSummary + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Table Content ${xlsx_file} ${section} ${xlsx_sheet} custom=${True} + + VAR ${section} Data Table Polish Lang + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Table Content ${xlsx_file} ${section} ${xlsx_sheet} + + VAR ${section} Data Table ST ET + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Table Content ${xlsx_file} ${section} ${xlsx_sheet} # Error Details: - List Should Contain Value ${xlsx_sheets} 22 Error Details - @{22_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 22 Error Details - Log Error Details: ${22_sect_content} - VAR ${table_error_length_expected} 33 - VAR @{expected_header_col} Result: Error: Screenshot: - Length Should Be ${22_sect_content} ${table_error_length_expected} - FOR ${i} IN RANGE 0 ${table_error_length_expected} - VAR ${row} ${22_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 22 Error Details B${i + 3} ${xlsx_images} - IF '${img}' != '${0}' - Log Image was found in B${i} cell. - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - END - END - # [0] equals first data row - @{22_sect_0} Convert To List ${22_sect_content}[0] - VAR @{22_sect_0_expected} Result: Odoo Create Sale Test: Odoo Sales Script: Odoo.robot Count: 4 - Lists Should Be Equal ${22_sect_0_expected} ${22_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{22_sect_-1} Convert To List ${22_sect_content}[-1] - VAR @{22_sect_-1_expected} Screenshot: ${SPACE} - Lists Should Be Equal ${22_sect_-1_expected} ${22_sect_-1} msg=[ Expected != Converted ] - # [10] equals quater row - @{22_sect_10} Convert To List ${22_sect_content}[10] - VAR @{22_sect_10_expected} Error: Text 'Scheduled Date' did not appear in 2 minutes. Count: 2 - Lists Should Be Equal ${22_sect_10_expected} ${22_sect_10} msg=[ Expected != Converted ] - # [15] equals middle row - @{22_sect_15} Convert To List ${22_sect_content}[15] - VAR @{22_sect_15_expected} - ... Result: Text 'Requests for Quotation' did not appear in 2 minutes. Test: Odoo Process RFQs Script: Odoo.robot Count: 1 - Lists Should Be Equal ${22_sect_15_expected} ${22_sect_15} msg=[ Expected != Converted ] - # [20] equals upper middle row - @{22_sect_20} Convert To List ${22_sect_content}[20] - VAR @{22_sect_20_expected} Screenshot: ${SPACE} - Lists Should Be Equal ${22_sect_20_expected} ${22_sect_20} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 23 Error Details No Screenshots - @{23_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 23 Error Details No Screenshots - Log Error Details Table content: ${23_sect_content} - VAR ${table_error_length_expected} 22 - VAR @{expected_header_col} Result: Error: - Length Should Be ${23_sect_content} ${table_error_length_expected} - FOR ${i} IN RANGE 0 ${table_error_length_expected} - VAR ${row} ${23_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 23 Error Details No Screenshots B${i + 3} ${xlsx_images} - IF '${img}' != '${0}' - Log Image was found in B${i} cell. - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - END - END - # [0] equals first data row - @{23_sect_0} Convert To List ${23_sect_content}[0] - VAR @{23_sect_0_expected} Result: Odoo Create Sale Test: Odoo Sales Script: Odoo.robot Count: 4 - Lists Should Be Equal ${23_sect_0_expected} ${23_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{23_sect_-1} Convert To List ${23_sect_content}[-1] - VAR @{23_sect_-1_expected} Error: Text 'Scheduled Date' did not appear in 2 minutes. Count: 1 - Lists Should Be Equal ${23_sect_-1_expected} ${23_sect_-1} msg=[ Expected != Converted ] - # [5] equals quater row - @{23_sect_5} Convert To List ${23_sect_content}[5] - VAR @{23_sect_5_expected} Error: Text 'Inventory Overview' did not appear in 2 minutes. Count: 3 - Lists Should Be Equal ${23_sect_5_expected} ${23_sect_5} msg=[ Expected != Converted ] - # [11] equals middle row - @{23_sect_11} Convert To List ${23_sect_content}[11] - VAR @{23_sect_11_expected} Error: Text 'Requests for Quotation' did not appear in 2 minutes. Count: 1 - Lists Should Be Equal ${23_sect_11_expected} ${23_sect_11} msg=[ Expected != Converted ] - # [16] equals upper middle row - @{23_sect_16} Convert To List ${23_sect_content}[16] - VAR @{23_sect_16_expected} Result: Odoo Confirm RFQ Test: Odoo Process RFQs Script: Odoo.robot Count: 1 - Lists Should Be Equal ${23_sect_16_expected} ${23_sect_16} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 24 Error Details No GBRN - @{24_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 24 Error Details No GBRN - Log Error Details Table content: ${24_sect_content} - VAR ${table_error_length_expected} 8 - VAR @{expected_header_col} Error: Screenshot: - Length Should Be ${24_sect_content} ${table_error_length_expected} - FOR ${i} IN RANGE 0 ${table_error_length_expected} - VAR ${row} ${24_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 24 Error Details No GBRN B${i + 3} ${xlsx_images} - IF '${img}' != '${0}' - Log Image was found in B${i} cell. - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - END - END - # [0] equals first data row - @{24_sect_0} Convert To List ${24_sect_content}[0] - VAR @{24_sect_0_expected} Error: Text 'New' did not appear in 2 minutes. Count: 14 - Lists Should Be Equal ${24_sect_0_expected} ${24_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{24_sect_-1} Convert To List ${24_sect_content}[-1] - VAR @{24_sect_-1_expected} Screenshot: ${SPACE} - Lists Should Be Equal ${24_sect_-1_expected} ${24_sect_-1} msg=[ Expected != Converted ] - # [4] equals middle row - @{24_sect_4} Convert To List ${24_sect_content}[4] - VAR @{24_sect_4_expected} Error: Text 'Requests for Quotation' did not appear in 2 minutes. Count: 2 - Lists Should Be Equal ${24_sect_4_expected} ${24_sect_4} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 25 Error Details No GBET - @{25_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 25 Error Details No GBET - Log Error Details Table content: ${25_sect_content} - VAR ${table_error_length_expected} 49 - VAR @{expected_header_col} Result: Error: Screenshot: - Length Should Be ${25_sect_content} ${table_error_length_expected} - FOR ${i} IN RANGE 0 ${table_error_length_expected} - VAR ${row} ${25_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 25 Error Details No GBET B${i + 3} ${xlsx_images} - IF '${img}' != '${0}' - Log Image was found in B${i} cell. - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - END - END - # [0] equals first data row - @{25_sect_0} Convert To List ${25_sect_content}[0] - VAR @{25_sect_0_expected} Result: Odoo Create Sale Test: Odoo Sales Script: Odoo.robot Count: 4 - Lists Should Be Equal ${25_sect_0_expected} ${25_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{25_sect_-1} Convert To List ${25_sect_content}[-1] - VAR @{25_sect_-1_expected} Screenshot: ${SPACE} - Lists Should Be Equal ${25_sect_-1_expected} ${25_sect_-1} msg=[ Expected != Converted ] - # [12] equals quater row - @{25_sect_12} Convert To List ${25_sect_content}[12] - VAR @{25_sect_12_expected} Error: Text 'Salesperson' did not appear in 2 minutes. - Lists Should Be Equal ${25_sect_12_expected} ${25_sect_12} msg=[ Expected != Converted ] - # [24] equals middle row - @{25_sect_24} Convert To List ${25_sect_content}[24] - VAR @{25_sect_24_expected} Error: Text 'Scheduled Date' did not appear in 2 minutes. - Lists Should Be Equal ${25_sect_24_expected} ${25_sect_24} msg=[ Expected != Converted ] - # [36] equals upper middle row - @{25_sect_36} Convert To List ${25_sect_content}[36] - VAR @{25_sect_36_expected} Screenshot: ${SPACE} - Lists Should Be Equal ${25_sect_36_expected} ${25_sect_36} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 26 Error Details Polish Lang - @{26_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 26 Error Details Polish Lang - Log Error Details Table content: ${26_sect_content} - VAR ${table_error_length_expected} 38 - VAR @{expected_header_col} Nazwa Wyniku: Błąd: - Length Should Be ${26_sect_content} ${table_error_length_expected} - FOR ${i} IN RANGE 0 ${table_error_length_expected} - VAR ${row} ${26_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 26 Error Details Polish Lang B${i + 3} ${xlsx_images} - IF '${img}' != '${0}' - Log Image was found in B${i} cell. - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - END - END - # [0] equals first data row - @{26_sect_0} Convert To List ${26_sect_content}[0] - VAR @{26_sect_0_expected} Nazwa Wyniku: Odoo Create Sale Test: Odoo Sales Skrypt: Odoo.robot - Lists Should Be Equal ${26_sect_0_expected} ${26_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{26_sect_-1} Convert To List ${26_sect_content}[-1] - VAR @{26_sect_-1_expected} Błąd: Text 'Scheduled Date' did not appear in 2 minutes. - Lists Should Be Equal ${26_sect_-1_expected} ${26_sect_-1} msg=[ Expected != Converted ] - # [10] equals quater row - @{26_sect_10} Convert To List ${26_sect_content}[10] - VAR @{26_sect_10_expected} Nazwa Wyniku: Odoo Create Sale Test: Odoo Sales Skrypt: Odoo.robot - Lists Should Be Equal ${26_sect_10_expected} ${26_sect_10} msg=[ Expected != Converted ] - # [19] equals middle row - @{26_sect_19} Convert To List ${26_sect_content}[19] - VAR @{26_sect_19_expected} Błąd: Button with locator 'Validate' not found. - Lists Should Be Equal ${26_sect_19_expected} ${26_sect_19} msg=[ Expected != Converted ] - # [29] equals upper middle row - @{26_sect_29} Convert To List ${26_sect_content}[29] - VAR @{26_sect_29_expected} Błąd: Text 'Requests for Quotation' did not appear in 2 minutes. - Lists Should Be Equal ${26_sect_29_expected} ${26_sect_29} msg=[ Expected != Converted ] - - List Should Contain Value ${xlsx_sheets} 27 Error Details ST ET - @{27_sect_content}= Read Xlsx Text Data From Sheet ${xlsx_file} 27 Error Details ST ET - Log Error Details Table content: ${27_sect_content} - VAR ${table_error_length_expected} 9 - VAR @{expected_header_col} Result: Error: Screenshot: - Length Should Be ${27_sect_content} ${table_error_length_expected} - FOR ${i} IN RANGE 0 ${table_error_length_expected} - VAR ${row} ${27_sect_content}[${i}] - Should Not Be Empty ${row} msg=Row ${i} is empty in the Error Details Table! - IF '${row}[0]' not in @{expected_header_col} - Fail msg=First column in the ${i} row does not save correctly because "${row}[0]" is not in expected values: ${expected_header_col}. - END - ${img}= Extract Image From Xlsx Sheet ${xlsx_file} 27 Error Details ST ET B${i + 3} ${xlsx_images} - IF '${img}' != '${0}' - Log Image was found in B${i} cell. - Compare Images ${xlsx_expected_images}${/}${img} ${xlsx_images}${/}${img} - END - END - # [0] equals first data row - @{27_sect_0} Convert To List ${27_sect_content}[0] - VAR @{27_sect_0_expected} Result: Odoo Create Sale Test: Odoo Sales Script: Odoo.robot Count: 2 - Lists Should Be Equal ${27_sect_0_expected} ${27_sect_0} msg=[ Expected != Converted ] - # [-1] equals last row - @{27_sect_-1} Convert To List ${27_sect_content}[-1] - VAR @{27_sect_-1_expected} Screenshot: ${SPACE} - Lists Should Be Equal ${27_sect_-1_expected} ${27_sect_-1} msg=[ Expected != Converted ] - # [3] equals quater row - @{27_sect_3} Convert To List ${27_sect_content}[3] - VAR @{27_sect_3_expected} Result: Odoo Open Delivery Orders Test: Odoo Deliveries Script: Odoo.robot Count: 1 - Lists Should Be Equal ${27_sect_3_expected} ${27_sect_3} msg=[ Expected != Converted ] - # [5] equals middle row - @{27_sect_5} Convert To List ${27_sect_content}[5] - VAR @{27_sect_5_expected} Screenshot: ${SPACE} - Lists Should Be Equal ${27_sect_5_expected} ${27_sect_5} msg=[ Expected != Converted ] - # [20] equals upper middle row - @{27_sect_7} Convert To List ${27_sect_content}[7] - VAR @{27_sect_7_expected} Error: Button with locator 'Validate' not found. Count: 1 - Lists Should Be Equal ${27_sect_7_expected} ${27_sect_7} msg=[ Expected != Converted ] + Log \nVerifying Error Details: console=${True} + VAR ${section} Error Details + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Error Details Content ${xlsx_file} ${section} ${xlsx_sheet} ${xlsx_expected_img_path} ${xlsx_img_path} + + VAR ${section} Error Details No Screenshots + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Error Details Content ${xlsx_file} ${section} ${xlsx_sheet} ${xlsx_expected_img_path} ${xlsx_img_path} + + VAR ${section} Error Details No GBRN + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Error Details Content ${xlsx_file} ${section} ${xlsx_sheet} ${xlsx_expected_img_path} ${xlsx_img_path} + + VAR ${section} Error Details No GBET + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Error Details Content ${xlsx_file} ${section} ${xlsx_sheet} ${xlsx_expected_img_path} ${xlsx_img_path} + + VAR ${section} Error Details Polish Lang + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Error Details Content ${xlsx_file} ${section} ${xlsx_sheet} ${xlsx_expected_img_path} ${xlsx_img_path} + + VAR ${section} Error Details ST ET + ${xlsx_sheet} Get Xlsx Sheet By Name ${xlsx_file} ${section} + Should Not Be Equal ${xlsx_sheet} ${0} msg=Didn't find "${section}" section. + Verify XLSX Report Error Details Content ${xlsx_file} ${section} ${xlsx_sheet} ${xlsx_expected_img_path} ${xlsx_img_path} [Teardown] Run Keywords ... Close GUI AND diff --git a/Tests/Regression/Reporter/read_docx.py b/Tests/Regression/Reporter/read_docx.py index cd62f998a..fe25c8981 100644 --- a/Tests/Regression/Reporter/read_docx.py +++ b/Tests/Regression/Reporter/read_docx.py @@ -2,6 +2,7 @@ import re import subprocess +import docx from docx import Document from docx.oxml.shared import OxmlElement, qn @@ -22,7 +23,7 @@ def read_paragraphs_docx_file(docx_path: str) -> dict: if current_heading: doc_sections[current_heading].append(paragraph.text.strip()) else: - doc_sections.setdefault('No Heading', []).append(paragraph.text.strip()) + doc_sections.setdefault('Cover', []).append(paragraph.text.strip()) return doc_sections @@ -53,6 +54,74 @@ def update_table_of_contents(docx_path: str): doc.save(docx_path) +def extract_docx_images_under_heading(heading: str, docx_path: str, output_folder: str, debug=False) -> list: + """ + Extract images from a DOCX file, including images inside tables, + and associate them to the provided heading. + """ + doc = Document(docx_path) + if not os.path.exists(output_folder): + os.makedirs(output_folder) + + image_counter = 1 + current_heading_name = None + image_list = [] + + def extract_images_from_run(run, heading, output_folder): + """Extract images from a run and save them to the given output folder.""" + nonlocal image_counter + + if run.element.xpath('.//w:drawing'): + for rel in run.element.xpath('.//a:blip/@r:embed'): + part = doc.part.related_parts[rel] + + image_name = f"{heading.replace(' ', '_')}_{image_counter}_image.png" + image_path = os.path.join(output_folder, image_name) + + with open(image_path, 'wb') as img_file: + img_file.write(part.blob) + + print(f"DOCX RFSwarm report image saved as: {image_name}") if debug else 0 + image_list.append(image_name) + image_counter += 1 + + for inner_obj in doc.iter_inner_content(): + image_counter = 1 + + if isinstance(inner_obj, docx.text.paragraph.Paragraph): + paragraph = inner_obj + if paragraph.style.name.startswith("Heading"): + heading_name = paragraph.text.strip() + heading_name_splitted = heading_name.split(" ", maxsplit=1) + current_heading_name = heading_name_splitted[1] + + if current_heading_name == heading: + for run in paragraph.runs: + extract_images_from_run(run, current_heading_name, output_folder) + + elif isinstance(inner_obj, docx.table.Table): + if current_heading_name == heading: + table = inner_obj + + def iter_unique_row_cells(row): + """Generate cells in given row skipping empty grid cells.""" + last_cell_tc = None + for cell in row.cells: + this_cell_tc = cell._tc + if this_cell_tc is last_cell_tc: + continue + last_cell_tc = this_cell_tc + yield cell + + for row in table.rows: + for cell in iter_unique_row_cells(row): + for paragraph in cell.paragraphs: + for run in paragraph.runs: + extract_images_from_run(run, current_heading_name, output_folder) + + return image_list + + def extract_images_from_docx(docx_path: str, output_folder: str) -> list: """ Extract all images from DOCX one by one. @@ -71,20 +140,16 @@ def extract_images_from_docx(docx_path: str, output_folder: str) -> list: with open(os.path.join(output_folder, img_name), "wb") as img_file: img_file.write(img_data) - print(f"DOCX RFSwarm raport image saved as: {img_name}") + print(f"DOCX RFSwarm report image saved as: {img_name}") saved_images.append(img_name) return saved_images -def extract_tables_from_docx(docx_path: str) -> list: +def extract_table_from_docx(docx_table_obj: docx.table.Table) -> list: """ - Extract all tables from DOCX one by one. - Returns nested lists of tables. - Note: For RFSwarm DOCX raport the first value of each row will be empty. + Extract table from docx.table.Table object as nested list. """ - doc = Document(docx_path) - tables = [] def iter_unique_row_cells(row): """Generate cells in given row skipping empty grid cells.""" @@ -96,16 +161,14 @@ def iter_unique_row_cells(row): last_cell_tc = this_cell_tc yield cell - for table in doc.tables: - table_data = [] - for row in table.rows: - row_data = [] - for cell in iter_unique_row_cells(row): - row_data.append(cell.text) - table_data.append(row_data) - tables.append(table_data) + table_data = [] + for row in docx_table_obj.rows: + row_data = [] + for cell in iter_unique_row_cells(row): + row_data.append(cell.text) + table_data.append(row_data) - return tables + return table_data def sort_docx_images(docx_images: list) -> list: @@ -114,3 +177,43 @@ def natural_sort_key(filename): return [int(text) if text.isdigit() else text for text in re.split(r'(\d+)', filename)] return sorted(docx_images, key=natural_sort_key) + + +def read_docx_file(docx_path: str, debug=False) -> dict: + """ + Read the docx file in terms of text and table content. + Saved data is saved as: + dict = {"Heading 1" = {"text" = ["line 1", "line 2", ...], "table" = [[row 1], [row 2], ...] }, ...} + """ + doc = Document(docx_path) + doc_data: dict = {} + + current_heading_name = None + + for inner_obj in doc.iter_inner_content(): + if isinstance(inner_obj, docx.text.paragraph.Paragraph): + paragraph = inner_obj + if paragraph.style.name.startswith('Heading'): + heading_name = paragraph.text.strip() + heading_name_splitted = heading_name.split(" ", maxsplit=1) + current_heading_name = heading_name_splitted[1] + doc_data.setdefault(current_heading_name, {"text": [], "table": []}) + + elif paragraph.text.strip(): + if current_heading_name: + doc_data[current_heading_name]["text"].append(paragraph.text.strip()) + else: + doc_data.setdefault("Cover", {"text": []}) + doc_data["Cover"]["text"].append(paragraph.text.strip()) + + elif isinstance(inner_obj, docx.table.Table): + table = inner_obj + table_list = extract_table_from_docx(table) + doc_data[current_heading_name]["table"] = table_list + + if debug: + for k in doc_data: + print(" -", k, ":") + print(doc_data[k], end="\n\n\n") + + return doc_data diff --git a/Tests/Regression/Reporter/read_xlsx.py b/Tests/Regression/Reporter/read_xlsx.py index 8d3e943f7..2241a7b09 100644 --- a/Tests/Regression/Reporter/read_xlsx.py +++ b/Tests/Regression/Reporter/read_xlsx.py @@ -24,11 +24,28 @@ def read_all_xlsx_text_data(xlsx_path: str) -> list: return xlsx_tables -def read_xlsx_text_data_from_sheet(xlsx_path: str, sheet_name: str) -> list: +def get_xlsx_sheet_by_name(xlsx_path: str, sheet_name: str): """ - Read xlsx text data from given xlsx sheet. + Find the full name of the xlsx sheet by its name. + For example: given: "Contents tables" output: "4 Contents tables". """ - all_excel_data_frame = read_excel(xlsx_path, sheet_name, keep_default_na=False, na_values=['NaN']) + xlsx_sheets = load_workbook(xlsx_path, keep_links=False).sheetnames + for sheet in xlsx_sheets: + if " " in list(sheet): + sheet_fragmented = sheet.split(" ", maxsplit=1) + if sheet_fragmented[1] == sheet_name: + return sheet + + return 0 + + +def read_xlsx_text_data_from_sheet(xlsx_path: str, sheet: str, start_at=None, stop_at=None) -> list: + """ + Read xlsx text data from the given xlsx sheet. + start_at - start from the specified string, but do not include it. + stop_at - end at specified string, and don't include it. + """ + all_excel_data_frame = read_excel(xlsx_path, sheet, keep_default_na=False, na_values=['NaN']) excel_data_list = all_excel_data_frame.values.tolist() for row_n in range(len(excel_data_list) - 1, -1, -1): @@ -39,18 +56,29 @@ def read_xlsx_text_data_from_sheet(xlsx_path: str, sheet_name: str) -> list: if len(excel_data_list[row_n]) == 0: excel_data_list.pop(row_n) - return excel_data_list + start_index = 0 + end_index = len(excel_data_list) + if start_at is not None: + for row_n in range(0, len(excel_data_list)): + if start_at in excel_data_list[row_n]: + start_index = row_n + 1 + if stop_at is not None: + for row_n in range(0, len(excel_data_list)): + if stop_at in excel_data_list[row_n]: + end_index = row_n + + return excel_data_list[start_index: end_index] -def extract_image_from_xlsx_sheet(xlsx_path: str, xlsx_sheet: str, cell_id: str, output_folder: str, show_image: bool = False): +def extract_image_from_xlsx_sheet(xlsx_path: str, sheet: str, cell_id: str, output_folder: str, show_image: bool = False): """ Extract an image from XLSX file from a given cell in specified sheet. Returns name of the saved image. """ wb = load_workbook(xlsx_path, keep_links=False) - sheet = wb[xlsx_sheet] + sheet_obj = wb[sheet] try: - image_loader = SheetImageLoader(sheet) + image_loader = SheetImageLoader(sheet_obj) except Exception as e: raise AssertionError("Error in SheetImageLoader:", e) try: @@ -60,7 +88,7 @@ def extract_image_from_xlsx_sheet(xlsx_path: str, xlsx_sheet: str, cell_id: str, return 0 if show_image: image.show() - img_name = (xlsx_sheet + "_" + cell_id + "_image.png").replace(" ", "_") + img_name = (sheet + "_" + cell_id + "_image.png").replace(" ", "_") if not os.path.exists(output_folder): os.makedirs(output_folder) diff --git a/Tests/Regression/Reporter/report_expected_data.yaml b/Tests/Regression/Reporter/report_expected_data.yaml index c3820fffb..1d01bd4df 100644 --- a/Tests/Regression/Reporter/report_expected_data.yaml +++ b/Tests/Regression/Reporter/report_expected_data.yaml @@ -1,3 +1,6 @@ +Cover: + text: ['quickdemo', '2023-07-28 07:42 - 07:50'] + Contents contents: text: ['This is Heading', 'Contents contents', 'Contents graphs', 'Contents tables', 'Note', 'Second Note', 'Third Note', 'Data Graph Left Metric', 'Data Graph Left Result', 'Data Graph Left Result FAIL', 'Data Graph Left Result TPS', @@ -17,6 +20,12 @@ Contents tables: Note: text: ['Hello i am a simple and obvious note :-)', 'This is just second line.', ' - first line', ' - second line', ' - third line', ""] +Note XLSX: + text: ['Hello i am a simple and obvious note :-)', 'This is just second line.', ' - first line', ' - second line', ' - third line'] + +Note DOCX: + text: ['Hello i am a simple and obvious note :-)', 'This is just second line.', '- first line', '- second line', '- third line'] + Second Note: text: ['This is my second note.'] @@ -73,6 +82,26 @@ Data Table ResultSummary: mid_row: ['_', 'Odoo Open Receipt', 'None', 'None', 'None', 'None', 'None', '0', '0', '1'] upper_mid_row: ['_', 'Returns the number of elements matching ``locator``.', '0.012', '0.012', 'None', '0.012', 'None', '1', '0', '2'] +Data Table ResultSummary XLSX: # special version for XLSX + length: 42 + header: ['Result Name', 'Minimum', 'Average', '90%ile', 'Maximum', 'Std. Dev.', 'Pass', 'Fail', 'Other'] + rows_numbers: [1, -1, 11, 21, 31] + first_row: [':example: ''John Doe''', '0.001', '0.001', 'None', '0.001', '0.0', '4', '0', '0'] + last_row: ['Waits until the element ``locator`` is visible.', '0.045', '0.115', 'None', '0.204', '0.078', '5', '0', '0'] + quater_row: ['Odoo Confirm RFQ', 'None', 'None', 'None', 'None', 'None', '0', '1', '1'] + mid_row: ['Odoo Open Receipt', 'None', 'None', 'None', 'None', 'None', '0', '0', '1'] + upper_mid_row: ['Returns the number of elements matching ``locator``.', '0.012', '0.012', 'None', '0.012', 'None', '1', '0', '2'] + +Data Table ResultSummary DOCX: # special version for DOCX + length: 42 + header: ["", 'Result Name', 'Minimum', 'Average', '90%ile', 'Maximum', 'Std. Dev.', 'Pass', 'Fail', 'Other'] + rows_numbers: [1, -1, 11, 21, 31] + first_row: ["", ':example: ''John Doe''', '0.001', '0.001', 'None', '0.001', '0.0', '4', '0', '0'] + last_row: ["", 'Waits until the element ``locator`` is visible.', '0.045', '0.115', 'None', '0.204', '0.078', '5', '0', '0'] + quater_row: ["", 'Odoo Confirm RFQ', 'None', 'None', 'None', 'None', 'None', '0', '1', '1'] + mid_row: ["", 'Odoo Open Receipt', 'None', 'None', 'None', 'None', 'None', '0', '0', '1'] + upper_mid_row: ["", 'Returns the number of elements matching ``locator``.', '0.012', '0.012', 'None', '0.012', 'None', '1', '0', '2'] + Data Table Polish Lang: length: 42 header: ['Nazwa Wyniku', 'Minimum', 'Średnia', '90%yl', 'Maksimum', 'Odchylenie Standardowe', 'Pomyślnie', 'Niepowodzenie', 'Inne'] diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_LR_Combined_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_LR_Combined_1_image.png new file mode 100644 index 000000000..7e077e096 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_LR_Combined_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Metric_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Metric_1_image.png new file mode 100644 index 000000000..4ea9c3c03 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Metric_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_1_image.png new file mode 100644 index 000000000..1c11246e6 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_FAIL_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_FAIL_1_image.png new file mode 100644 index 000000000..533ca4281 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_FAIL_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_TPS_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_TPS_1_image.png new file mode 100644 index 000000000..bcb696735 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_TPS_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_Total_TPS_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_Total_TPS_1_image.png new file mode 100644 index 000000000..01a699906 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Left_Result_Total_TPS_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Right_Metric_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Right_Metric_1_image.png new file mode 100644 index 000000000..e21d47023 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Right_Metric_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Right_Result_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Right_Result_1_image.png new file mode 100644 index 000000000..525a3e38f Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_Right_Result_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_ST_ET_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_ST_ET_1_image.png new file mode 100644 index 000000000..8901638c6 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Data_Graph_ST_ET_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image58.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_10_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image58.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_10_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_11_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_11_image.png new file mode 100644 index 000000000..0d52c0f30 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_11_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image51.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_1_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image51.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_1_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image52.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_2_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image52.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_2_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image53.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_3_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image53.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_3_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image54.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_4_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image54.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_4_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image55.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_5_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image55.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_5_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image56.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_6_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image56.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_6_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_7_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_7_image.png new file mode 100644 index 000000000..58cdeb990 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_7_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image57.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_8_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image57.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_8_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_9_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_9_image.png new file mode 100644 index 000000000..8c9c95dd9 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_9_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image65.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_10_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image65.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_10_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_11_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_11_image.png new file mode 100644 index 000000000..2e5697a55 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_11_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image66.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_12_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image66.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_12_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_13_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_13_image.png new file mode 100644 index 000000000..c8f53a48b Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_13_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_14_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_14_image.png new file mode 100644 index 000000000..58cdeb990 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_14_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_15_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_15_image.png new file mode 100644 index 000000000..58cdeb990 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_15_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_16_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_16_image.png new file mode 100644 index 000000000..8c9c95dd9 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_16_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_17_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_17_image.png new file mode 100644 index 000000000..8c9c95dd9 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_17_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_18_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_18_image.png new file mode 100644 index 000000000..0d52c0f30 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_18_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_19_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_19_image.png new file mode 100644 index 000000000..0d52c0f30 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_19_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_1_image.png new file mode 100644 index 000000000..55be72bee Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image59.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_2_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image59.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_2_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image60.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_3_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image60.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_3_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image61.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_4_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image61.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_4_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_5_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_5_image.png new file mode 100644 index 000000000..a376e37b6 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_5_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image62.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_6_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image62.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_6_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image63.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_7_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image63.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_7_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_8_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_8_image.png new file mode 100644 index 000000000..345708d72 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_8_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image64.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_9_image.png similarity index 100% rename from Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image64.png rename to Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBET_9_image.png diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_1_image.png new file mode 100644 index 000000000..55be72bee Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_2_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_2_image.png new file mode 100644 index 000000000..c8f53a48b Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_2_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_3_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_3_image.png new file mode 100644 index 000000000..58cdeb990 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_3_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_4_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_4_image.png new file mode 100644 index 000000000..8c9c95dd9 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_No_GBRN_4_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_1_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_1_image.png new file mode 100644 index 000000000..f2cc4a49e Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_1_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_2_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_2_image.png new file mode 100644 index 000000000..2e5697a55 Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_2_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_3_image.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_3_image.png new file mode 100644 index 000000000..c8f53a48b Binary files /dev/null and b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/Error_Details_ST_ET_3_image.png differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image1.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image1.png deleted file mode 100644 index 9f7f88c3d..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image1.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image10.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image10.png deleted file mode 100644 index 176ea25db..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image10.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image11.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image11.png deleted file mode 100644 index 4b815066f..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image11.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image12.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image12.png deleted file mode 100644 index db85efeb2..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image12.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image13.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image13.png deleted file mode 100644 index 4429a3d73..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image13.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image14.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image14.png deleted file mode 100644 index 073a476a5..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image14.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image15.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image15.png deleted file mode 100644 index e8e0ea146..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image15.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image16.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image16.png deleted file mode 100644 index b3a25cc73..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image16.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image17.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image17.png deleted file mode 100644 index 815fe5028..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image17.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image18.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image18.png deleted file mode 100644 index 1a2dc196d..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image18.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image19.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image19.png deleted file mode 100644 index 805d0fd79..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image19.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image2.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image2.png deleted file mode 100644 index 14ad817ec..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image2.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image20.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image20.png deleted file mode 100644 index c459a591c..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image20.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image21.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image21.png deleted file mode 100644 index 24b498a3e..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image21.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image22.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image22.png deleted file mode 100644 index 0d858f8cc..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image22.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image23.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image23.png deleted file mode 100644 index 78dab47ac..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image23.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image24.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image24.png deleted file mode 100644 index ac3992f01..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image24.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image25.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image25.png deleted file mode 100644 index a3eae3834..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image25.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image26.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image26.png deleted file mode 100644 index 5f2e1c960..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image26.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image27.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image27.png deleted file mode 100644 index d64554c9a..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image27.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image28.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image28.png deleted file mode 100644 index c6b45052d..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image28.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image29.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image29.png deleted file mode 100644 index 861817e8b..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image29.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image3.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image3.png deleted file mode 100644 index 94165d1c6..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image3.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image30.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image30.png deleted file mode 100644 index 61bccbae4..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image30.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image31.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image31.png deleted file mode 100644 index 2a8d3a7a5..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image31.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image32.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image32.png deleted file mode 100644 index 98d0d7b90..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image32.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image33.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image33.png deleted file mode 100644 index 84349d9bc..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image33.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image34.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image34.png deleted file mode 100644 index d87fc7dc6..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image34.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image35.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image35.png deleted file mode 100644 index 6e113f717..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image35.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image36.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image36.png deleted file mode 100644 index 3c65e63ec..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image36.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image37.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image37.png deleted file mode 100644 index 4f7590a58..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image37.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image38.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image38.png deleted file mode 100644 index c6ed08c0d..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image38.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image39.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image39.png deleted file mode 100644 index 9b6bf584c..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image39.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image4.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image4.png deleted file mode 100644 index 3946d7a85..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image4.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image40.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image40.png deleted file mode 100644 index 471ce16d1..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image40.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image41.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image41.png deleted file mode 100644 index f85ce3ba1..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image41.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image42.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image42.png deleted file mode 100644 index d07c41e21..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image42.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image43.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image43.png deleted file mode 100644 index 2bf7e08e9..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image43.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image44.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image44.png deleted file mode 100644 index cb9a8a341..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image44.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image45.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image45.png deleted file mode 100644 index 464675886..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image45.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image46.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image46.png deleted file mode 100644 index 1880759f7..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image46.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image47.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image47.png deleted file mode 100644 index fdbc82b48..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image47.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image48.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image48.png deleted file mode 100644 index 7e199a8a3..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image48.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image49.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image49.png deleted file mode 100644 index 2e197855a..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image49.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image5.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image5.png deleted file mode 100644 index 8b991153e..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image5.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image50.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image50.png deleted file mode 100644 index e4c46b995..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image50.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image6.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image6.png deleted file mode 100644 index e67a1b298..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image6.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image7.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image7.png deleted file mode 100644 index 1cd5be37e..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image7.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image8.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image8.png deleted file mode 100644 index 00672c438..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image8.png and /dev/null differ diff --git a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image9.png b/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image9.png deleted file mode 100644 index aec6acc79..000000000 Binary files a/Tests/Regression/Reporter/testdata/Issue-#38/docx_images/image9.png and /dev/null differ