Скриншот полной страницы не записывается в веб-драйвере Selenium, потому что тело возвращается с высотой 0 - PullRequest
0 голосов
/ 28 июня 2018

enter image description here Я пытаюсь сделать снимок экрана полной страницы, но веб-сайт возвращается с height: 0;, потому что это значение по умолчанию, указанное на веб-сайте клиента. 1600, 0 в корпусе. На каждой странице у нас есть разные элементы в div, где мы можем видеть высоту в пикселях. Например, найдите прикрепленный скриншот тегов html ..
Кто-нибудь может подсказать, пожалуйста, как сделать снимок экрана полной страницы Я проверил с Ашот и Ашот также не может сделать снимок экрана полной страницы. В соответствии с требованиями клиента, мне нужно сделать снимок экрана без использования файла JAR Ашота.
Я использую селен с javascript для захвата изображений ... этот код отлично работает с другими сайтами, потому что все сайты возвращают значения в разделе тела .. В прикрепленном изображении, если вы видите, что этот div зафиксирован на всех страницах и других, то у нас есть всего 3 высоты имени в HTML-теге с различным div и на каждой странице имя div меняется. Может кто-нибудь предложить решения ..

 import java.util.concurrent.TimeUnit;    
    import javax.imageio.ImageIO;    
    import org.openqa.selenium.Dimension;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.OutputType;
    import org.openqa.selenium.TakesScreenshot;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.remote.Augmenter;

    import com.epath.smoketest.pageobjects.Login;import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.IOException;

    import com.epath.smoketest.pageobjects.Navigation;

    public class Screenshoptcapture {

        private static int scrollTimeout = 0;

        public Screenshoptcapture(int timeout) {
            scrollTimeout = timeout;
        }

        private static String getFullHeight(WebDriver driver) {
            JavascriptExecutor js = (JavascriptExecutor) driver;
            return js.executeScript("return document.body.scrollHeight").toString();
        }

        private static int getFullWidth(WebDriver driver) {
            JavascriptExecutor js = (JavascriptExecutor) driver;
            return ((Long) js.executeScript("return window.innerWidth", new Object[0])).intValue();
        }

        private static int getWindowHeight(WebDriver driver) {
            JavascriptExecutor js = (JavascriptExecutor) driver;
            return ((Long) js.executeScript("return window.innerHeight", new Object[0])).intValue();
        }

        private static void waitForScrolling() {
            try {
                Thread.sleep(scrollTimeout);
            } catch (InterruptedException ignored) {
            }
        }

        private static BufferedImage getScreenshotNative(WebDriver wd) {
            ByteArrayInputStream imageArrayStream = null;
            TakesScreenshot takesScreenshot = (TakesScreenshot) new Augmenter().augment(wd);
            try {
                imageArrayStream = new ByteArrayInputStream(takesScreenshot.getScreenshotAs(OutputType.BYTES));
                return ImageIO.read(imageArrayStream);
            } catch (IOException e) {
                throw new RuntimeException("Can not parse screenshot data", e);
            } finally {
                try {
                    if (imageArrayStream != null) {
                        imageArrayStream.close();
                    }
                } catch (IOException ignored) {
                }
            }
        }

        public static BufferedImage getScreenshot(WebDriver wd) {
            JavascriptExecutor js = (JavascriptExecutor) wd;
            int allHeight = Integer.parseInt(getFullHeight(wd));
            int allWidth = getFullWidth(wd);
            int winHeight = getWindowHeight(wd);
            int scrollTimes = allHeight / winHeight;
            int tail = allHeight - winHeight * scrollTimes;
            BufferedImage finalImage = new BufferedImage(allWidth, allHeight, BufferedImage.TYPE_4BYTE_ABGR);
            Graphics2D graphics = finalImage.createGraphics();
            for (int n = 0; n < scrollTimes; n++) {
                js.executeScript("scrollTo(0, arguments[0])", winHeight * n);
                waitForScrolling();
                BufferedImage part = getScreenshotNative(wd);
                graphics.drawImage(part, 0, n * winHeight, null);
            }
            if (tail > 0) {
                js.executeScript("scrollTo(0, document.body.scrollHeight)");
                waitForScrolling();
                BufferedImage last = getScreenshotNative(wd);
                BufferedImage tailImage = last.getSubimage(0, last.getHeight() - tail, last.getWidth(), tail);
                graphics.drawImage(tailImage, 0, scrollTimes * winHeight, null);
            }
            graphics.dispose();
            return finalImage;
        }

        public static void screenshotUsingjavaScript(WebDriver wd, String filename) {
            try {
                ImageIO.write(getScreenshot(wd), "PNG", new File(filename));
            } catch (IOException e) {
                System.out.println(e);
            }
        }

        public static void main(String argc[]) {
            System.setProperty("webdriver.chrome.driver", "C:\\Users\\admin\\Desktop\\Required Software For Automation\\chromedriver.exe");

            WebDriver driver = new ChromeDriver();
            driver.manage().window().fullscreen();
            driver.get(" ");        
            Screenshoptcapture.screenshotUsingjavaScript(driver, "C:\\Users\\admin\\Desktop\\Required Software For Automation\\Userlist.png");
            Utils.pauseTestExecution(8);

            driver.quit();
        }
    }

1 Ответ

0 голосов
/ 28 июня 2018

Возможно, ваше тело на самом деле имеет рост 0. Может быть, у вас есть прямые дети с float: или с position: absolute/fixed (поэтому их вынимают из коробки)? Возможно тело имеет height: 0; или max-height: 0;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...