def check_window(self, name="<STR_LIT:default>", level=<NUM_LIT:0>, baseline=False):
if level == "<STR_LIT:0>":<EOL><INDENT>level = <NUM_LIT:0><EOL><DEDENT>if level == "<STR_LIT:1>":<EOL><INDENT>level = <NUM_LIT:1><EOL><DEDENT>if level == "<STR_LIT:2>":<EOL><INDENT>level = <NUM_LIT:2><EOL><DEDENT>if level == "<STR_LIT:3>":<EOL><INDENT>level = <NUM_LIT:3><EOL><DEDENT>if level != <NUM_LIT:0> and level != <NUM_LIT:1> and level != <NUM_LIT:2> and level != <NUM_LIT:3>:<EOL><INDENT>raise Exception('<STR_LIT>')<EOL><DEDENT>module = self.__class__.__module__<EOL>if '<STR_LIT:.>' in module and len(module.split('<STR_LIT:.>')[-<NUM_LIT:1>]) > <NUM_LIT:1>:<EOL><INDENT>module = module.split('<STR_LIT:.>')[-<NUM_LIT:1>]<EOL><DEDENT>test_id = "<STR_LIT>" % (module, self._testMethodName)<EOL>if not name or len(name) < <NUM_LIT:1>:<EOL><INDENT>name = "<STR_LIT:default>"<EOL><DEDENT>name = str(name)<EOL>visual_helper.visual_baseline_folder_setup()<EOL>baseline_dir = constants.VisualBaseline.STORAGE_FOLDER<EOL>visual_baseline_path = baseline_dir + "<STR_LIT:/>" + test_id + "<STR_LIT:/>" + name<EOL>page_url_file = visual_baseline_path + "<STR_LIT>"<EOL>screenshot_file = visual_baseline_path + "<STR_LIT>"<EOL>level_1_file = visual_baseline_path + "<STR_LIT>"<EOL>level_2_file = visual_baseline_path + "<STR_LIT>"<EOL>level_3_file = visual_baseline_path + "<STR_LIT>"<EOL>set_baseline = False<EOL>if baseline or self.visual_baseline:<EOL><INDENT>set_baseline = True<EOL><DEDENT>if not os.path.exists(visual_baseline_path):<EOL><INDENT>set_baseline = True<EOL>try:<EOL><INDENT>os.makedirs(visual_baseline_path)<EOL><DEDENT>except Exception:<EOL><INDENT>pass  <EOL><DEDENT><DEDENT>if not os.path.exists(page_url_file):<EOL><INDENT>set_baseline = True<EOL><DEDENT>if not os.path.exists(screenshot_file):<EOL><INDENT>set_baseline = True<EOL><DEDENT>if not os.path.exists(level_1_file):<EOL><INDENT>set_baseline = True<EOL><DEDENT>if not os.path.exists(level_2_file):<EOL><INDENT>set_baseline = True<EOL><DEDENT>if not os.path.exists(level_3_file):<EOL><INDENT>set_baseline = True<EOL><DEDENT>page_url = self.get_current_url()<EOL>soup = self.get_beautiful_soup()<EOL>html_tags = soup.body.find_all()<EOL>level_1 = [[tag.name] for tag in html_tags]<EOL>level_1 = json.loads(json.dumps(level_1))  <EOL>level_2 = [[tag.name, sorted(tag.attrs.keys())] for tag in html_tags]<EOL>level_2 = json.loads(json.dumps(level_2))  <EOL>level_3 = [[tag.name, sorted(tag.attrs.items())] for tag in html_tags]<EOL>level_3 = json.loads(json.dumps(level_3))  <EOL>if set_baseline:<EOL><INDENT>self.save_screenshot("<STR_LIT>", visual_baseline_path)<EOL>out_file = codecs.open(page_url_file, "<STR_LIT>")<EOL>out_file.writelines(page_url)<EOL>out_file.close()<EOL>out_file = codecs.open(level_1_file, "<STR_LIT>")<EOL>out_file.writelines(json.dumps(level_1))<EOL>out_file.close()<EOL>out_file = codecs.open(level_2_file, "<STR_LIT>")<EOL>out_file.writelines(json.dumps(level_2))<EOL>out_file.close()<EOL>out_file = codecs.open(level_3_file, "<STR_LIT>")<EOL>out_file.writelines(json.dumps(level_3))<EOL>out_file.close()<EOL><DEDENT>if not set_baseline:<EOL><INDENT>f = open(page_url_file, '<STR_LIT:r>')<EOL>page_url_data = f.read().strip()<EOL>f.close()<EOL>f = open(level_1_file, '<STR_LIT:r>')<EOL>level_1_data = json.loads(f.read())<EOL>f.close()<EOL>f = open(level_2_file, '<STR_LIT:r>')<EOL>level_2_data = json.loads(f.read())<EOL>f.close()<EOL>f = open(level_3_file, '<STR_LIT:r>')<EOL>level_3_data = json.loads(f.read())<EOL>f.close()<EOL>domain_fail = (<EOL>"<STR_LIT>"<EOL>"<STR_LIT>"<EOL>"<STR_LIT>"<EOL>"<STR_LIT>")<EOL>level_1_failure = (<EOL>"<STR_LIT>"<EOL>"<STR_LIT>")<EOL>level_2_failure = (<EOL>"<STR_LIT>"<EOL>"<STR_LIT>")<EOL>level_3_failure = (<EOL>"<STR_LIT>"<EOL>"<STR_LIT>")<EOL>page_domain = self.get_domain_url(page_url)<EOL>page_data_domain = self.get_domain_url(page_url_data)<EOL>unittest.TestCase.maxDiff = <NUM_LIT:1000><EOL>if level == <NUM_LIT:1> or level == <NUM_LIT:2> or level == <NUM_LIT:3>:<EOL><INDENT>self.assert_equal(page_domain, page_data_domain, domain_fail)<EOL>self.assert_equal(level_1, level_1_data, level_1_failure)<EOL><DEDENT>unittest.TestCase.maxDiff = None<EOL>if level == <NUM_LIT:2> or level == <NUM_LIT:3>:<EOL><INDENT>self.assert_equal(level_2, level_2_data, level_2_failure)<EOL><DEDENT>if level == <NUM_LIT:3>:<EOL><INDENT>self.assert_equal(level_3, level_3_data, level_3_failure)<EOL><DEDENT>if level == <NUM_LIT:0>:<EOL><INDENT>try:<EOL><INDENT>unittest.TestCase.maxDiff = <NUM_LIT:1000><EOL>self.assert_equal(<EOL>page_domain, page_data_domain, domain_fail)<EOL>self.assert_equal(level_1, level_1_data, level_1_failure)<EOL>unittest.TestCase.maxDiff = None<EOL>self.assert_equal(level_2, level_2_data, level_2_failure)<EOL>self.assert_equal(level_3, level_3_data, level_3_failure)<EOL><DEDENT>except Exception as e:<EOL><INDENT>print(e)<EOL><DEDENT><DEDENT><DEDENT>
***  Automated Visual Testing with SeleniumBase  ***

            The first time a test calls self.check_window() for a unique "name"
            parameter provided, it will set a visual baseline, meaning that it
            creates a folder, saves the URL to a file, saves the current window
            screenshot to a file, and creates the following three files
            with the listed data saved:
            tags_level1.txt  ->  HTML tags from the window
            tags_level2.txt  ->  HTML tags + attributes from the window
            tags_level3.txt  ->  HTML tags + attributes/values from the window

            Baseline folders are named based on the test name and the name
            parameter passed to self.check_window(). The same test can store
            multiple baseline folders.

            If the baseline is being set/reset, the "level" doesn't matter.

            After the first run of self.check_window(), it will compare the
            HTML tags of the latest window to the one from the initial run.
            Here's how the level system works:
            * level=0 ->
                DRY RUN ONLY - Will perform a comparison to the baseline, and
                               print out any differences that are found, but
                               won't fail the test even if differences exist.
            * level=1 ->
                HTML tags are compared to tags_level1.txt
            * level=2 ->
                HTML tags are compared to tags_level1.txt and
                HTML tags/attributes are compared to tags_level2.txt
            * level=3 ->
                HTML tags are compared to tags_level1.txt and
                HTML tags + attributes are compared to tags_level2.txt and
                HTML tags + attributes/values are compared to tags_level3.txt
            As shown, Level-3 is the most strict, Level-1 is the least strict.
            If the comparisons from the latest window to the existing baseline
            don't match, the current test will fail, except for Level-0 tests.

            You can reset the visual baseline on the command line by using:
                --visual_baseline
            As long as "--visual_baseline" is used on the command line while
            running tests, the self.check_window() method cannot fail because
            it will rebuild the visual baseline rather than comparing the html
            tags of the latest run to the existing baseline. If there are any
            expected layout changes to a website that you're testing, you'll
            need to reset the baseline to prevent unnecessary failures.

            self.check_window() will fail with "Page Domain Mismatch Failure"
            if the page domain doesn't match the domain of the baseline.

            If you want to use self.check_window() to compare a web page to
            a later version of itself from within the same test run, you can
            add the parameter "baseline=True" to the first time you call
            self.check_window() in a test to use that as the baseline. This
            only makes sense if you're calling self.check_window() more than
            once with the same name parameter in the same test.

            Automated Visual Testing with self.check_window() is not very
            effective for websites that have dynamic content that changes
            the layout and structure of web pages. For those, you're much
            better off using regular SeleniumBase functional testing.

            Example usage:
                self.check_window(name="testing", level=0)
                self.check_window(name="xkcd_home", level=1)
                self.check_window(name="github_page", level=2)
                self.check_window(name="wikipedia_page", level=3)