From 40b374a675d02a92a15ef58b3bb71266dea00281 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Mon, 3 Oct 2022 17:30:29 -0400 Subject: [PATCH] Fix issue with loading more data than needed --- seleniumbase/behave/behave_sb.py | 10 +- seleniumbase/core/encoded_images.py | 314 ++++++------ seleniumbase/core/report_helper.py | 4 +- seleniumbase/core/style_sheet.py | 709 ++++++++++++++------------ seleniumbase/core/tour_helper.py | 24 +- seleniumbase/core/visual_helper.py | 2 +- seleniumbase/fixtures/base_case.py | 2 +- seleniumbase/fixtures/constants.py | 34 +- seleniumbase/fixtures/js_utils.py | 4 +- seleniumbase/masterqa/master_qa.py | 4 +- seleniumbase/plugins/pytest_plugin.py | 14 +- 11 files changed, 611 insertions(+), 510 deletions(-) diff --git a/seleniumbase/behave/behave_sb.py b/seleniumbase/behave/behave_sb.py index b8ff1f3a..522eccd6 100644 --- a/seleniumbase/behave/behave_sb.py +++ b/seleniumbase/behave/behave_sb.py @@ -989,7 +989,7 @@ def dashboard_pre_processing(): def _create_dashboard_assets_(): import codecs from seleniumbase.js_code.live_js import live_js - from seleniumbase.core.style_sheet import pytest_style + from seleniumbase.core.style_sheet import get_pytest_style abs_path = os.path.abspath(".") assets_folder = os.path.join(abs_path, "assets") @@ -1001,11 +1001,11 @@ def _create_dashboard_assets_(): existing_pytest_style = None with open(pytest_style_css, "r") as f: existing_pytest_style = f.read() - if existing_pytest_style == pytest_style: + if existing_pytest_style == get_pytest_style(): add_pytest_style_css = False if add_pytest_style_css: out_file = codecs.open(pytest_style_css, "w+", encoding="utf-8") - out_file.writelines(pytest_style) + out_file.writelines(get_pytest_style()) out_file.close() live_js_file = os.path.join(assets_folder, "live.js") add_live_js_file = True @@ -1082,8 +1082,8 @@ def _perform_behave_unconfigure_(): ) find_it_3 = 'Untested' swap_with_3 = 'Unreported' - find_it_4 = 'href="%s"' % constants.Dashboard.DASH_PIE_PNG_1 - swap_with_4 = 'href="%s"' % constants.Dashboard.DASH_PIE_PNG_2 + find_it_4 = 'href="%s"' % constants.Dashboard.get_dash_pie_1() + swap_with_4 = 'href="%s"' % constants.Dashboard.get_dash_pie_2() try: abs_path = os.path.abspath(".") dashboard_path = os.path.join(abs_path, "dashboard.html") diff --git a/seleniumbase/core/encoded_images.py b/seleniumbase/core/encoded_images.py index e6b82cc6..8df2d597 100755 --- a/seleniumbase/core/encoded_images.py +++ b/seleniumbase/core/encoded_images.py @@ -3,146 +3,174 @@ > with open("YOUR_FILE.png", "rb") as image_file: > encoded_string = base64.b64encode(image_file.read()) """ -DASH_PIE_PNG_1 = ( - "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAABHCAYAAABVsFofAAAAAXN" - "SR0IArs4c6QAABqxJREFUeAHtnOtPFFcUwO/sLo9GUKIkUtNWDK+a2qZGm2LShDFSoeWhqUat" - "xrSoMSS06R/QD0DSP0MTP1Cb9pMCpUCx0EIaWiBChBYLUWwMEndBEBamuztze8+yd5jdndl57" - "Mzu7IZN8N69j3PP+c05587s3hWh7dc2ASMEGCOTjM7xN37RAnMZhJvlZLTVBeYGi58VRvUxeI" - "DBzK/QfqOsvSWq36IGy+EAEAKjgujPqtmgCCdyYgiW1aAsgUOAsCHvUAUitVszHOkkAMU7W28" - "cvDMgbTaj7jJDCJWxBQWztE1fifUNh9GYYbFDYK/+UxcMPTO9yaFfG/kZgcamfuIt/aSXlR9h" - "cStAQqiZQOq/9vdpU3SIGw7kFAIGLnn8ChlwnCjkm57UD5Ci+nQ2xAUn5C3NOtdMzHACKV5Ah" - "nJOKLfEfWUspwSAHtZjRnAcN5KwdXuOlWDMiCo54CRhG8pDuuBYCWbTKKvwkE3NACDNcKwHI3" - "fNzW3TC0gTnHQAQzHrAaQJTuj+hcq3sBQslL0lGgBtvVOuqcKB7Vp5usk9iWETVFrLNh8TDgm" - "nFiKJDUpLt3/INq92Jx0TTujhMd2wiPao5R9FOM+72r/hXS5OlJSmFezkm5VMk4XzeOYBu15a" - "9PXLhrqhQH7ekNLktGiPEV6ycBjGGaTp3fVqpfvzs4denKvqRlkZs5bDwJavILuAkvdEwQGvI" - "feT5G/zxaPMPO8bRdXzXza4No6W3hUyMjy0L21KBe+JgoOQg5UzWkCuwkW28pS78cIsV7a/T2" - "5MKrfJeU8UHIZBigkKjPdn5ZZ76moqlxrqu/ndu4bNBZKkuAIjiPdE2hIG5/HMVEvkAKX363t" - "eq35+5Vzx0qkPf8TZmU+VxulqTyIb0PPaw/oWqb5hcBiGqZB2qtV5lJG/XlJS86zpM447UtpJ" - "8tGy2hw792Mm+C2JqGIYHGkiFkdoqAhMRrHneGWt+/qFaV/R6wMapthzSERoiXA2d6n4dPa/k" - "lu+ePpk+dLlms7A7l3j8UlLzmzpI4UIR2mX0qsiz2Rlr+/dX+u+cr5g9cSxAcHpnNMuI8lJBx" - "QlX/NQfSVwaJM5JY9cBSuHD7Oery6tce8UdQqZmeqPIjZgI807Ihy1LdwoMp8j55DnZFWt5+r" - "Z0cDePSqPIragw1JbRTi0warStyPvA/flT46+uPhxt39n7qRV65gpN2FwQGmy9Wd79xVWu69/" - "mrNa8f4An+FaMNMYs2UlFA5VHh5FVt47wi42XVzg3j7QJ340YoOoojpC6ZK+SXTd58p511P1E" - "dpxbH4g5+5gDmK8+YnWIdZ6SfGcSIW8O/exy5cq16YP8rbQh+qXVM8BJZzIvzAmDE904K4qcu" - "TLVq+kwpnFI6MdQk/OGvJW2YpKSJmkwBHQ6tB3gTb+EfNvhR2hUJ0SCodB/NxQoH3sF+bPM3Y" - "LIQpEWiYEDskryxNoZPQnvq+QYzbOSBWwc12EgzFqteIRYkGYHP8e38l+ibyVdgZBdSN7Qiut" - "i3Bog1mlA60N3xbauBn8hDVLZqLliHAOlLzVMjc71RyvAg4UmBsReqe68GBNvLKSPT/szoLAM" - "XwD70S+tSl8H7bmAg5tvJlsw4yuf7OsXWQieg4IM5p3/hNW7rXhW2geLZwwqpQt5pED31I9wu" - "AgJJBOh+bQcuL18R/wt2t/4UepDSVEBE7CS+GILkQbtYQWyStPx/AfU718X5mP4Qrp3FQvpSE" - "FtkR4TuzQcmI/N43uj3fg3jwvJrf8UWhTFw8xJcxrwBJZ8+S8J4BW+27zt5gnaD4tQijyMsqd" - "VY7yHJgkTcwu5J28x/dM/YZGzkcKTJv3JBHLHeKWhUMT84Twe08v/rmIQ1z6giFXODIR04suG" - "1bQCd8bk5sezTsXFZhqJeQapZ8hKcIBI+F3A6lmrF59I3co6fyYH0tCkpIOTre6mn0x4UCSAr" - "dLNyhBexSSsNTWmGFFBwYPNEecQKB9KVkSMDdLO1SjQhMcAJA2gDSCAZtjhhUMoC8tpOlYO5d" - "K27aczprhwGS1BCa3gJ3a5O6CY+mnOayoEDjcEzx5mUo5SEcoUTuh1A2HTk6ZHGQQDNipK6wo" - "GCghBxGyrdI2u9VBv3hypWHPoSCCYabxx110TiJKvflFTqe44YDQ4CFDcpbODs9i4C1Kz0pyA" - "GK1mQJHukCychFAQYJD9qMHqX566qbDgcUT6UlmekokOEvgSBexApQVXiLVmdYth0MXoiX9fU" - "HwSKuWeyWyFSfjf12i+m6X2wT0E/gfn/18pZirCc8AAAAASUVORK5CYII=" -) -DASH_PIE_PNG_2 = ( - "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAABHCAYAAABVsFofAAAAAXN" - "SR0IArs4c6QAACQ9JREFUeAHlnH9sFEUUx9/uXXtXKHCWlhatWEoFKddGkWDVCoeQAELxD0Qg" - "oIjxZ4yJJmIIicFGJcZo4l8kBhJjAlhA/hABIeHHIS3yo0SsRyUCpWApx6/YwPW6pXe37ndxj" - "uuy1929vd9O0s7d3Mzse5+8ebMzO285SmJaufnUx7hcx1VabeSyeXbOPXyoeBBtPl844WMjbc" - "3U5cw01tMWQG7c5Kb2CKKr01MkN2lv1dPybh2H1Ax/SPc7rxGDlWhQCYGzcusfrhtdltUMSNc" - "1Ivy9NHiXrOBHZcflXPlvQ12g/VDF5TJluddTTpf/KJeLu/YtkkEBVhiUI1j/+YIqt7Kd2e9x" - "hcOgXLk4yNVxalAYyFRHJ01xXNKUNRocZUMGi4EqneCn4lF+eejF05riBuf1da0HGJSHus7Qu" - "yMO6gISqbheOJFtAOr89nlkv+WULWrMpOvu4XGyJNNw4FPgYFsPFFGsUJiyG+r6pGHlLWPfje" - "TMmqhlETFLWvd65TQjfSjrmoIDaznXXOiCg13/wHrDlqIUxgwc1lekJT0++7rbDKCY4MC3dHj" - "5A7CWOv8uiuZgmcB68w1zJct5ODbLUV5DtqSNq6hy2jUqLQlNi8Vh88pOtb4DTGvLkAOHtxTR" - "l7nr4wZG67pGfy9xttHIJWsIckJeyG20D0NwGBhL0yX6a0K96WFkVFij9QFo2vrX6OzFtpgA6" - "YYTCWbr2E1G5dRVX9RVy3ilJ1d9HRMgXXCSAeaOyonCQxQLIE04yQNj3CKMtjAKaEA42QSGgT" - "QCaEA4mK497kGUKB/DBL6bh+5+TOAnAIJe0G+gy0SFgxs83Mfg5i5pKTlsZHXGv7eGoB/0jKa" - "fKhwsCXDnixs8PQvGaJ2nczmmeWGIh7AehPtQk1UVDtZKWBLE685X7cLpUKblf+6Bw4bTp7MO" - "NQatViEdlEikDKPnbSdsr2D/SXmdfnBgXjCzUflXaMF8f23fsqcbA4WORmWjbPo+0PDqBwf0Q" - "PHdeedk/W1DemdwS6ucvS88sZtsOWcTDiVx94ADih7NesJwIq1mivNWuDOe+hy5pdys4NuTrT" - "2Txv4Yysm5Hv4xSz5Es54wHArxLt/VQVRdfkVVZZ6CZfbagueDb9ScFcY9tFe1UgYXqllPGE5" - "4hlp0eUAVrTl9NbbZI2f4l0/ZHSwYdmTAyoZ/TNG4kuSE9eAhAB4KMLFlOLivwWOTpdNbWLlm" - "njfs9ixxWVWFUDdxp2jP7dBsoKdC6tjI0jmmNxA4gAcKZDh4rgRqU50+uZLefxYxUGgbkzsn9" - "OYkQXh87A7JH3XpbZuO9UZW3bEe8IB8MhyYEuBEOmIjwvNcqML2TMHc4Gs1p2+PedBtpG061V" - "UOLR6z1M2rg6l6tLojNiK81dZXw9eV1QhLntoRKBh20kjbdKlrL/cQeIALrzVLGRXaQn12W1F" - "oLvdyVUng2UfcIYulXX8fKXY6kqD20R7CrA0u4dlKvwL6avIUKLFUO1zBd2p9QvWYHaHcXO2l" - "SOrZUKTf4fVO4fqQ3FvLyvc6bc8WzQ0un9QcKB6usRRJPZ1Iv2O9V53ElFjzQrXBxZWC4A3st" - "uzylObclJ7fpnlK2LBS01v2RyXiLP7V6vzAlHHuYI7Vq1YvXcqSCocpjaWIZeJ9LvGtp71C1e" - "i94a2R1I8qJqKcJ21Y9bvqf18slt5HLdOLqXfyKHdohyefuO5CtXqpKkuJ5SiVlbZGXL1LJvp" - "Ojw+mhTxMvpRaDoQIkdV7kL/w+2bx8EyK6VgDUyX+eUrhHONuNG+ho/k+sXtm/FUz32NK4Pg4" - "a+NasSnYRhenmlchcT0kFU6Qs7ZvE8+d2E/H5qfbEFJDnBQ4IcrpauL+bt5GzWUC1zNfTZB0L" - "LM898o7XLdvsKv9gt/wfo4ehU5xPSe/4nYLzXR2coACBXrapLLOb9/PoJI8J413+usTZjk9XO" - "6RtVyjcEa84EqlsmauzePcLg47b9hXbaafcNsQWdq3896d79PGmkwGA4XiZjlByvEd4zubN4t" - "HSwSxZ06YVoZ9wMHvyhevyTEW8h1p6QiqL6sk+qRhZEyqdHHcvs+4/Ue/E90ugXoeiamTNGiE" - "E6gIG0BsBcS5Yzl8yJ0/wr+6pa1YKhr40QwasdTL5Z38hmv0tYpt01lZJuc4CV8hhQrgBDz0k" - "C0HZ3SHjuimlvOAo50kv9Kxj7+0Z4W4xSGBqdVukRk1hDYngQM7sxxe6OkZWpJfEY5yN46s4H" - "/ybZXWQrc5oSwz1NaWElM4XAs4sNphOFqzlk+07P2Cczd9S/trusXujPUrTHFlLpx3kuRapLE" - "UcrPfwnBQoGY9t3mbZxPXvvkDvmHGBerMCt/ClGc5HDGibhCWxIYUfusHB9RA745jJnLznXs+" - "FH+w/0LHF7KOsjGHI0akDXPETMd+cECt0tldfzOvmJ5o+IcaxKaZAgkVrHI25vJywe4k6B1pN" - "dC1HxwUMN+Dm6H/Q4KeWCGoRfjdAwdAEILjdPnp1zXvZTUf6Ac9oa+aoqpw2PAqkcwNZpeNKZ" - "oTjtRVFQ4qwMwQL4mwQHSUTQn6XJYC1bQi+TS3tHH09sTPhS4EduFRaaYnvWCgZ1TLYRAQI4l" - "QwD+/XsWKMjqPNm2rKaUJB42yxUHDAVeMKqfK6lu6Yj41hxUjisM8iJVESCBOXmbSEMNQguVj" - "ZtILBnrrhoPKDBAOcmeKD2I+JpYoYUNwGCCcdIeTpuoGemxx+h5Jlm9DpNlWa1aCXmrJMBzWC" - "WYxhB15BY8cP8nK0yWHf8F9Gm5HYg28jxkOIOC8bqtn8Gr4IZylSwcrgrVgSSD7F6yXTLxvxx" - "QcGdB/jhqHDBGjhQi4VDhrQMGeDKwFa6VY30IQafmm4TBAOH3JXviBCLhkWRKzFOziYbtFXl2" - "bsJa4w4nsEL4IMVvMknCuN96gmJVgzxdQZEvB9qa0H6XcdoiUzejnuFiO8qKY8pkl4cAzA4V6" - "iC9AwpFWPcNPnooj3rqEtsxKsBmO3UszfgX9RUsJgRN5sUhQKGfv7UI4Af60kvJ9Xagvb4LH2" - "UrU5Eg4HOVFWUQKe8mZ8nfld/byMpQnykKU12Tf/wU491oPtPXjKQAAAABJRU5ErkJggg==" -) -DASH_PIE_PNG_3 = ( - "data:image/gif;base64,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" -) -REPORT_FAVICON = ( - "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXN" - "SR0IArs4c6QAAAM9JREFUKBVjnNS8goEUwESKYpBaFiD+z/hTJz2EoM4rM9cw/mcHaYCA2Nl3" - "YUwEvTBFkZGREchnBEIwAGv4z/6f4T8DWAIk+P8/RA6ZBCkAA4QNi1IUkVVgYf9nBwpCNTiLc" - "GNRgSp0FcxF2CC3RhVVAcOjkNtAEYg4hA3kIjRAPYWmCeRdFIDQ8BBsHookmIMmDtXw5s0bTK" - "VoIhCrQBogLHaPUGQVP7avgnA5PMOAjJ87VkO4ZCUNiFa4GRAu3K9o4lA/LJ+xF6KOIEmykwB" - "QHy74EMZM3QAAAABJRU5ErkJggg==" -) -SIDE_BY_SIDE_PNG = ( - "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXN" - "SR0IArs4c6QAAAIVJREFUKBVjvPLvPwMpgIkUxSC1LBANOo0oGq/Ug7hYBUm2gWQNjBBPa/1l" - "RHbTNWZQSGAVhPqBaRWyeoYrkSAuozaKIMMNEJdkJ5GsAeqkf2Eotl8D8/5fRRGEcGB+aEGJb" - "0g8MGEVxGIIXiFy/eC8CuJsmOH1WkAWVkFoxMEUEqZJdhIAo3Aj/iHmzlMAAAAASUVORK5CYI" - "I=" -) + + +def get_dash_pie_png1(): + DASH_PIE_PNG_1 = ( + "data:image/gif;base64,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" + ) + return DASH_PIE_PNG_1 + + +def get_dash_pie_png2(): + DASH_PIE_PNG_2 = ( + "data:image/gif;base64,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" + "12Tf/wU491oPtPXjKQAAAABJRU5ErkJggg==" + ) + return DASH_PIE_PNG_2 + + +def get_dash_pie_png3(): + DASH_PIE_PNG_3 = ( + "data:image/gif;base64,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" + "FCCAAAAAElFTkSuQmCC" + ) + return DASH_PIE_PNG_3 + + +def get_report_favicon(): + REPORT_FAVICON = ( + "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAA" + "AAXNSR0IArs4c6QAAAM9JREFUKBVjnNS8goEUwESKYpBaFiD+z/hTJz2EoM4rM9cw/mcH" + "aYCA2Nl3YUwEvTBFkZGREchnBEIwAGv4z/6f4T8DWAIk+P8/RA6ZBCkAA4QNi1IUkVVgY" + "f9nBwpCNTiLcGNRgSp0FcxF2CC3RhVVAcOjkNtAEYg4hA3kIjRAPYWmCeRdFIDQ8BBsHo" + "okmIMmDtXw5s0bTKVoIhCrQBogLHaPUGQVP7avgnA5PMOAjJ87VkO4ZCUNiFa4GRAu3K9" + "o4lA/LJ+xF6KOIEmykwBQHy74EMZM3QAAAABJRU5ErkJggg==" + ) + return REPORT_FAVICON + + +def get_side_by_side_png(): + SIDE_BY_SIDE_PNG = ( + "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAA" + "AAXNSR0IArs4c6QAAAIVJREFUKBVjvPLvPwMpgIkUxSC1LBANOo0oGq/Ug7hYBUm2gWQN" + "jBBPa/1lRHbTNWZQSGAVhPqBaRWyeoYrkSAuozaKIMMNEJdkJ5GsAeqkf2Eotl8D8/5fR" + "RGEcGB+aEGJb0g8MGEVxGIIXiFy/eC8CuJsmOH1WkAWVkFoxMEUEqZJdhIAo3Aj/iHmzl" + "MAAAAASUVORK5CYII=" + ) + return SIDE_BY_SIDE_PNG diff --git a/seleniumbase/core/report_helper.py b/seleniumbase/core/report_helper.py index bde7b371..a0fd2ecb 100755 --- a/seleniumbase/core/report_helper.py +++ b/seleniumbase/core/report_helper.py @@ -5,7 +5,7 @@ import sys import time from seleniumbase import config as sb_config from seleniumbase.config import settings -from seleniumbase.core.style_sheet import style +from seleniumbase.core.style_sheet import get_report_style LATEST_REPORT_DIR = settings.LATEST_REPORT_DIR ARCHIVE_DIR = settings.REPORT_ARCHIVE_DIR @@ -292,7 +292,7 @@ def build_report( passing_list, ) report_html = "%s%s" % ( - style, + get_report_style(), table_view, ) results_file = add_results_page(report_html) diff --git a/seleniumbase/core/style_sheet.py b/seleniumbase/core/style_sheet.py index b3d41cfb..57a69c97 100755 --- a/seleniumbase/core/style_sheet.py +++ b/seleniumbase/core/style_sheet.py @@ -1,336 +1,391 @@ from seleniumbase.fixtures import constants -title = """ - Test Report - """ % constants.Report.FAVICON -style = ( - title - + """""" -) +class Saved: + # Storing data to prevent extra loading + pass -# Bootstrap Tour Backdrop Style -bt_backdrop_style = """ - .tour-tour-element { - pointer-events: none !important; - } - :not(.tour-tour-element) .orphan.tour-tour { - box-shadow: 0 0 0 88422px rgba(0, 0, 0, 0.42); - pointer-events: auto !important; - } + +def get_report_style(): + if hasattr(Saved, "report_style"): + return Saved.report_style + title = """ + Test Report + """ % constants.Report.get_favicon() + + style = ( + title + + """""" + ) + Saved.report_style = style + return style + + +def get_bt_backdrop_style(): + # Bootstrap Tour Backdrop Style + if hasattr(Saved, "bt_backdrop_style"): + return Saved.bt_backdrop_style + bt_backdrop_style = """ + .tour-tour-element { + pointer-events: none !important; + } + :not(.tour-tour-element) .orphan.tour-tour { + box-shadow: 0 0 0 88422px rgba(0, 0, 0, 0.42); + pointer-events: auto !important; + } + """ + Saved.bt_backdrop_style = bt_backdrop_style + return bt_backdrop_style + + +def get_dt_backdrop_style(): + # DriverJS Tour Backdrop Style + if hasattr(Saved, "dt_backdrop_style"): + return Saved.dt_backdrop_style + dt_backdrop_style = """ + .driver-fix-stacking { + pointer-events: none !important; + } + #driver-popover-item, .popover-class { + pointer-events: auto !important; + } + button.driver-prev-btn.driver-disabled { + visibility: hidden; + } + """ + Saved.dt_backdrop_style = dt_backdrop_style + return dt_backdrop_style + + +def get_messenger_style(): + if hasattr(Saved, "messenger_style"): + return Saved.messenger_style + font_family = '"Proxima Nova","proxima-nova",Arial,sans-serif !important' + messenger_style = """ + .messenger-message-inner { + font-family: %s; + font-size: 17px; + } + ul.messenger-theme-flat { + box-shadow: 2px 2px 5px 2px rgba(16, 128, 120, 0.34), + 2px 2px 10px 2px rgba(16, 128, 120, 0.28) !important; + } + """ % font_family + Saved.messenger_style = messenger_style + return messenger_style + + +def get_sh_style_test(): + if hasattr(Saved, "sh_style_test"): + return Saved.sh_style_test + sh_style_test = """ + var test_tour = new Shepherd.Tour({ + defaults: { + classes: 'shepherd-theme-dark', + scrollTo: true + } + }); + """ + Saved.sh_style_test = sh_style_test + return sh_style_test + + +def get_hops_backdrop_style(): + # Hopscotch Backdrop Style + if hasattr(Saved, "hops_backdrop_style"): + return Saved.hops_backdrop_style + hops_backdrop_style = """ + .hopscotch-bubble-container { + font-size: 110%; + } + """ + Saved.hops_backdrop_style = hops_backdrop_style + return hops_backdrop_style + + +def get_introjs_style(): + # IntroJS Style + if hasattr(Saved, "introjs_style"): + return Saved.introjs_style + introjs_style = """ + .introjs-button.introjs-nextbutton, + .introjs-button.introjs-donebutton { + color: #fff !important; + background-color: %s !important; + border: 1px solid %s !important; + text-shadow: none; + box-shadow: none; + } + .introjs-button.introjs-nextbutton:hover, + .introjs-button.introjs-donebutton:hover { + color: #fff !important; + background-color: %s !important; + border: 1px solid %s !important; + } + .introjs-button { + box-sizing: content-box; + text-decoration: none; + } + .introjs-button.introjs-skipbutton { + color: %s; + } + .introjs-tooltip, .introjs-floating { + box-sizing: content-box; + position: absolute; + } """ + Saved.introjs_style = introjs_style + return introjs_style -# DriverJS Tour Backdrop Style -dt_backdrop_style = """ - .driver-fix-stacking { - pointer-events: none !important; - } - #driver-popover-item, .popover-class { - pointer-events: auto !important; - } - button.driver-prev-btn.driver-disabled { - visibility: hidden; - } - """ -messenger_style = """ - .messenger-message-inner { - font-family: "Proxima Nova","proxima-nova",Arial,sans-serif !important; - font-size: 17px; - } - ul.messenger-theme-flat { - box-shadow: 2px 2px 5px 2px rgba(16, 128, 120, 0.34), - 2px 2px 10px 2px rgba(16, 128, 120, 0.28) !important; - } - """ +def get_sh_backdrop_style(): + # Shepherd Backdrop Style + if hasattr(Saved, "sh_backdrop_style"): + return Saved.sh_backdrop_style + sh_backdrop_style = """ + body.shepherd-active .shepherd-target.shepherd-enabled { + box-shadow: 0 0 0 99999px rgba(0, 0, 0, 0.20); + pointer-events: none !important; + z-index: 9999; + } + body.shepherd-active .shepherd-orphan { + box-shadow: 0 0 0 99999px rgba(0, 0, 0, 0.20); + pointer-events: auto; + z-index: 9999; + } + body.shepherd-active + .shepherd-enabled.shepherd-element-attached-top { + position: relative; + } + body.shepherd-active + .shepherd-enabled.shepherd-element-attached-bottom { + position: relative; + } + body.shepherd-active .shepherd-step { + pointer-events: auto; + z-index: 9999; + } + body.shepherd-active { + pointer-events: none !important; + } + """ + Saved.sh_backdrop_style = sh_backdrop_style + return sh_backdrop_style -sh_style_test = """ - var test_tour = new Shepherd.Tour({ - defaults: { - classes: 'shepherd-theme-dark', - scrollTo: true - } - }); - """ -# Hopscotch Backdrop Style -hops_backdrop_style = """ - .hopscotch-bubble-container { - font-size: 110%; - } - """ - -# IntroJS Style -introjs_style = """ - .introjs-button.introjs-nextbutton, - .introjs-button.introjs-donebutton { - color: #fff !important; - background-color: %s !important; - border: 1px solid %s !important; - text-shadow: none; - box-shadow: none; - } - .introjs-button.introjs-nextbutton:hover, - .introjs-button.introjs-donebutton:hover { - color: #fff !important; - background-color: %s !important; - border: 1px solid %s !important; - } - .introjs-button { - box-sizing: content-box; - text-decoration: none; - } - .introjs-button.introjs-skipbutton { - color: %s; - } - .introjs-tooltip, .introjs-floating { - box-sizing: content-box; - position: absolute; - } -""" - -# Shepherd Backdrop Style -sh_backdrop_style = """ - body.shepherd-active .shepherd-target.shepherd-enabled { - box-shadow: 0 0 0 99999px rgba(0, 0, 0, 0.20); - pointer-events: none !important; - z-index: 9999; - } - - body.shepherd-active .shepherd-orphan { - box-shadow: 0 0 0 99999px rgba(0, 0, 0, 0.20); - pointer-events: auto; - z-index: 9999; - } - - body.shepherd-active - .shepherd-enabled.shepherd-element-attached-top { - position: relative; - } - - body.shepherd-active - .shepherd-enabled.shepherd-element-attached-bottom { - position: relative; - } - - body.shepherd-active .shepherd-step { - pointer-events: auto; - z-index: 9999; - } - - body.shepherd-active { - pointer-events: none !important; - } - """ - -# pytest html-report Style -pytest_style = """ - body { - font-family: Helvetica, Arial, sans-serif; - font-size: 12px; - min-width: 800px; - color: #999; - } - h1 { - font-size: 24px; - color: black; - } - h2 { - font-size: 16px; - color: black; - } - p { - color: black; - } - a { - color: #999; - } - table { - border-collapse: collapse; - } - #environment td { - padding: 5px; - border: 1px solid #E6E6E6; - } - #environment tr:nth-child(odd) { - background-color: #f6f6f6; - } - span.passed, .passed .col-result { - color: green; - } - span.skipped, span.xfailed, span.rerun, .skipped .col-result, - .xfailed .col-result, .rerun .col-result { - color: orange; - } - span.error, span.failed, span.xpassed, .error .col-result, - .failed .col-result, .xpassed .col-result { - color: red; - } - #results-table { - border: 1px solid #e6e6e6; - color: #999; - font-size: 12px; - width: 100% - } - #results-table th, #results-table td { - padding: 5px; - border: 1px solid #E6E6E6; - text-align: left - } - #results-table th { - font-weight: bold - } - .log:only-child { - height: inherit - } - .log { - background-color: #e6e6e6; - border: 1px solid #e6e6e6; - color: black; - display: block; - font-family: "Courier New", Courier, monospace; - height: 230px; - overflow-y: scroll; - padding: 5px; - white-space: pre-wrap - } - div.image { - border: 1px solid #e6e6e6; - float: right; - height: 240px; - margin-left: 5px; - overflow: hidden; - width: 320px - } - div.image img { - width: 320px - } - .collapsed { - display: none; - } - .expander::after { - content: " (show details)"; - color: #BBB; - font-style: italic; - cursor: pointer; - } - .collapser::after { - content: " (hide details)"; - color: #BBB; - font-style: italic; - cursor: pointer; - } - .sortable { - cursor: pointer; - } - .sort-icon { - font-size: 0px; - float: left; - margin-right: 5px; - margin-top: 5px; - width: 0; - height: 0; - border-left: 8px solid transparent; - border-right: 8px solid transparent; - } - .inactive .sort-icon { - border-top: 8px solid #E6E6E6; - } - .asc.active .sort-icon { - border-bottom: 8px solid #999; - } - .desc.active .sort-icon { - border-top: 8px solid #999; - } - """ +def get_pytest_style(): + # pytest html-report Style + if hasattr(Saved, "pytest_style"): + return Saved.pytest_style + pytest_style = """ + body { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; + min-width: 800px; + color: #999; + } + h1 { + font-size: 24px; + color: black; + } + h2 { + font-size: 16px; + color: black; + } + p { + color: black; + } + a { + color: #999; + } + table { + border-collapse: collapse; + } + #environment td { + padding: 5px; + border: 1px solid #E6E6E6; + } + #environment tr:nth-child(odd) { + background-color: #f6f6f6; + } + span.passed, .passed .col-result { + color: green; + } + span.skipped, span.xfailed, span.rerun, .skipped .col-result, + .xfailed .col-result, .rerun .col-result { + color: orange; + } + span.error, span.failed, span.xpassed, .error .col-result, + .failed .col-result, .xpassed .col-result { + color: red; + } + #results-table { + border: 1px solid #e6e6e6; + color: #999; + font-size: 12px; + width: 100% + } + #results-table th, #results-table td { + padding: 5px; + border: 1px solid #E6E6E6; + text-align: left + } + #results-table th { + font-weight: bold + } + .log:only-child { + height: inherit + } + .log { + background-color: #e6e6e6; + border: 1px solid #e6e6e6; + color: black; + display: block; + font-family: "Courier New", Courier, monospace; + height: 230px; + overflow-y: scroll; + padding: 5px; + white-space: pre-wrap + } + div.image { + border: 1px solid #e6e6e6; + float: right; + height: 240px; + margin-left: 5px; + overflow: hidden; + width: 320px + } + div.image img { + width: 320px + } + .collapsed { + display: none; + } + .expander::after { + content: " (show details)"; + color: #BBB; + font-style: italic; + cursor: pointer; + } + .collapser::after { + content: " (hide details)"; + color: #BBB; + font-style: italic; + cursor: pointer; + } + .sortable { + cursor: pointer; + } + .sort-icon { + font-size: 0px; + float: left; + margin-right: 5px; + margin-top: 5px; + width: 0; + height: 0; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + } + .inactive .sort-icon { + border-top: 8px solid #E6E6E6; + } + .asc.active .sort-icon { + border-bottom: 8px solid #999; + } + .desc.active .sort-icon { + border-top: 8px solid #999; + } + """ + Saved.pytest_style = pytest_style + return pytest_style diff --git a/seleniumbase/core/tour_helper.py b/seleniumbase/core/tour_helper.py index 630a340c..94ef564b 100755 --- a/seleniumbase/core/tour_helper.py +++ b/seleniumbase/core/tour_helper.py @@ -27,7 +27,7 @@ def activate_bootstrap(driver): var tour2 = new Tour({ });""" - backdrop_style = style_sheet.bt_backdrop_style + backdrop_style = style_sheet.get_bt_backdrop_style() js_utils.add_css_style(driver, backdrop_style) js_utils.wait_for_ready_state_complete(driver) js_utils.wait_for_angularjs(driver) @@ -62,7 +62,7 @@ def activate_driverjs(driver): """Allows you to use DriverJS Tours with SeleniumBase https://kamranahmed.info/driver.js/ """ - backdrop_style = style_sheet.dt_backdrop_style + backdrop_style = style_sheet.get_dt_backdrop_style() driverjs_css = constants.DriverJS.MIN_CSS driverjs_js = constants.DriverJS.MIN_JS @@ -109,7 +109,7 @@ def activate_hopscotch(driver): """ hopscotch_css = constants.Hopscotch.MIN_CSS hopscotch_js = constants.Hopscotch.MIN_JS - backdrop_style = style_sheet.hops_backdrop_style + backdrop_style = style_sheet.get_hops_backdrop_style() verify_script = """// Verify Hopscotch activated var hops = hopscotch.isActive; @@ -157,7 +157,7 @@ def activate_introjs(driver): theme_color = sb_config.introjs_theme_color hover_color = sb_config.introjs_hover_color - backdrop_style = style_sheet.introjs_style % ( + backdrop_style = style_sheet.get_introjs_style() % ( theme_color, hover_color, hover_color, @@ -215,8 +215,8 @@ def activate_shepherd(driver): sh_theme_sq_dark_css = constants.Shepherd.THEME_SQ_DK_CSS tether_js = constants.Tether.MIN_JS spinner_css = constants.Messenger.SPINNER_CSS - sh_style = style_sheet.sh_style_test - backdrop_style = style_sheet.sh_backdrop_style + sh_style = style_sheet.get_sh_style_test() + backdrop_style = style_sheet.get_sh_backdrop_style() activate_bootstrap(driver) js_utils.wait_for_ready_state_complete(driver) @@ -252,7 +252,7 @@ def activate_shepherd(driver): def is_shepherd_activated(driver): - sh_style = style_sheet.sh_style_test + sh_style = style_sheet.get_sh_style_test() try: driver.execute_script(sh_style) # Verify Shepherd has loaded return True @@ -923,7 +923,7 @@ def export_tour(tour_steps, name=None, filename="my_tour.js", url=None): jquery_js = constants.JQuery.MIN_JS bootstrap_tour_css = constants.BootstrapTour.MIN_CSS bootstrap_tour_js = constants.BootstrapTour.MIN_JS - backdrop_style = style_sheet.bt_backdrop_style + backdrop_style = style_sheet.get_bt_backdrop_style() backdrop_style = backdrop_style.replace("\n", "") backdrop_style = js_utils.escape_quotes_if_needed(backdrop_style) instructions += 'injectJS("%s");\n' % jquery_js @@ -940,7 +940,7 @@ def export_tour(tour_steps, name=None, filename="my_tour.js", url=None): elif tour_type == "driverjs": driverjs_css = constants.DriverJS.MIN_CSS driverjs_js = constants.DriverJS.MIN_JS - backdrop_style = style_sheet.dt_backdrop_style + backdrop_style = style_sheet.get_dt_backdrop_style() backdrop_style = backdrop_style.replace("\n", "") backdrop_style = js_utils.escape_quotes_if_needed(backdrop_style) instructions += 'injectCSS("%s");\n' % driverjs_css @@ -950,7 +950,7 @@ def export_tour(tour_steps, name=None, filename="my_tour.js", url=None): elif tour_type == "hopscotch": hopscotch_css = constants.Hopscotch.MIN_CSS hopscotch_js = constants.Hopscotch.MIN_JS - backdrop_style = style_sheet.hops_backdrop_style + backdrop_style = style_sheet.get_hops_backdrop_style() backdrop_style = backdrop_style.replace("\n", "") backdrop_style = js_utils.escape_quotes_if_needed(backdrop_style) instructions += 'injectCSS("%s");\n' % hopscotch_css @@ -962,7 +962,7 @@ def export_tour(tour_steps, name=None, filename="my_tour.js", url=None): intro_js = constants.IntroJS.MIN_JS theme_color = sb_config.introjs_theme_color hover_color = sb_config.introjs_hover_color - backdrop_style = style_sheet.introjs_style % ( + backdrop_style = style_sheet.get_introjs_style() % ( theme_color, hover_color, hover_color, @@ -986,7 +986,7 @@ def export_tour(tour_steps, name=None, filename="my_tour.js", url=None): sh_theme_sq_dark_css = constants.Shepherd.THEME_SQ_DK_CSS tether_js = constants.Tether.MIN_JS spinner_css = constants.Messenger.SPINNER_CSS - backdrop_style = style_sheet.sh_backdrop_style + backdrop_style = style_sheet.get_sh_backdrop_style() backdrop_style = backdrop_style.replace("\n", "") backdrop_style = js_utils.escape_quotes_if_needed(backdrop_style) instructions += 'injectCSS("%s");\n' % spinner_css diff --git a/seleniumbase/core/visual_helper.py b/seleniumbase/core/visual_helper.py index 8e551b7f..fb96b646 100755 --- a/seleniumbase/core/visual_helper.py +++ b/seleniumbase/core/visual_helper.py @@ -26,7 +26,7 @@ def get_sbs_head(): '' '' "Visual Comparison" - "" % (constants.SideBySide.SIDE_BY_SIDE_PNG) + "" % (constants.SideBySide.get_favicon()) ) return head diff --git a/seleniumbase/fixtures/base_case.py b/seleniumbase/fixtures/base_case.py index 4c1039a5..c650ec7d 100755 --- a/seleniumbase/fixtures/base_case.py +++ b/seleniumbase/fixtures/base_case.py @@ -13488,7 +13488,7 @@ class BaseCase(unittest.TestCase): "%s" "Dashboard" "%s" - % (constants.Dashboard.DASH_PIE_PNG_1, auto_refresh_html, style) + % (constants.Dashboard.get_dash_pie_1(), auto_refresh_html, style) ) table_html = ( "
" diff --git a/seleniumbase/fixtures/constants.py b/seleniumbase/fixtures/constants.py index fd1c2636..7516e03d 100755 --- a/seleniumbase/fixtures/constants.py +++ b/seleniumbase/fixtures/constants.py @@ -78,12 +78,21 @@ class Dashboard: LOCKFILE = Files.DOWNLOADS_FOLDER + "/dashboard.lock" DASH_JSON = Files.DOWNLOADS_FOLDER + "/dashboard.json" DASH_PIE = Files.DOWNLOADS_FOLDER + "/dash_pie.json" - # DASH_PIE_PNG_1 = "https://seleniumbase.io/img/dash_pie.png" - # DASH_PIE_PNG_2 = "https://seleniumbase.io/img/dash_pie_2.png" - # DASH_PIE_PNG_3 = "https://seleniumbase.io/img/dash_pie_3.png" - DASH_PIE_PNG_1 = encoded_images.DASH_PIE_PNG_1 # Faster than CDN - DASH_PIE_PNG_2 = encoded_images.DASH_PIE_PNG_2 # Faster than CDN - DASH_PIE_PNG_3 = encoded_images.DASH_PIE_PNG_3 # Faster than CDN + + def get_dash_pie_1(): + if not hasattr(encoded_images, "DASH_PIE_PNG_1"): + encoded_images.DASH_PIE_PNG_1 = encoded_images.get_dash_pie_png1() + return encoded_images.DASH_PIE_PNG_1 + + def get_dash_pie_2(): + if not hasattr(encoded_images, "DASH_PIE_PNG_2"): + encoded_images.DASH_PIE_PNG_2 = encoded_images.get_dash_pie_png2() + return encoded_images.DASH_PIE_PNG_2 + + def get_dash_pie_3(): + if not hasattr(encoded_images, "DASH_PIE_PNG_3"): + encoded_images.DASH_PIE_PNG_3 = encoded_images.get_dash_pie_png3() + return encoded_images.DASH_PIE_PNG_3 class PipInstall: @@ -91,12 +100,21 @@ class PipInstall: class Report: - FAVICON = encoded_images.REPORT_FAVICON + def get_favicon(): + if not hasattr(encoded_images, "REPORT_FAVICON"): + encoded_images.REPORT_FAVICON = encoded_images.get_report_favicon() + return encoded_images.REPORT_FAVICON class SideBySide: HTML_FILE = "side_by_side.html" - SIDE_BY_SIDE_PNG = encoded_images.SIDE_BY_SIDE_PNG + + def get_favicon(): + if not hasattr(encoded_images, "SIDE_BY_SIDE_PNG"): + encoded_images.SIDE_BY_SIDE_PNG = ( + encoded_images.get_side_by_side_png() + ) + return encoded_images.SIDE_BY_SIDE_PNG class MultiBrowser: diff --git a/seleniumbase/fixtures/js_utils.py b/seleniumbase/fixtures/js_utils.py index f0ae4e40..9986a5e9 100755 --- a/seleniumbase/fixtures/js_utils.py +++ b/seleniumbase/fixtures/js_utils.py @@ -606,7 +606,7 @@ def activate_html_inspector(driver): def activate_messenger(driver): - from seleniumbase.core import style_sheet + from seleniumbase.core.style_sheet import get_messenger_style jquery_js = constants.JQuery.MIN_JS messenger_css = constants.Messenger.MIN_CSS @@ -640,7 +640,7 @@ def activate_messenger(driver): add_js_link(driver, underscore_js) add_css_link(driver, spinner_css) add_js_link(driver, messenger_js) - add_css_style(driver, style_sheet.messenger_style) + add_css_style(driver, get_messenger_style()) for x in range(10): # Messenger needs a small amount of time to load & activate. diff --git a/seleniumbase/masterqa/master_qa.py b/seleniumbase/masterqa/master_qa.py index 3a911397..7ccc3637 100755 --- a/seleniumbase/masterqa/master_qa.py +++ b/seleniumbase/masterqa/master_qa.py @@ -8,7 +8,7 @@ import time from selenium.common.exceptions import NoAlertPresentException from selenium.common.exceptions import WebDriverException from seleniumbase import BaseCase -from seleniumbase.core.style_sheet import style +from seleniumbase.core.style_sheet import get_report_style from seleniumbase.config import settings from seleniumbase.fixtures import js_utils @@ -492,7 +492,7 @@ class MasterQA(BaseCase): failure_table += "" table_view = "%s%s%s" % (summary_table, log_table, failure_table) report_html = "%s%s" % ( - style, + get_report_style(), table_view, ) results_file = self.__add_results_page(report_html) diff --git a/seleniumbase/plugins/pytest_plugin.py b/seleniumbase/plugins/pytest_plugin.py index 10af74bb..720712ee 100644 --- a/seleniumbase/plugins/pytest_plugin.py +++ b/seleniumbase/plugins/pytest_plugin.py @@ -1532,7 +1532,7 @@ def _get_test_ids_(the_item): def _create_dashboard_assets_(): import codecs from seleniumbase.js_code.live_js import live_js - from seleniumbase.core.style_sheet import pytest_style + from seleniumbase.core.style_sheet import get_pytest_style abs_path = os.path.abspath(".") assets_folder = os.path.join(abs_path, "assets") @@ -1544,11 +1544,11 @@ def _create_dashboard_assets_(): existing_pytest_style = None with open(pytest_style_css, "r") as f: existing_pytest_style = f.read() - if existing_pytest_style == pytest_style: + if existing_pytest_style == get_pytest_style(): add_pytest_style_css = False if add_pytest_style_css: out_file = codecs.open(pytest_style_css, "w+", encoding="utf-8") - out_file.writelines(pytest_style) + out_file.writelines(get_pytest_style()) out_file.close() live_js_file = os.path.join(assets_folder, "live.js") add_live_js_file = True @@ -1776,8 +1776,8 @@ def _perform_pytest_unconfigure_(): ) find_it_3 = 'Untested' swap_with_3 = 'Unreported' - find_it_4 = 'href="%s"' % constants.Dashboard.DASH_PIE_PNG_1 - swap_with_4 = 'href="%s"' % constants.Dashboard.DASH_PIE_PNG_2 + find_it_4 = 'href="%s"' % constants.Dashboard.get_dash_pie_1() + swap_with_4 = 'href="%s"' % constants.Dashboard.get_dash_pie_2() try: abs_path = os.path.abspath(".") dashboard_path = os.path.join(abs_path, "dashboard.html") @@ -1814,7 +1814,7 @@ def _perform_pytest_unconfigure_(): the_html_d = the_html_d.replace( "", '' % constants.Dashboard.DASH_PIE_PNG_3, + 'href="%s">' % constants.Dashboard.get_dash_pie_3(), ) the_html_d = the_html_d.replace("", '') the_html_d = the_html_d.replace( @@ -1863,7 +1863,7 @@ def _perform_pytest_unconfigure_(): the_html_r = the_html_r.replace( "", '' % constants.Dashboard.DASH_PIE_PNG_3, + '"%s">' % constants.Dashboard.get_dash_pie_3(), ) if sb_config._dash_final_summary: the_html_r += sb_config._dash_final_summary