2016-10-02 107 views
2

所有喜来捕获完整的网页截图,无法使用硒的webdriver 3.0.0-β3

我已经写了下面的代码以捕捉整个 网页的截屏。

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

IM使用:

硒webdriver的版本: 3.0.0-β3

的Firefox版本: 49.0.1

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

回答

1

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

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

尝试阿绍特并分享您的想法

0

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

0

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

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

我使用硒3.0.0 BETA4火狐OS v.43.0.1 Windows7的 代替System.setProperty( “webdriver.gecko.driver”,“C :\ Eclipse的\ DRIVERS \ geckodriver.exe“);使用以下行 System.setProperty(“webdriver.firefox.marionette”,“D:\ Testing \ WebDriver \ geckodriver.exe”);