Beispiel #1
0
def test_assert_screenshot_mobile_resize_and_exclude(driver_wrapper):
    # Create elements mock
    exclude_elements = [get_mock_element(x=0, y=0, height=24, width=375)]

    # Configure driver mock
    with open(file_ios, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    driver_wrapper.driver.get_window_size.return_value = {'width': 375, 'height': 667}

    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('Driver', 'type', 'ios')
    visual = VisualTest(driver_wrapper)

    # Assert screenshot
    visual.assert_screenshot(None, filename='screenshot_ios', file_suffix='screenshot_suffix',
                             exclude_elements=exclude_elements)
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()

    # Check cropped image
    expected_image = os.path.join(root_path, 'resources', 'ios_excluded.png')
    output_file = os.path.join(visual.output_directory, '01_screenshot_ios__screenshot_suffix.png')
    PilEngine().assertSameFiles(output_file, expected_image, 0.1)

    # Output image and new baseline image must be equals
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox',
                                 'screenshot_ios.png')
    PilEngine().assertSameFiles(output_file, baseline_file, 0.1)
Beispiel #2
0
def test_get_scrolls_size_firefox(driver_wrapper):
    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('Driver', 'type', 'firefox')
    visual = VisualTest(driver_wrapper)

    # Check chrome scrolls
    assert visual.get_scrolls_size() == {'x': 0, 'y': 0}
