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

如何使用selenium中的Ashot拍摄整个网页的屏幕截图

徐瑞
2023-03-14

在selenium web驱动程序中,我无法使用testng和maven将其显示在控制台中

JAVAlang.VerifyError:(类:junereleasemain/NewTest,方法:testFirstResult签名:()V)java函数的参数不兼容。朗,同学们。java上的getDeclaredMethods0(本机方法)。朗,同学们。java上的privateGetDeclaredMethods(未知源代码)。朗,同学们。java上的privateGetPublicMethods(未知源代码)。朗,同学们。组织上的getMethods(未知来源)。testng。内部的TestNGClassFinder。(TestNGClassFinder.java:63)在org上。testng。测试者。org上的initMethods(TestRunner.java:424)。testng。测试者。org上的init(TestRunner.java:247)。testng。测试者。org上的init(TestRunner.java:217)。testng。测试者。(TestRunner.java:169)在org上。testng。遥远的支持RemoteTestNG6_9_10$1。newTestRunner(RemoteTestNG6_9_10.java:28)位于org。testng。遥远的支持RemoteTestNG6_9_10$DelegatingTestRunnerFactory。newTestRunner(RemoteTestNG6_9_10.java:61)位于org。testng。SuiteRunner$ProxyTestRunnerFactory。newTestRunner(SuiteRunner.java:594)位于org。testng。SuiteRunner。org上的init(SuiteRunner.java:168)。testng。SuiteRunner。(SuiteRunner.java:117)在org上。testng。TestNG。在org上创建SuiteRunner(TestNG.java:1300)。testng。TestNG。在org上创建SuiteRunners(TestNG.java:1287)。testng。TestNG。在org上本地运行SuitesLocal(TestNG.java:1141)。testng。TestNG。org上的runSuites(TestNG.java:1075)。testng。TestNG。在org上运行(TestNG.java:1047)。testng。遥远的抽象远程测试。在org上运行(AbstractRemoteTestNG.java:126)。testng。遥远的远程测试。initAndRun(RemoteTestNG.java:137)位于org。testng。遥远的远程测试。main(RemoteTestNG.java:58)

我的剧本是

package junereleasemain;
import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;

import ru.yandex.qatools.ashot.AShot;
import ru.yandex.qatools.ashot.Screenshot;
import ru.yandex.qatools.ashot.screentaker.ViewportPastingStrategy;

public class NewTest {

WebDriver driver;

@BeforeTest
public void setUp() {
driver = new FirefoxDriver();
driver.manage().window().maximize();
}

@AfterTest
public void tearDown() {
driver.quit();
}
@Test
public void testFirstResult() throws InterruptedException, IOException
{
driver.get("http://www.vpl.ca");
//take the screenshot of the entire home page and save it to a png file
Screenshot screenshot = new AShot().shootingStrategy(new    ViewportPastingStrategy(100)).takeScreenshot(driver);
ImageIO.write(screenshot.getImage(), "PNG", new File("c:\\temp\\home.png"));

WebElement searchField =   driver.findElement(By.xpath("//input[@id='globalQuery']"));
searchField.click();
searchField.sendKeys("java");
WebElement searchButton =    driver.findElement(By.xpath("//input[@class='search_button']"));
searchButton.click();

Thread.sleep(3000);

//take the screenshot of the entire results page and save it to a png file
screenshot = new AShot().shootingStrategy(new ViewportPastingStrategy(100)).takeScreenshot(driver);
ImageIO.write(screenshot.getImage(), "PNG", new   File("c:\\temp\\results.png"));

WebElement searchResultLink = driver.findElement(By.xpath("(//a[@testid='bib_link'])[2]"));
searchResultLink.click();
Thread.sleep(3000);

//take the screenshot of the entire details page and save it to a png file
screenshot = new AShot().shootingStrategy(new ViewportPastingStrategy(100)).takeScreenshot(driver);
ImageIO.write(screenshot.getImage(), "PNG", new   File("c:\\temp\\details.png"));

WebElement bookTitleElement =    driver.findElement(By.xpath("//h1[@id='item_bib_title']"));
String bookTitleValue = bookTitleElement.getText();

assertEquals(bookTitleElement.isDisplayed(), true);
assertTrue(bookTitleValue.length()> 0);

}

}

