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

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

Ответы [ 42 ]

3 голосов
/ 26 августа 2014

C #

public static void TakeScreenshot(IWebDriver driver, String filename)
{
    // Take a screenshot and save it to filename
    Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
    screenshot.SaveAsFile(filename, ImageFormat.Png);
}
3 голосов
/ 19 января 2019

Python - Скриншот элемента:

Это довольно старый вопрос, на который есть несколько ответов. Однако кажется, что снимок экрана определенного веб-элемента с использованием Python здесь отсутствует.

место

Веб-элемент имеет свою собственную позицию на странице и, как правило, измеряется в пикселях x и y и известен как (x, y) координаты элемента. И объект местоположения содержит два значения.

  1. location [‘x’] - возвращает координату ‘x’ элемента
  2. location [‘y’] - возвращает координату ‘y’ элемента

размер

Как и местоположение, каждый WebElement имеет ширину и высоту; Доступен как размер объекта.

  1. size [‘width’] - возвращает «width» элемента
  2. size [‘height’] - возвращает ‘height’ элемента

Используя координаты (x, y) и значения ширины, высоты, мы можем обрезать изображение и сохранить его в файле.

from selenium import webdriver
from PIL import Image

driver = webdriver.Firefox(executable_path='[Browser Driver Path]');
driver.get('https://www.google.co.in');

element = driver.find_element_by_xpath("//div[@id='hplogo']");

location = element.location;
size = element.size;

driver.save_screenshot("/data/image.png");

x = location['x'];
y = location['y'];
width = location['x']+size['width'];
height = location['y']+size['height'];

im = Image.open('/data/WorkArea/image.png')
im = im.crop((int(x), int(y), int(width), int(height)))
im.save('/data/image.png')

Примечание: Взято из http://allselenium.info/capture-screenshot-element-using-python-selenium-webdriver/

3 голосов
/ 16 ноября 2016

C #

Вы можете использовать следующий фрагмент кода / функцию, чтобы сделать снимок экрана с селеном:

    public void TakeScreenshot(IWebDriver driver, string path = @"output")
    {
        var cantakescreenshot = (driver as ITakesScreenshot) != null;
        if (!cantakescreenshot)
            return;
        var filename = string.Empty + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond;
        filename = path + @"\" + filename + ".png";
        var ss = ((ITakesScreenshot)driver).GetScreenshot();
        var screenshot = ss.AsBase64EncodedString;
        byte[] screenshotAsByteArray = ss.AsByteArray;
        if (!Directory.Exists(path))
            Directory.CreateDirectory(path);
        ss.SaveAsFile(filename, ImageFormat.Png);
    }
2 голосов
/ 13 декабря 2012

Python

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

driver.save_screenshot('c:\foldername\filename.extension(png,jpeg)')
2 голосов
/ 20 июня 2014

Селена

captureEntirePageScreenshot | /path/to/filename.png | background=#ccffdd
2 голосов
/ 15 апреля 2014

Java

String yourfilepath = "E:\\username\\Selenium_Workspace\\foldername";

// take a snapshort
File snapshort_file = ((TakesScreenshot) mWebDriver)
        .getScreenshotAs(OutputType.FILE);
// copy the file into folder

FileUtils.copyFile(snapshort_file, new File(yourfilepath));

Надеюсь, это решит вашу проблему

2 голосов
/ 06 мая 2014

Java

public  void captureScreenShot(String obj) throws IOException {
    File screenshotFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(screenshotFile,new File("Screenshots\\"+obj+""+GetTimeStampValue()+".png"));
}

public  String GetTimeStampValue()throws IOException{
    Calendar cal = Calendar.getInstance();       
    Date time=cal.getTime();
    String timestamp=time.toString();
    System.out.println(timestamp);
    String systime=timestamp.replace(":", "-");
    System.out.println(systime);
    return systime;
}

Используя эти два метода, вы также можете сделать снимок экрана с датой и временем.

2 голосов
/ 12 марта 2019

Существует несколько способов сделать скриншот , используя Selenium WebDriver

