无法使用selenium网络驱动程序3.0.0-beta3捕获完整的网页屏幕截图



大家好,

我写了下面的代码来捕捉一个整体的屏幕截图网页。

但我只能捕获网页的部分/可见部分显示的不是整个网页。请提出建议。

我使用:

Selenium WebDriver版本:3.0.0-beta3

Firefox版本:49.0.1

操作系统:Win10

package Selenium_WebDriver_Part1;
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.concurrent.TimeUnit;
    import org.apache.commons.io.FileUtils;
    import org.junit.Test;
    import org.openqa.selenium.By;
    import org.openqa.selenium.OutputType;
    import org.openqa.selenium.TakesScreenshot;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    public class Quikr {
        public static WebDriver driver=null;
        @Test
        public void loginTest() throws InterruptedException, IOException{
            System.setProperty("webdriver.gecko.driver","C:\Eclipse\Drivers\geckodriver.exe");
            driver = new FirefoxDriver();
            driver.get("http://www.quikr.com/");
            driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
            takeScreenShot("LoginPage");
    }   
        public static void takeScreenShot(String fileName) throws IOException{
            Date now = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy hh mm ss");
            String time = dateFormat.format(now);
            String resDir = System.getProperty("user.dir")+"\"+time;
            File resFolder = new File(resDir);
            resFolder.mkdir();
            File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
            // Now you can do whatever you need to do with it, for example copy somewhere
            FileUtils.copyFile(scrFile, new File(resDir+"\"+fileName+".jpeg"));
        }
    }

我使用的是selenium 3.0.0 beta4 Firefox v.43.0.1 OS Windows7而不是System.setProperty("webdriver.gecko.driver","C:\Eclipse\Drivers\geckodriver.exe"(;使用以下行System.setProperty("webdriver.firefox.marionette","D:\Testing\webdriver\geckodriver.exe"(;

我最好的建议是使用第三方图像处理库Ashot,它几乎解决了大多数此类问题,并提供了图像比较等。一旦您导入Ashot,请使用以下代码获取网页的完整屏幕截图。

public byte[] takeScreenshot(){
    byte[] img = null;
    Screenshot screenshot= new AShot()
            .shootingStrategy(ShootingStrategies.viewportPasting(100))
            .takeScreenshot(driver);
    BufferedImage image = screenshot.getImage();
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write( image, "jpg", baos );
        baos.flush();
        byte[] imageInByte = baos.toByteArray();
        baos.close();
        img = imageInByte;
        InputStream in = new ByteArrayInputStream(imageInByte);
        BufferedImage bImageFromConvert = ImageIO.read(in);
        URL location = CodeLocations.codeLocationFromClass(this.getClass());
        String path = location.toString().substring(location.toString().indexOf("file:/")+5,location.toString().length());
        ImageIO.write(bImageFromConvert, "jpg", new File(
                path+"/screenshot.jpg"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return img;
}

尝试AShot并分享您的想法

这就是它的工作方式。如果你想捕捉整个网页,那么你必须将整个内容缩小到可见区域,然后截图。

为了捕获整个页面的屏幕截图,您需要在((TakesScreenshot(驱动程序(.getScreenshotAs…语句之前添加一行代码。

driver = new Augmenter().augment(driver);

最新更新