无法使用selenium webdriver 3.0.0-beta3捕获完整的网页截图

时间:2016-10-02 21:42:27

标签: selenium selenium-webdriver webdriver

  

大家好,

     

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

     

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

     

我正在使用:

     

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"));
        }
    }

4 个答案:

答案 0 :(得分:2)

我正在使用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:\测试\的webdriver \ geckodriver.exe”);

答案 1 :(得分:1)

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

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并分享您的想法

答案 2 :(得分:0)

这就是它应该如何工作。如果你想要捕获整个网页,那么你必须将整个内容缩小到可见区域,然后截取屏幕截图。

答案 3 :(得分:0)

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

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