Beispiel #3
0
def test_assert_screenshot_mobile_web_resize_and_exclude(driver_wrapper):
    # Create elements mock
    driver_wrapper.driver.execute_script.return_value = 0  # scrollX=0 and scrollY=0
    form_element = get_mock_element(x=0, y=0, height=559, width=375)
    exclude_elements = [get_mock_element(x=15, y=296.515625, height=32, width=345)]

    # Configure driver mock
    file_ios_web = os.path.join(root_path, 'resources', 'ios_web.png')
    with open(file_ios_web, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    driver_wrapper.driver.get_window_size.return_value = {'width': 375, 'height': 667}

    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('Driver', 'type', 'ios')
    driver_wrapper.config.set('AppiumCapabilities', 'browserName', 'safari')
    visual = VisualTest(driver_wrapper)

    # Assert screenshot
    visual.assert_screenshot(form_element, filename='screenshot_ios_web', file_suffix='screenshot_suffix',
                             exclude_elements=exclude_elements)
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()

    # Check cropped image
    expected_image = os.path.join(root_path, 'resources', 'ios_web_exclude.png')
    output_file = os.path.join(visual.output_directory, '01_screenshot_ios_web__screenshot_suffix.png')
    MagickEngine().assertSameFiles(output_file, expected_image, 0.1)

    # Output image and new baseline image must be equal
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox', 'screenshot_ios_web.png')
    MagickEngine().assertSameFiles(output_file, baseline_file, 0.1)
Beispiel #4
0
def test_no_enabled(driver_wrapper):
    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('VisualTests', 'enabled', 'false')
    visual = VisualTest(driver_wrapper)

    visual.assert_screenshot(None, filename='screenshot_full', file_suffix='screenshot_suffix')
    driver_wrapper.driver.save_screenshot.assert_not_called()
Beispiel #5
0
def test_get_html_row(driver_wrapper):
    expected_row = '<tr class=diff><td>report_name</td><td><img style="width: 100%" onclick=' \
                   '"launchModal\(this.src\)" src=".*register_v2.png"/></td></td><td><img style="width: 100%" ' \
                   'onclick="launchModal\(this.src\)" src=".*register.png"/></td></td><td></td></tr>'
    visual = VisualTest(driver_wrapper)
    row = visual._get_html_row('diff', 'report_name', file_v1, file_v2)
    assert re.compile(expected_row).match(row) is not None
Beispiel #6
0
def test_compare_files_size_fail(driver_wrapper):
    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('VisualTests', 'fail', 'true')
    visual = VisualTest(driver_wrapper)

    with pytest.raises(AssertionError):
        visual.compare_files('report_name', file_v1, file_small, 0)
Beispiel #7
0
def test_exclude_no_elements(driver_wrapper):
    # Exclude no elements
    visual = VisualTest(driver_wrapper)
    img = Image.open(file_v1)
    img = visual.exclude_elements(img, [])

    # Assert output image
    assert_image(visual, img, 'report_name', 'register')
Beispiel #8
0
def test_get_scrolls_size_iexplore(driver_wrapper):
    # Update conf and create a new VisualTest instance
    # Mock scrollHeight, scrollWidth, innerHeight, innerWidth
    driver_wrapper.driver.execute_script.side_effect = [600, 1200, 400, 900]
    driver_wrapper.config.set('Driver', 'type', 'iexplore')
    visual = VisualTest(driver_wrapper)

    # Check chrome scrolls
    assert visual.get_scrolls_size() == {'x': 21, 'y': 21}
Beispiel #9
0
def test_exclude_elements(driver_wrapper):
    # Create elements mock
    visual = VisualTest(driver_wrapper)
    web_elements = [get_mock_element(x=250, y=40, height=40, width=300),
                    get_mock_element(x=250, y=90, height=20, width=100)]
    img = Image.open(file_v1)  # Exclude elements
    img = visual.exclude_elements(img, web_elements)

    # Assert output image
    assert_image(visual, img, 'report_name', 'register_exclude')
Beispiel #10
0
def test_exclude_elements(driver_wrapper):
    # Create elements mock
    driver_wrapper.driver.execute_script.return_value = 0  # scrollX=0 and scrollY=0
    visual = VisualTest(driver_wrapper)
    web_elements = [get_mock_element(x=250, y=40, height=40, width=300),
                    get_mock_element(x=250, y=90, height=20, width=100)]
    img = Image.open(file_v1)  # Exclude elements
    img = visual.exclude_elements(img, web_elements)

    # Assert output image
    assert_image(visual, img, 'report_name', 'register_exclude')
Beispiel #11
0
def test_remove_scrolls_without_scroll(driver_wrapper):
    # Create a new VisualTest instance
    visual = VisualTest(driver_wrapper)
    visual.get_scrolls_size = lambda: {'x': 0, 'y': 0}

    # Remove scroll
    img = Image.open(file_scroll)
    img = visual.remove_scrolls(img)

    # Assert output image
    assert_image(visual, img, 'report_name', 'register_chrome_scroll')
Beispiel #12
0
def test_crop_element(driver_wrapper):
    # Create element mock
    web_element = get_mock_element(x=250, y=40, height=40, width=300)
    visual = VisualTest(driver_wrapper)

    # Resize image
    img = Image.open(file_v1)
    img = visual.crop_element(img, web_element)

    # Assert output image
    assert_image(visual, img, 'report_name', 'register_cropped_element')
Beispiel #13
0
def test_mobile_resize(driver_wrapper):
    # Update conf and create a new VisualTest instance
    driver_wrapper.driver.get_window_size.return_value = {'width': 375, 'height': 667}
    driver_wrapper.config.set('Driver', 'type', 'ios')
    visual = VisualTest(driver_wrapper)

    # Resize image
    img = Image.open(file_ios)
    img = visual.mobile_resize(img)

    # Assert output image
    assert_image(visual, img, 'report_name', 'ios_resized')
Beispiel #14
0
def test_mobile_no_resize(driver_wrapper):
    # Update conf and create a new VisualTest instance
    driver_wrapper.driver.get_window_size.return_value = {'width': 750, 'height': 1334}
    driver_wrapper.config.set('Driver', 'type', 'ios')
    visual = VisualTest(driver_wrapper)

    # Resize image
    orig_img = Image.open(file_ios)
    img = visual.mobile_resize(orig_img)

    # Assert that image object has not been modified
    assert orig_img == img
Beispiel #15
0
def test_crop_element(driver_wrapper):
    # Create element mock
    driver_wrapper.driver.execute_script.return_value = 0  # scrollX=0 and scrollY=0
    web_element = get_mock_element(x=250, y=40, height=40, width=300)
    visual = VisualTest(driver_wrapper)

    # Resize image
    img = Image.open(file_v1)
    img = visual.crop_element(img, web_element)

    # Assert output image
    assert_image(visual, img, 'report_name', 'register_cropped_element')
Beispiel #16
0
def test_assert_screenshot_no_enabled_force(driver_wrapper):
    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data

    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('VisualTests', 'enabled', 'false')
    visual = VisualTest(driver_wrapper, force=True)

    # Assert screenshot
    visual.assert_screenshot(None, filename='screenshot_full', file_suffix='screenshot_suffix')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()
Beispiel #17
0
def test_assert_screenshot_full_and_compare(driver_wrapper):
    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    visual = VisualTest(driver_wrapper)

    # Add baseline image
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox', 'screenshot_full.png')
    shutil.copyfile(file_v1, baseline_file)

    # Assert screenshot
    visual.assert_screenshot(None, filename='screenshot_full', file_suffix='screenshot_suffix')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()
Beispiel #18
0
def test_assert_screenshot_full_and_save_baseline(driver_wrapper):
    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    visual = VisualTest(driver_wrapper)

    # Assert screenshot
    visual.assert_screenshot(None, filename='screenshot_full', file_suffix='screenshot_suffix')
    output_file = os.path.join(visual.output_directory, '01_screenshot_full__screenshot_suffix.png')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()

    # Output image and new baseline image must be equal
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox', 'screenshot_full.png')
    MagickEngine().assertSameFiles(output_file, baseline_file, 0.1)
Beispiel #19
0
def test_assert_screenshot_no_enabled_force(driver_wrapper):
    # Configure driver mock
    def copy_file_side_effect(output_file):
        shutil.copyfile(file_v1, output_file)

    driver_wrapper.driver.save_screenshot.side_effect = copy_file_side_effect

    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('VisualTests', 'enabled', 'false')
    visual = VisualTest(driver_wrapper, force=True)

    # Assert screenshot
    visual.assert_screenshot(None, filename='screenshot_full', file_suffix='screenshot_suffix')
    output_file = os.path.join(visual.output_directory, '01_screenshot_full__screenshot_suffix.png')
    driver_wrapper.driver.save_screenshot.assert_called_once_with(output_file)
Beispiel #20
0
    def test_compare_files_size_fail(self):
        # Update conf and create a new VisualTest instance
        self.driver_wrapper.config.set('VisualTests', 'fail', 'true')
        self.visual = VisualTest(self.driver_wrapper)

        with assert_raises(AssertionError):
            self.visual.compare_files(self._testMethodName, self.file_v1, self.file_small, 0)
Beispiel #21
0
def test_assert_screenshot_full_and_compare(driver_wrapper):
    # Configure driver mock
    def copy_file_side_effect(output_file):
        shutil.copyfile(file_v1, output_file)

    driver_wrapper.driver.save_screenshot.side_effect = copy_file_side_effect
    visual = VisualTest(driver_wrapper)

    # Add baseline image
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox',
                                 'screenshot_full.png')
    shutil.copyfile(file_v1, baseline_file)

    # Assert screenshot
    visual.assert_screenshot(None, filename='screenshot_full', file_suffix='screenshot_suffix')
    output_file = os.path.join(visual.output_directory, '01_screenshot_full__screenshot_suffix.png')
    driver_wrapper.driver.save_screenshot.assert_called_once_with(output_file)
Beispiel #22
0
def test_assert_screenshot_full_without_baseline(driver_wrapper):
    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    driver_wrapper.config.set('VisualTests', 'fail', 'true')
    visual = VisualTest(driver_wrapper)

    # Assert screenshot
    with pytest.raises(AssertionError) as exc:
        visual.assert_screenshot(None,
                                 filename='screenshot_full',
                                 file_suffix='screenshot_suffix')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()
    baseline_file = os.path.join(root_path, 'output', 'visualtests',
                                 'baseline', 'firefox', 'screenshot_full.png')
    assert str(exc.value) == 'Baseline file not found: %s' % baseline_file
Beispiel #23
0
def test_assert_screenshot_full_and_compare(driver_wrapper):
    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    visual = VisualTest(driver_wrapper)

    # Add baseline image
    baseline_file = os.path.join(root_path, 'output', 'visualtests',
                                 'baseline', 'firefox', 'screenshot_full.png')
    shutil.copyfile(file_v1, baseline_file)

    # Assert screenshot
    visual.assert_screenshot(None,
                             filename='screenshot_full',
                             file_suffix='screenshot_suffix')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()
Beispiel #24
0
 def assert_full_screenshot(filename,
                            threshold=0,
                            exclude_elements=[],
                            driver_wrapper=None,
                            force=False):
     VisualTest(driver_wrapper,
                force).assert_screenshot(None, filename, file_suffix,
                                         threshold, exclude_elements)
Beispiel #25
0
def test_diff_message_diff_perceptualdiff():
    message = "The new screenshot 'C:\\...\\01_login_form__test_login.png' did not match the baseline "
    message += """'C:\\...\\login_form.png' (See C:\\...\\01_login_form__test_login.diff.png):
        FAIL: Images are visibly different
        15040 pixels are different
    """
    expected_message = 'Distance of 0.01504000'
    assert expected_message == VisualTest._get_diff_message(message, 1000000)
Beispiel #26
0
def test_diff_message_diff_perceptualdiff():
    message = "The new screenshot 'C:\\...\\01_login_form__test_login.png' did not match the baseline "
    message += """'C:\\...\\login_form.png' (See C:\\...\\01_login_form__test_login.diff.png):
        FAIL: Images are visibly different
        15040 pixels are different
    """
    expected_message = 'Distance of 0.01504000'
    assert expected_message == VisualTest._get_diff_message(message, 1000000)
Beispiel #27
0
 def assert_full_screenshot(filename,
                            threshold=0,
                            exclude_elements=[],
                            driver_wrapper=None,
                            force=False):
     file_suffix = scenario.name.replace(' ', '_')
     VisualTest(driver_wrapper,
                force).assert_screenshot(None, filename, file_suffix,
                                         threshold, exclude_elements)
Beispiel #28
0
def test_assert_screenshot_no_enabled_force(driver_wrapper):
    # Configure driver mock
    def copy_file_side_effect(output_file):
        shutil.copyfile(file_v1, output_file)

    driver_wrapper.driver.save_screenshot.side_effect = copy_file_side_effect

    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('VisualTests', 'enabled', 'false')
    visual = VisualTest(driver_wrapper, force=True)

    # Assert screenshot
    visual.assert_screenshot(None,
                             filename='screenshot_full',
                             file_suffix='screenshot_suffix')
    output_file = os.path.join(visual.output_directory,
                               '01_screenshot_full__screenshot_suffix.png')
    driver_wrapper.driver.save_screenshot.assert_called_once_with(output_file)
Beispiel #29
0
 def assert_screenshot_page_element(self,
                                    filename,
                                    threshold=0,
                                    exclude_elements=[],
                                    force=False):
     VisualTest(self.driver_wrapper,
                force).assert_screenshot(self.web_element, filename,
                                         file_suffix, threshold,
                                         exclude_elements)
