我正在使用Appium、Serenity和POM模型构建android框架。
如果任何一个步骤失败,我想拍下截图。
有人能帮我写代码吗?请告诉我该放在哪里?我有Pages,steps和stepdefinition类。不确定在哪里实施?
我试图通过OpenCV库将图片与模板进行比较。我就是这么做的:
-
将方法添加到
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)
-
在页面对象文件中使用此方法。
@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')
-
在必要的测试中使用步骤。
@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
所有这些的结果是,我得到了一些图片相似性的百分比。它可以是你所需要的百分比。对我的测试来说还可以。
如果你的意思是测试结果的截图,请告诉我,我可以向你展示我是如何使用诱惑的。
如果你指的是Appium中常见的屏幕截图,请提供一些你发现的错误。
下面是测试失败时获取视频的示例。
-
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()
-
保存屏幕截图方法
def save_screenshot(appdriver): allure.attach( appdriver.get_screenshot_as_png(), name='screenshot', attachment_type=allure.attachment_type.PNG )