0

我正在尝试使用 Allure aShot() 类在我正在处理的网站上截取特定 WebElements 的屏幕截图,下面是我在 selenium 中使用的代码来实现它。请访问此链接,其中显示了 aShot() 项目文档:

https://github.com/yandex-qatools/ashot

所以我的问题是,这些 WebElement 的 Ashot() 屏幕截图实际保存在哪里?我使用 testNG 执行以下方法并成功生成了魅力报告,但我在这些报告或我的框架中的任何地方都看不到这些屏幕截图。请检查下面的代码,很难确定这些图像的位置。

再说一次,我的基本问题是:我们如何指定 selenium 将 WebElement 的这些 AShot() 屏幕截图存储到我们想要的特定文件中?

我尝试将下面提到的 Screenshot 类转换为 BufferedImage 或 TakesScreenshot 类,并使用 ImageIO.write 或 FileUtils.copyFile 方法将这些图像复制到一个文件中并将这些图像存储在那里,但我收到一条错误消息,例如,“java .lang.ClassCastException: ru.yandex.qatools.ashot.Screenshot 无法转换为 org.openqa.selenium.TakesScreenshot”,我也尝试了其他方法,但均未成功。

请帮我解决这个问题,我们如何知道/指定这些 AShot() 屏幕截图的保存位置?

public WebDriver driver;

@Test
public void getAShotImage() {
  driver.get("http://....../");
  WebElement element = driver.FindElement(By.xpath(".............."));
  AShot shot = new AShot();
  shot.takeScreenShot(driver, element);

  OR

  shot.coordsProvider(new WebDriverCoordsProvider()).takeScreenshot(driver, element);

}
4

2 回答 2

0

您可以通过从该方法返回字节数组来附加您的屏幕截图。看下面的例子:-

@Attachment(value="Screenshot", type="image/png")
private static byte[] captureScreenshot(Webdriver driver)
{
    byte[] screenshot = null;
            screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
        }
  return screenshot
}

上面的代码没有使用 Ashot,但它显示了您需要如何附加文件。此外,如果您仍然无法看到屏幕截图,请检查您的步骤是否显示在报告中。如果没有,那么您可能缺少 javaagent,如常见问题解答中所述

于 2015-04-11T15:11:08.907 回答
0

AShot 返回Screenshot包含元素图像和用于比较屏幕截图的信息的对象。在这种情况下,您可以使用getImage()方法来获取图像。

new AShot().takeScreenshot(....).getImage();

Screenshot包含字节数组而不是BufferedImage很快。

于 2015-04-13T14:11:42.820 回答