Beispiel #30
0
    def test_assert_screenshot_mobile_web_resize_and_exclude(self):
        # Create elements mock
        form_element = get_mock_element(x=0, y=0, height=559, width=375)
        exclude_elements = [
            get_mock_element(x=15, y=296.515625, height=32, width=345)
        ]

        # Configure driver mock
        file_ios_web = os.path.join(self.root_path, 'resources', 'ios_web.png')
        with open(file_ios_web, "rb") as f:
            image_data = f.read()
        self.driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
        self.driver_wrapper.driver.get_window_size.return_value = {
            'width': 375,
            'height': 667
        }

        # Update conf and create a new VisualTest instance
        self.driver_wrapper.config.set('Driver', 'type', 'ios')
        self.driver_wrapper.config.set('AppiumCapabilities', 'browserName',
                                       'safari')
        self.visual = VisualTest(self.driver_wrapper)

        # Assert screenshot
        self.visual.assert_screenshot(form_element,
                                      filename='screenshot_ios_web',
                                      file_suffix='screenshot_suffix',
                                      exclude_elements=exclude_elements)
        self.driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with(
        )

        # Check cropped image
        expected_image = os.path.join(self.root_path, 'resources',
                                      'ios_web_exclude.png')
        output_file = os.path.join(
            self.visual.output_directory,
            '01_screenshot_ios_web__screenshot_suffix.png')
        PilEngine().assertSameFiles(output_file, expected_image, 0.1)

        # Output image and new baseline image must be equals
        baseline_file = os.path.join(self.root_path, 'output', 'visualtests',
                                     'baseline', 'firefox',
                                     'screenshot_ios_web.png')
        PilEngine().assertSameFiles(output_file, baseline_file, 0.1)
Beispiel #31
0
def test_assert_screenshot_no_enabled_force_fail(driver_wrapper):
    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data

    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('VisualTests', 'fail', 'false')
    driver_wrapper.config.set('VisualTests', 'enabled', 'false')
    visual = VisualTest(driver_wrapper, force=True)

    # Add v2 baseline image
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox', 'screenshot_full.png')
    shutil.copyfile(file_v2, baseline_file)

    # Assert screenshot
    with pytest.raises(AssertionError):
        visual.assert_screenshot(None, filename='screenshot_full', file_suffix='screenshot_suffix')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()
Beispiel #32
0
def test_assert_screenshot_element_and_compare(driver_wrapper):
    # Add baseline image
    driver_wrapper.driver.execute_script.return_value = 0  # scrollX=0 and scrollY=0
    visual = VisualTest(driver_wrapper)
    expected_image = os.path.join(root_path, 'resources', 'register_cropped_element.png')
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox', 'screenshot_elem.png')
    shutil.copyfile(expected_image, baseline_file)

    # Create element mock
    web_element = get_mock_element(x=250, y=40, height=40, width=300)

    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data

    # Assert screenshot
    visual.assert_screenshot(web_element, filename='screenshot_elem', file_suffix='screenshot_suffix')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()
Beispiel #33
0
def test_assert_screenshot_full_and_compare(driver_wrapper):
    # Configure driver mock
    def copy_file_side_effect(output_file):
        shutil.copyfile(file_v1, output_file)

    driver_wrapper.driver.save_screenshot.side_effect = copy_file_side_effect
    visual = VisualTest(driver_wrapper)

    # Add baseline image
    baseline_file = os.path.join(root_path, 'output', 'visualtests',
                                 'baseline', 'firefox', 'screenshot_full.png')
    shutil.copyfile(file_v1, baseline_file)

    # Assert screenshot
    visual.assert_screenshot(None,
                             filename='screenshot_full',
                             file_suffix='screenshot_suffix')
    output_file = os.path.join(visual.output_directory,
                               '01_screenshot_full__screenshot_suffix.png')
    driver_wrapper.driver.save_screenshot.assert_called_once_with(output_file)
Beispiel #34
0
    def assert_screenshot(self, filename, threshold=0, exclude_elements=[], force=False):
        """Assert that a screenshot of the element is the same as a screenshot on disk, within a given threshold.

        :param filename: the filename for the screenshot, which will be appended with ``.png``
        :param threshold: percentage threshold for triggering a test failure (value between 0 and 1)
        :param exclude_elements: list of WebElements, PageElements or element locators as a tuple (locator_type,
                                 locator_value) that must be excluded from the assertion
        :param force: if True, the screenshot is compared even if visual testing is disabled by configuration
        """
        VisualTest(self.driver_wrapper, force).assert_screenshot(self.web_element, filename, self.__class__.__name__,
                                                                 threshold, exclude_elements)