Методы Java

Ниже приведены Java-методы для создания снимка экрана :

  • Использование getScreenshotAs() из TakesScreenshot Интерфейс:

    • Кодовый блок:

      package screenShot;
      
      import java.io.File;
      import java.io.IOException;
      
      import org.apache.commons.io.FileUtils;
      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 Firefox_takesScreenshot {
      
          public static void main(String[] args) throws IOException {
      
              System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
              WebDriver driver =  new FirefoxDriver();
              driver.get("https://login.bws.birst.com/login.html/");
              new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("Birst"));
              File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
              FileUtils.copyFile(scrFile, new File(".\\Screenshots\\Mads_Cruz_screenshot.png"));
              driver.quit();
          }
      }
      
    • Скриншот:

Mads_Cruz_screenshot

  • Если для веб-страницы установлено jquery , вы можете использовать из pazone / ashot library:

    • Кодовый блок:

      package screenShot;
      
      import java.io.File;
      import javax.imageio.ImageIO;
      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;
      
      import ru.yandex.qatools.ashot.AShot;
      import ru.yandex.qatools.ashot.Screenshot;
      import ru.yandex.qatools.ashot.shooting.ShootingStrategies;
      
      public class ashot_CompletePage_Firefox {
      
          public static void main(String[] args) throws Exception {
      
              System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
              WebDriver driver =  new FirefoxDriver();
              driver.get("https://jquery.com/");
              new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("jQuery"));
              Screenshot myScreenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(100)).takeScreenshot(driver);
              ImageIO.write(myScreenshot.getImage(),"PNG",new File("./Screenshots/firefoxScreenshot.png"));
              driver.quit();
          }
      }
      
    • Скриншот:

firefoxScreenshot.png

  • Использование из assertthat / selenium-shutterbug библиотека:

    • Кодовый блок:

      package screenShot;
      
      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.firefox.FirefoxDriver;
      import com.assertthat.selenium_shutterbug.core.Shutterbug;
      import com.assertthat.selenium_shutterbug.utils.web.ScrollStrategy;
      
      public class selenium_shutterbug_fullpage_firefox {
      
          public static void main(String[] args) {
      
              System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
              WebDriver driver =  new FirefoxDriver();
              driver.get("https://www.google.co.in");
              Shutterbug.shootPage(driver, ScrollStrategy.BOTH_DIRECTIONS).save("./Screenshots/");
              driver.quit();
          }
      }
      
    • Скриншот:

2019_03_12_16_30_35_787.png

2 голосов
/ 23 марта 2017

JAVA

Метод создания снимка экрана для сбоев в Selenium с добавлением TestName и Timestamp.

public class Screenshot{        
    final static String ESCAPE_PROPERTY = "org.uncommons.reportng.escape-output";
    public static String imgname = null;

    /*
     * Method to Capture Screenshot for the failures in Selenium with TestName and Timestamp appended.
     */
    public static void getSnapShot(WebDriver wb, String testcaseName) throws Exception {
      try {
      String imgpath=System.getProperty("user.dir").concat("\\Screenshot\\"+testcaseName);
      File f=new File(imgpath);
      if(!f.exists())   {
          f.mkdir();
        }   
        Date d=new Date();
        SimpleDateFormat sd=new SimpleDateFormat("dd_MM_yy_HH_mm_ss_a");
        String timestamp=sd.format(d);
        imgname=imgpath+"\\"+timestamp+".png";

        //Snapshot code
        TakesScreenshot snpobj=((TakesScreenshot)wb);
        File srcfile=snpobj.getScreenshotAs(OutputType.FILE);
        File destFile=new File(imgname);
        FileUtils.copyFile(srcfile, destFile);

      }
      catch(Exception e) {
          e.getMessage();
      }
   }
1 голос
/ 28 мая 2014

C # (Ranorex API)

public static void ClickButton()
{
    try
    {
        // code
    }
    catch (Exception e)
    {
        TestReport.Setup(ReportLevel.Debug, "myReport.rxlog", true);
        Report.Screenshot();
        throw (e);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...