Как сделать скриншот с помощью Selenium WebDriver - PullRequest
462 голосов
/ 06 августа 2010

Кто-нибудь знает, можно ли сделать скриншот с помощью Selenium WebDriver? (Примечание: не Selenium RC)

Ответы [ 42 ]

1 голос
/ 11 декабря 2011

Вы можете создать webdriverbacked selenium object, используя объект класса Webdriver, тогда вы можете сделать снимок экрана.

1 голос
/ 17 сентября 2017

Да, можно сделать снимок веб-страницы с помощью Selenium WebDriver.

getScreenshotAs() метод, предоставляемый API WebDriver, делает работу за нас.

Синтаксис: getScreenshotAs(OutputType<X> target)

Тип возвращаемого значения: X

Параметры: target - Проверьте параметры, предоставляемые OutputType

Применимость: Не относится к какому-либо элементу DOM

Пример:

TakesScreenshot screenshot = (TakesScreenshot) driver;
File file = screenshot.getScreenshotAs(OutputType.FILE);

См. Ниже фрагмент рабочего кодадля получения более подробной информации.

public class TakeScreenShotDemo {

    public static void main(String[] args) {
        WebDriver driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get(“http: //www.google.com”);

        TakesScreenshot screenshot = (TakesScreenshot) driver;

        File file = screenshot.getScreenshotAs(OutputType.FILE);

        // creating a destination file
        File destination = new File(“newFilePath(e.g.: C: \\Folder\\ Desktop\\ snapshot.png)”);
        try {
            FileUtils.copyFile(file, destination);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Посетите: Снимок с помощью WebDriver для получения более подробной информации.

1 голос
/ 27 июня 2014

Python

def test_url(self):
    self.driver.get("https://www.google.com/")
    self.driver.save_screenshot("test.jpg")

Будет сохранен скриншот в том же каталоге, в котором сохранен скрипт.

1 голос
/ 19 июля 2016

Каркас робота

Вот решение с использованием Robot Framework с Selenium2Library :

*** Settings ***
Library                        Selenium2Library

*** Test Cases ***
Example
    Open Browser               http://localhost:8080/index.html     firefox
    Capture Page Screenshot

Это сохранит скриншот в рабочем пространстве.Также можно указать имя файла для ключевого слова Capture Page Screenshot, чтобы изменить это поведение.

1 голос
/ 06 октября 2014

Java

Думаю, я бы дал свое полное решение, так как есть два разных способа получения снимка экрана.Один из локального браузера, а другой из удаленного браузера.Я даже вставил изображение в HTML-отчет

@After()
public void selenium_after_step(Scenario scenario) throws IOException, JSONException {

    if (scenario.isFailed()){

        scenario.write("Current URL = " + driver.getCurrentUrl() + "\n");

        try{
            driver.manage().window().maximize();  //Maximize window to get full screen for chrome
        }catch (org.openqa.selenium.WebDriverException e){

            System.out.println(e.getMessage());
        }

        try {
            if(isAlertPresent()){
                Alert alert = getAlertIfPresent();
                alert.accept();
            }
            byte[] screenshot;
            if(false /*Remote Driver flow*/) { //Get Screen shot from remote driver
                Augmenter augmenter = new Augmenter();
                TakesScreenshot ts = (TakesScreenshot) augmenter.augment(driver);
                screenshot = ts.getScreenshotAs(OutputType.BYTES);
            } else { //get screen shot from local driver
                //local webdriver user flow
                screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
            }
            scenario.embed(screenshot, "image/png"); //Embed image in reports
        } catch (WebDriverException wde) {
            System.err.println(wde.getMessage());
        } catch (ClassCastException cce) {
            cce.printStackTrace();
        }
    }

    //seleniumCleanup();
}
1 голос
/ 17 ноября 2015

Селенид / Java

Вот как проект Selenide делает это проще, чем любой другой способ сделать это:

import static com.codeborne.selenide.Selenide.screenshot;    
screenshot("my_file_name");

Для Junit:

@Rule
public ScreenShooter makeScreenshotOnFailure = 
     ScreenShooter.failedTests().succeededTests();

Для TestNG:

import com.codeborne.selenide.testng.ScreenShooter;
@Listeners({ ScreenShooter.class})
0 голосов
/ 11 июня 2018

Python

webdriver.get_screenshot_as_file(filepath)

Приведенный выше метод сделает снимок экрана и сохранит его в виде файла в месте, указанном в качестве параметра.

0 голосов
/ 12 апреля 2017

C # код

IWebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((ITakesScreenshot)driver).GetScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
0 голосов
/ 15 февраля 2017
<code>public static void getSnapShot(WebDriver driver, String event) {

        try {
            File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            BufferedImage originalImage = ImageIO.read(scrFile);
            //int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
            BufferedImage resizedImage = CommonUtilities.resizeImage(originalImage, IMG_HEIGHT, IMG_WIDTH);
            ImageIO.write(resizedImage, "jpg", new File(path + "/"+ testCaseId + "/img/" + index + ".jpg"));
            Image jpeg = Image.getInstance(path + "/" + testCaseId + "/img/"+ index + ".jpg");
            jpeg.setAlignment(Image.MIDDLE);
            PdfPTable table = new PdfPTable(1);
            PdfPCell cell1 = new PdfPCell(new Paragraph("\n"+event+"\n"));
            PdfPCell cell2 = new PdfPCell(jpeg, false);
            table.addCell(cell1);
            table.addCell(cell2);
            document.add(table);
            document.add(new Phrase("\n\n"));
            //document.add(new Phrase("\n\n"+event+"\n\n"));
            //document.add(jpeg);
            fileWriter.write("<pre>        "+event+"

"); fileWriter.write ( "
        "+Calendar.getInstance().getTime()+"


"); fileWriter.write ("image


"); ++ индекс; } catch (IOException | DocumentException e) { e.printStackTrace (); } }
0 голосов
/ 14 февраля 2017
File scrFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
BufferedImage originalImage = ImageIO.read(scrFile);
//int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
BufferedImage resizedImage = CommonUtilities.resizeImage(originalImage, IMG_HEIGHT, IMG_WIDTH);
ImageIO.write(resizedImage, "jpg", new File(path + "/"+ testCaseId + "/img/" + index + ".jpg"));
Image jpeg = Image.getInstance(path + "/" + testCaseId + "/img/"+ index + ".jpg");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...