Allure AShot()在Selenium截图

时间:2015-04-11 01:05:13

标签: java selenium screenshot allure yandex

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

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

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

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

我尝试将下面提到的截图类投射到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);

}

2 个答案:

答案 0 :(得分: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,但它显示了如何附加文件。此外,如果您仍然无法看到自己的屏幕截图,请检查您的报告中是否显示了您的步骤。如果不是,那么您可能缺少FAQ中讨论的javaagent

答案 1 :(得分:0)

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

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

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