当前位置: 首页 > 知识库问答 >
问题:

如何将HTML5画布上的图像元素与使用SeleniumWebDriver存储在硬盘上的另一个图像进行比较?

高鸿振
2023-03-14

我是自动化测试的初学者,我正在为Selenium WebDriver使用Java。我有一个HTML5画布作为网络应用程序的一部分,类似于油漆。虽然我成功地在画布上移动了一个元素。但是现在,我想把这个元素(以像素为单位的图像)与保存在电脑硬盘上的另一张图像进行比较。我认为在画布上截取元素的屏幕截图,然后与另一张图像进行比较会是一个更好的主意...但是我在互联网上没有找到足够可信的资源,通过这些资源我可以通过截屏来比较这两张图片。

所以,我想问是否有其他更好的方法或任何API的帮助下,我将能够比较这两个图像?

共有2个答案

冯良才
2023-03-14

转换Base64的两个映像并进行比较。

要获取画布中图像的Base64,请使用以下代码:

WebElement canvas = driver.findElement(By.tagName("canvas"));
JavascriptExecutor js = (JavascriptExecutor) driver;
String canvas_base64_String = js.executeScript("return arguments[0].toDataURL('image/png').substring(22);", canvas).toString();
上官锦
2023-03-14

您可能想看看这个叫做aShot的非常方便的框架

文档、社区和支持非常强大。

此外,下面是用于屏幕比较的代码示例。

截图比较

。takeScreenshot()返回一个屏幕截图对象,其中包含用于比较的图像和数据。通过比较,可以忽略某些Web元素。

Screenshot myScreenshot = new AShot()
  .addIgnoredElement(By.cssSelector("#weather .blinking_element")) // ignored element(s)
  .takeScreenshot(driver, yandexWeatherElement);

使用ImageDifference查找两个图像之间的差异。

ImageDiff diff = new ImageDiffer().makeDiff(myScreenshot, anotherScreenshot);
BufferedImage diffImage = diff.getMarkedImage(); // comparison result with marked differences

请注意,您可以在上面的链接中看到更多示例。

 类似资料:
  • 问题内容: 我正在从事一个生成艺术项目,我希望允许用户从算法中保存生成的图像。总体思路是: 使用生成算法在HTML5 Canvas上创建图像 图像完成后,允许用户将画布作为图像文件保存到服务器 允许用户下载图像或将其添加到使用该算法制作的作品库中。 但是,我坚持第二步。在Google的帮助下,我找到了这篇博客文章,这似乎正是我想要的: 导致了JavaScript代码: 和相应的PHP(testSa

  • 问题内容: 我目前正在使用 http://paperjs.org 创建HTML5画布绘图应用程序。我想让用户将图像上传到画布中。我知道我需要进行登录和注册,但是有更简单的方法吗?我已经看到HTML5拖放式上传。 问题答案: 我假设您的意思是将图像加载到画布中,而不是从画布上载图像。 在这里阅读他们所有的画布文章可能是一个好主意 但基本上,您要做的是在javascript中创建图片,然后将image

  • 因此,我正在创建一个cordova应用程序,在该应用程序中,我从iphone库中拍摄一张照片,将其绘制到画布上,并向其添加另一张图像,以便将其保存为一张照片。到目前为止,我从iphone照片库中绘制的照片可以毫无问题地绘制到画布上,但是第二张图片没有。 当我加载第二张图像时,它首先被添加到具有绝对定位的div中,以便将其移动到我想要的任何位置。之后,我得到了实际的图像,它的来源和位置,并尝试将其绘

  • 我正在进行一个生成艺术项目,我希望允许用户保存从一个算法得到的图像。大意是: 使用生成算法在HTML5画布上创建图像 完成映像后,允许用户将画布作为映像文件保存到服务器 允许用户下载图像或将其添加到使用该算法生成的图像库中。 然而,我却被卡在了第二步上。经过谷歌的一番帮助,我找到了这篇博文,似乎正是我想要的: 这导致了JavaScript代码: 和相应的PHP(testsave.PHP): 但这似

  • 问题内容: 我正在学习Swift,并且正在创建一个使用个人照片的应用程序,并将另一个放在上面。我现在有一个hacky解决方案,可以创建该区域的屏幕截图并保存。我需要在Swift中执行此操作 但是,这是可行的,现在不再可行。但是,这也不是最佳解决方案。 那么,伙计们,我该如何将个人图像中的图像作为叠加图像保存到相机胶卷中? 帮助将不胜感激!谢谢! 问题答案: 我建议阅读此线程。您所有的答案都在那里。

  • 实际上,我可以使用函数来完成。我从“HTML5画布-如何在图像背景上画一条线?”中得到的东西。但是我需要在不使用from函数的情况下绘制图像,如下所示: