Невозможно сделать полный снимок экрана веб-страницы с помощью selenium webdriver 3.0.0-beta3

#selenium #selenium-webdriver #webdriver

#селен #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"));
        }
    }
  

Ответ №1:

Я использую selenium 3.0.0 beta4 Firefox v.43.0.1 OS Windows7 вместо System.setProperty («webdriver.gecko.driver», «C:EclipseDriversgeckodriver.exe «); используйте следующую строку System.setProperty(«webdriver.firefox.marionette»,»D:TestingWebDrivergeckodriver.exe «);

Ответ №2:

Мой лучший совет — использовать стороннюю библиотеку обработки изображений 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 и поделитесь своими мыслями

Ответ №3:

Вот как это должно работать.Если вы хотите захватить всю веб-страницу целиком, вам придется уменьшить масштаб всего содержимого до видимой области, а затем сделать снимок экрана.

Ответ №4:

Для того, чтобы сделать снимок экрана всей страницы, вам необходимо включить дополнительную строку кода перед ((TakesScreenshot)driver).getScreenshotAs … инструкция.

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