共有2个答案

金理
2023-03-14

这就是我使用aShot的方式。这很好,因为它捕获了整个页面的图像,而不仅仅是当前窗格的视图。

private void writeToFile(Path path) {
    try {
        path.toFile().mkdirs();

        Files.deleteIfExists(path);
        Files.createFile(path);

        LOGGER.debug("Writing screenshot to: {}", path);

        writeSsWithAShot(path);

    } catch (IOException e) {
        throw new RuntimeException(
            "Unable to capture and write screenshot to " + path.toString(),
            e
        );
    }
}

private void writeSsWithAShot(Path path) throws IOException {

    ru.yandex.qatools.ashot.Screenshot aShot = new AShot()
        .shootingStrategy(ShootingStrategies.viewportPasting(1500))
        .takeScreenshot(driver);

    BufferedImage image = aShot.getImage();
    ImageIO.write(image, "png", path.toFile());
}
赵永逸
2023-03-14

试试这个。

 public class Screenshot {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    FirefoxDriver driver = new FirefoxDriver();
    driver.get("http://yahoo.com");
    driver.manage().window().maximize();

    File scrFile = (driver.getScreenshotAs(OutputType.FILE));  
    FileUtils.copyFile(scrFile, new File("d:\\Selenium\\screenshot2.png"));
    }
}

让我知道,如果你有任何疑问。:-)

 类似资料:
  • 我目前正在尝试实现Ashot来为我当前的项目截图,它正在为桌面工作。 但我想知道如何在iOS和Android设备上实现它,互联网上没有太多信息。 我使用了以下视口,它正在为iPad截图: 屏幕截图FullPage=new AShot()。拍摄策略(ShootingStrategies.viewportRetina(100,0,0,2))。截图(司机); 但是我想知道如何使用给定的属性来为其他IOS

  • 我需要使用Sikuli的自动化,但我无法采取截图。问题是,当我点击“截屏”或“创建区域”时,IDE会被隐藏,但选择区域选项不会出现....

  • 问题内容: 我正在构建一个称为“ HTML测验”的东西。它完全在JavaScript上运行,非常酷。 最后,弹出一个结果框,显示“您的结果:”,它显示了他们花费了多少时间,他们得到了多少百分比以及他们从10个问题中得出了多少个问题。我想有一个按钮,上面写着“捕获结果”,并使其以某种方式截取屏幕截图或div,然后仅在页面上显示捕获的图像即可在其中单击鼠标右键并“将图像另存为”。 我真的很想这样做,以

  • 问题内容: 我要实现的是从python中的任何网站获取网站截图。 环境:Linux 问题答案: 在Mac上,有webkit2png,在Linux+KDE上,可以使用khtml2png。我已经尝试了前者,并且效果很好,并且听说后者已投入使用。 我最近遇到了QtWebKit,它声称是跨平台的(我猜Qt将WebKit卷入了他们的库中)。但是我从未尝试过,所以我无法告诉您更多信息。 QtWebKit链接显

  • 我找了很多,但找不到解决办法。这里有一个类似的问题,在java中有一个可能的解决方案。 Python中有类似的解决方案吗?

  • 可以使用SeleniumWebDriver拍摄屏幕截图。 它会截取网页的整个区域,但浏览器窗口(boarder)不包括在此截图中。 有没有一种方法来采取与Selenium网络驱动程序截图,以便整个浏览器窗口被捕获? 我想看到所有的状态栏,选项卡和按钮。 这是可能的。NET,但它有可能会屏蔽其他内容(例如,浏览器被最小化),所以我想使用selenium。