【问题标题】:Appium taking screenshots for failuresAppium 为失败截图
【发布时间】:2021-06-15 21:13:59
【问题描述】:

我正在使用 Appium、Serenity 和 POM 模型构建 android 框架。

如果有任何步骤失败,我想截屏。

谁能帮我写代码,请告诉我该放在哪里? 例如,我有 Pages、steps 和 stepdefinition 类。 不确定在哪里实施?

【问题讨论】:

  • 有什么cmets吗?

标签: appium appium-android takesscreenshot


【解决方案1】:

我尝试通过 OpenCV 库将图片与模板进行比较。我就是这样做的:

  1. 将方法添加到base_page.py

    def compare_image_with_screenshot(self, image_name: str):
        os.chdir('../src/screenshots/')
    
        with open(f'{image_name}.png', 'rb') as img:
            first_image = base64.b64encode(img.read()).decode('ascii')
    
        second_image = base64.b64encode(self._driver.get_screenshot_as_png()).decode('ascii')
    
        return self._driver.get_images_similarity(first_image, second_image)
    
  2. 在页面对象文件中使用此方法。

    @allure.step('Compare screenshot with template')
    def get_image_comparison_percents(self):
    """
    This method gets screenshot on device with template in repo. Comparison result is percentage of similarity. Test is OK if comparison more than 90%
    """
        result = self.compare_image_with_screenshot(OfflineLocators.offline_stub)
        return result.get('score')
    
  3. 在必要的测试中使用步骤。

    @allure.link(url='https://jira.myproject.tech/browse/TEST-1', name='TEST-1 - Offline stub')
    @allure.title('Offline stub')
    def test_offline_stub(appdriver):
    
        TourActions(appdriver).skip_tour()
        Navigation(appdriver).open_my_offline_page()
    
        assert Offline(appdriver).get_page_title_text() == 'Offline'
        assert Offline(appdriver).get_image_comparison_percents() > 0.9
    

在所有这一切的结果中,我得到了一定百分比的图片相似度。它可以是你需要的那个百分比。对于我的测试来说没问题。

如果您是指测试结果的屏幕截图,请告诉我,我可以向您展示我是如何使用 Allure 做到的。

如果您指的是 Appium 中常用的屏幕截图,请提供一些您发现的错误。

【讨论】:

  • 嗨,米哈伊尔,感谢您的回复。您是否正在考虑屏幕比较?我想为测试结果截屏,只有在失败的情况下也是如此。你也可以分享一下appium serenity框架吗?
  • 是的,我的例子是关于截图比较。如果您需要通过失败获取屏幕截图,我可以使用 Allure 框架展示示例。我在下一个答案中添加了其他答案。
【解决方案2】:

以下是测试失败时获取视频的示例。

  1. conftest.py(在根目录下)

    @pytest.fixture
    def appdriver():
    
    driver = config.get_driver_caps()
    
    if config.IS_IOS:
        driver.start_recording_screen(videoQuality='high', videoType='mpeg4', videoFps='24')
    else:
        driver.start_recording_screen()
    
    yield driver
    
    attach_device_log(driver)
    save_screenshot(driver)
    driver.quit()
    
  2. 保存截图方法

    def save_screenshot(appdriver):
        allure.attach(
             appdriver.get_screenshot_as_png(),
             name='screenshot',
             attachment_type=allure.attachment_type.PNG
         )
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2016-03-16
    • 1970-01-01
    • 2020-01-28
    • 2012-08-05
    • 2018-08-16
    相关资源
    最近更新 更多