Beispiel #35
0
def test_assert_screenshot_full_and_save_baseline(driver_wrapper):
    # Configure driver mock
    def copy_file_side_effect(output_file):
        shutil.copyfile(file_v1, output_file)

    driver_wrapper.driver.save_screenshot.side_effect = copy_file_side_effect
    visual = VisualTest(driver_wrapper)

    # Assert screenshot
    visual.assert_screenshot(None,
                             filename='screenshot_full',
                             file_suffix='screenshot_suffix')
    output_file = os.path.join(visual.output_directory,
                               '01_screenshot_full__screenshot_suffix.png')
    driver_wrapper.driver.save_screenshot.assert_called_once_with(output_file)

    # Output image and new baseline image must be equals
    baseline_file = os.path.join(root_path, 'output', 'visualtests',
                                 'baseline', 'firefox', 'screenshot_full.png')
    MagickEngine().assertSameFiles(output_file, baseline_file, 0.1)
Beispiel #36
0
def test_assert_screenshot_full_and_save_baseline(driver_wrapper):
    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    driver_wrapper.config.set('VisualTests', 'save', 'true')
    visual = VisualTest(driver_wrapper)

    # Assert screenshot
    visual.assert_screenshot(None,
                             filename='screenshot_full',
                             file_suffix='screenshot_suffix')
    output_file = os.path.join(visual.output_directory,
                               '01_screenshot_full__screenshot_suffix.png')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()

    # Output image and new baseline image must be equal
    baseline_file = os.path.join(root_path, 'output', 'visualtests',
                                 'baseline', 'firefox', 'screenshot_full.png')
    compare_image_files(output_file, baseline_file)
Beispiel #37
0
    def test_mobile_resize(self):
        # Update conf and create a new VisualTest instance
        self.driver_wrapper.driver.get_window_size.return_value = {'width': 375, 'height': 667}
        self.driver_wrapper.config.set('Driver', 'type', 'ios')
        self.visual = VisualTest(self.driver_wrapper)

        # Resize image
        img = Image.open(self.file_ios)
        img = self.visual.mobile_resize(img)

        # Assert output image
        self.assert_image(img, self._testMethodName, 'ios_resized')
Beispiel #38
0
    def assert_full_screenshot(self, filename, threshold=0, exclude_elements=[], driver_wrapper=None, force=False):
        """Assert that a driver screenshot is the same as a screenshot on disk, within a given threshold.

        :param filename: the filename for the screenshot, which will be appended with ``.png``
        :param threshold: percentage threshold for triggering a test failure (value between 0 and 1)
        :param exclude_elements: list of CSS/XPATH selectors as a string or WebElement objects that must be excluded
                                 from the assertion.
        :param driver_wrapper: driver wrapper instance
        :param force: if True, the screenshot is compared even if visual testing is disabled by configuration
        """
        file_suffix = self.get_method_name()
        VisualTest(driver_wrapper, force).assert_screenshot(None, filename, file_suffix, threshold, exclude_elements)
Beispiel #39
0
def test_assert_screenshot_no_enabled_force_fail(driver_wrapper):
    # Configure driver mock
    def copy_file_side_effect(output_file):
        shutil.copyfile(file_v1, output_file)

    driver_wrapper.driver.save_screenshot.side_effect = copy_file_side_effect

    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('VisualTests', 'fail', 'false')
    driver_wrapper.config.set('VisualTests', 'enabled', 'false')
    visual = VisualTest(driver_wrapper, force=True)

    # Add v2 baseline image
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox', 'screenshot_full.png')
    shutil.copyfile(file_v2, baseline_file)

    # Assert screenshot
    with pytest.raises(AssertionError):
        visual.assert_screenshot(None, filename='screenshot_full', file_suffix='screenshot_suffix')
    output_file = os.path.join(visual.output_directory, '01_screenshot_full__screenshot_suffix.png')
    driver_wrapper.driver.save_screenshot.assert_called_once_with(output_file)
Beispiel #40
0
def test_assert_screenshot_element_without_baseline(driver_wrapper):
    # Add baseline image
    driver_wrapper.driver.execute_script.return_value = 0  # scrollX=0 and scrollY=0
    driver_wrapper.config.set('VisualTests', 'fail', 'true')
    visual = VisualTest(driver_wrapper)

    # Create element mock
    web_element = get_mock_element(x=250, y=40, height=40, width=300)

    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data

    # Assert screenshot
    with pytest.raises(AssertionError) as exc:
        visual.assert_screenshot(web_element,
                                 filename='screenshot_elem',
                                 file_suffix='screenshot_suffix')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()
    baseline_file = os.path.join(root_path, 'output', 'visualtests',
                                 'baseline', 'firefox', 'screenshot_elem.png')
    assert str(exc.value) == 'Baseline file not found: %s' % baseline_file
Beispiel #41
0
def test_assert_screenshot_element_and_save_baseline(driver_wrapper):
    # Create element mock
    driver_wrapper.driver.execute_script.return_value = 0  # scrollX=0 and scrollY=0
    web_element = get_mock_element(x=250, y=40, height=40, width=300)

    # Configure driver mock
    with open(file_v1, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    visual = VisualTest(driver_wrapper)

    # Assert screenshot
    visual.assert_screenshot(web_element, filename='screenshot_elem', file_suffix='screenshot_suffix')
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()

    # Check cropped image
    expected_image = os.path.join(root_path, 'resources', 'register_cropped_element.png')
    output_file = os.path.join(visual.output_directory, '01_screenshot_elem__screenshot_suffix.png')
    MagickEngine().assertSameFiles(output_file, expected_image, 0.1)

    # Output image and new baseline image must be equal
    baseline_file = os.path.join(root_path, 'output', 'visualtests', 'baseline', 'firefox', 'screenshot_elem.png')
    MagickEngine().assertSameFiles(output_file, baseline_file, 0.1)
Beispiel #42
0
def test_assert_screenshot_mobile_resize_and_exclude(driver_wrapper):
    # Create elements mock
    driver_wrapper.driver.execute_script.return_value = 0  # scrollX=0 and scrollY=0
    exclude_elements = [get_mock_element(x=0, y=0, height=24, width=375)]

    # Configure driver mock
    with open(file_ios, "rb") as f:
        image_data = f.read()
    driver_wrapper.driver.get_screenshot_as_png.return_value = image_data
    driver_wrapper.driver.get_window_size.return_value = {
        'width': 375,
        'height': 667
    }

    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('Driver', 'type', 'ios')
    driver_wrapper.config.set('VisualTests', 'save', 'true')
    visual = VisualTest(driver_wrapper)

    # Assert screenshot
    visual.assert_screenshot(None,
                             filename='screenshot_ios',
                             file_suffix='screenshot_suffix',
                             exclude_elements=exclude_elements)
    driver_wrapper.driver.get_screenshot_as_png.assert_called_once_with()

    # Check cropped image
    expected_image = os.path.join(root_path, 'resources', 'ios_excluded.png')
    output_file = os.path.join(visual.output_directory,
                               '01_screenshot_ios__screenshot_suffix.png')
    compare_image_files(output_file, expected_image)

    # Output image and new baseline image must be equal
    baseline_file = os.path.join(root_path, 'output', 'visualtests',
                                 'baseline', 'firefox', 'screenshot_ios.png')
    compare_image_files(output_file, baseline_file)
Beispiel #43
0
    def setUp(self):
        # Remove previous visual path
        visual_path = os.path.join(self.root_path, 'output', 'visualtests')
        if os.path.exists(visual_path):
            shutil.rmtree(visual_path)

        # Reset wrappers pool values
        DriverWrappersPool._empty_pool()
        DriverWrapper.config_properties_filenames = None

        # Create a new wrapper
        self.driver_wrapper = DriverWrappersPool.get_default_wrapper()
        self.driver_wrapper.driver = mock.MagicMock()

        # Configure properties
        config_files = ConfigFiles()
        config_files.set_config_directory(os.path.join(self.root_path, 'conf'))
        config_files.set_config_properties_filenames('properties.cfg')
        config_files.set_output_directory(os.path.join(self.root_path, 'output'))
        self.driver_wrapper.configure(tc_config_files=config_files)
        self.driver_wrapper.config.set('VisualTests', 'enabled', 'true')

        # Create a new VisualTest instance
        self.visual = VisualTest(self.driver_wrapper)
Beispiel #44
0
def test_engine_perceptual(driver_wrapper):
    # Update conf and create a new VisualTest instance
    driver_wrapper.config.set('VisualTests', 'engine', 'perceptualdiff')
    visual = VisualTest(driver_wrapper)

    assert isinstance(visual.engine, PerceptualEngine)
Beispiel #45
0
def test_engine_pil(driver_wrapper):
    visual = VisualTest(driver_wrapper)
    assert isinstance(visual.engine, PilEngine)
Beispiel #46
0
def test_assert_screenshot_greater_threshold(driver_wrapper):
    visual = VisualTest(driver_wrapper)
    with pytest.raises(TypeError):
        visual.assert_screenshot(None, 'screenshot_full', threshold=2)
Beispiel #47
0
def test_compare_files_diff(driver_wrapper):
    visual = VisualTest(driver_wrapper)
    message = visual.compare_files('report_name', file_v1, file_v2, 0)
    assert 'Distance of 0.00080181' in message
Beispiel #48
0
def test_compare_files_size(driver_wrapper):
    visual = VisualTest(driver_wrapper)
    message = visual.compare_files('report_name', file_v1, file_small, 0)
    # PIL returns an empty error, but PyTest modifies AssertionError
    assert 'assert (1680, 388) == (1246, 388)' in message
Beispiel #49
0
def test_get_img_element(driver_wrapper):
    expected_img = '<img src=".*register_v2.png" title="Baseline image"/>'
    visual = VisualTest(driver_wrapper)
    img = visual._get_img_element('register_v2.png', 'Baseline image')
    assert re.compile(expected_img).match(img) is not None
Beispiel #50
0
def test_get_html_row(driver_wrapper):
    expected_row = '<tr class=diff><td>report_name</td><td><img src=".*register_v2.png" title="Baseline image"/>' \
                   '</td><td><img src=".*register.png" title="Screenshot image"/></td><td></td></tr>'
    visual = VisualTest(driver_wrapper)
    row = visual._get_html_row('diff', 'report_name', file_v1, file_v2)
    assert re.compile(expected_row).match(row) is not None
Beispiel #51
0
def test_diff_message_equal():
    message = None
    expected_message = ''
    assert expected_message == VisualTest._get_diff_message(message, 1000000)
Beispiel #52
0
def test_diff_message_size_perceptualdiff():
    message = """The new screenshot 'C:\\...\\01_login_form__test_login.png' did not match the baseline 'C:\\...\\login_form.png':
        FAIL: Image dimensions do not match"""
    expected_message = 'Image dimensions do not match'
    assert expected_message == VisualTest._get_diff_message(message, 1000000)
Beispiel #53
0
def test_diff_message_size_imagemagick():
    message = 'Image dimensions do not match'
    expected_message = 'Image dimensions do not match'
    assert expected_message == VisualTest._get_diff_message(message, 1000000)
Beispiel #54
0
def test_diff_message_diff_pil():
    message = ("The new screenshot 'C:\\...\\01_login_form__test_login.png' did not match the baseline "
               "'C:\\...\\login_form.png' (by a distance of 14794.11)")
    expected_message = 'Distance of 0.01479411'
    assert expected_message == VisualTest._get_diff_message(message, 1000000)
Beispiel #55
0
def test_diff_message_diff_imagemagick():
    message = ("The new screenshot 'C:\\...\\01_login_form__test_login.png' did not match the baseline "
               "'C:\\...\\login_form.png' (See C:\\...\\01_login_form__test_login.diff.png):\n"
               "5443.77 (0.0830666) @ 0,0")
    expected_message = 'Distance of 0.08306660'
    assert expected_message == VisualTest._get_diff_message(message, 1000000)