2010-07-27 2 views
38

Мне нужен способ сделать скриншоты моих функциональных тестов. Сейчас я использую Selenium 2 с привязками C#. Я очень хочу снять скриншот в конце теста, чтобы убедиться, что отображается желаемая страница. Есть ли какие-либо конкретные инструменты, которые вы, ребята, знаете о том, что я могу включить в свой код на C#, который вызовет скриншот? Я не смог найти встроенное решение Selenium 2 (не глядя на него).Лучший способ сделать скриншоты тестов в Selenium 2?

ответ

55

Чтобы сделать скриншоты в Selenium 2 вам нужно сделать следующее

driver = new FireFoxDriver(); // Should work in other Browser Drivers 
driver.Navigate().GoToUrl("http://www.theautomatedtester.co.uk"); 
Screenshot ss = ((ITakesScreenshot) driver).GetScreenshot(); 

//Use it as you want now 
string screenshot = ss.AsBase64EncodedString; 
byte[] screenshotAsByteArray = ss.AsByteArray; 
ss.SaveAsFile("filename", ImageFormat.Png); //use any of the built in image formating 
ss.ToString();//same as string screenshot = ss.AsBase64EncodedString; 

Этот код должен работать, как я быстро проверил его в IronPython Repl. Смотрите код IronPython ниже

import clr 
clr.AddReference("WebDriver.Common.dll") 
clr.AddReference("WebDriver.Firefox.dll") 
from OpenQA.Selenium import * 
from OpenQA.Selenium.Firefox import * 
driver = FirefoxDriver() 
driver.Navigate().GoToUrl("http://www.theautomatedtester.co.uk") 
s = driver.GetScreenshot() 
s.AsBaseEncodedString 
# HUGE string appears in the REPL 
+0

Спасибо! Поэтому у меня есть строка для имени файла «C: \\ .. path .. \\ screen.png», но она никогда не появляется там. – James

+1

Заменить этот код: «Снимок экрана ss = driver.GetScreenshot();» ... с этим кодом: "Снимок экрана ss = ((ITakesScreenshot) webDriver) .GetScreenshot();" – MacGyver

+1

При использовании .NET 4.0 и Selenium .NET 4.0, вам нужно будет явно добавить ссылку на System.Drawing (Добавить ссылку> вкладка .NET> System.Drawing), если вы создали проект библиотеки классов в Visual Studio 2010 ... затем вызовите это, чтобы сохранить файл где-нибудь: "ss.SaveAsFile (@" C: \ ss.png ", System.Drawing.Imaging.ImageFormat.Png);" – MacGyver

-1

Использование селена Было два звонка, с которым я был знаком: captureEntirePageScreenshot и captureScreenshot. Возможно, вам захочется заглянуть в эти призывы, чтобы узнать, выполнит ли они то, что вам нужно.

+5

Эти звонки являются специфическими для селена 1 – AutomatedTester

+1

Мой ответ ниже показывает, как это сделать с помощью Selenium 2. P.s. Я не проголосовал за вас – AutomatedTester

10

Я не знаю, если это имеет значение, но я в конечном итоге того, чтобы отбрасывать водителя, когда я писал в C#.

что-то вроде:

 
Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot(); 
26
var driver = new InternetExplorerDriver(); 
driver.Navigate().GoToUrl("http://www.google.com"); 
var ss = driver.GetScreenshot(); 
ss.SaveAsFile("ss.png", System.Drawing.Imaging.ImageFormat.Png); 
+0

быстро и в точку +1 – craastad

+0

@Toolkit '' 'ImageFormat''' теперь использует устаревшее использование' '' ScreenshotImageFormat'''. – TotPeRo

2
  1. Добавить ссылку на System.Drawing в вашем решении/проекта.
  2. Используйте пробел System.Drawing.Imaging в своем тесте.

Здесь я снимаю снимок экрана на главной странице Facebook.

using System; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Support.UI; 
using NUnit.Framework; 
using System.IO; 
using System.Collections; 
using System.Drawing.Imaging; 

namespace FacebookRegistrationUsingC_Sharp 
{ 
    [TestFixture] 
    public class ScreenShot 
    { 
     IWebDriver driver = null; 
     IWebElement element = null; 

     [SetUp] 
     public void SetUp() 
     { 
      driver = new ChromeDriver("G:\\Selenium_Csharp\\Jar\\chromedriver_win32");   
      driver.Navigate().GoToUrl("https://www.Facebook.com"); 
      driver.Manage().Window.Maximize(); 

     } 
     [Test] 
     public void TestScreenShot() 
     {   

      Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot(); 
      ss.SaveAsFile("e:\\pande", System.Drawing.Imaging.ImageFormat.Jpeg); 
     } 

     [TearDown] 
     public void TearDown() 
     { 
      driver = null; 
      element = null; 
     } 
    } 
} 
0

Используйте System.Drawing.Imaging reference. Следующий код может использоваться для снятия снимков экрана.

IWebDriver driver = new FirefoxDriver(); 
ITakesScreenshot screenshotDriver = driver as ITakesScreenshot; 
Screenshot screenshot = screenshotDriver.GetScreenshot(); 
String fp = "D:\\" + "snapshot" + "_"+ DateTime.Now.ToString("dd_MMMM_hh_mm_ss_tt") + ".png"; 
screenshot.SaveAsFile(fp, ImageFormat.Png); 

Примечание: Отметки имеет два преимущества: 1) Вы получите, чтобы узнать идеальный DateTime, когда скриншот взят. 2) Функция SaveAsFile перезаписывает существующий файл. Таким образом, DateTime может помочь в создании разных файлов.

1
public void TakeScreenshot(string saveLocation) { 
     var location = GetPath() + _name + "\\" + saveLocation + ".png"; 
     var ssdriver = _driver as ITakesScreenshot; 
     var screenshot = ssdriver.GetScreenshot(); 
     screenshot.SaveAsFile(location, ImageFormat.Png); 
    } 

Этот код поможет вам принять снимок экрана

4

Просто используйте метод расширения TakeScreenshot() в одной строке кода.

IWebDriver driver = new InternetExplorerDriver(); 
driver.Navigate().GoToUrl("Your_Homepage_Url"); 

driver.TakeScreenshot().SaveAsFile("file_name_string", ImageFormat.Jpeg); 
+1

Обратите внимание, что метод 'TakeScreenshot()' является методом расширения, который требует установки пакета Sulenium.Support NuGet. – thecodefish

+0

@Deeb '' 'ImageFormat''' теперь не рекомендуется использовать' '' ScreenshotImageFormat'''. – TotPeRo

0
 ScreenCaptureJob scj; 
     scj = new ScreenCaptureJob(); 
     // Specify the path & file name in which you want to save   
     scj.OutputScreenCaptureFileName = @"C:\Users\jpavankumar\Desktop\Screencaptuere\ScreenRecording4.wmv"; 
     // Start the Screen Capture Job 
     scj.Start(); scj.Stop(); 

Попробуйте этот код здесь ... надеюсь, что это будет полезно для вас ....!

+0

Пожалуйста, объясните, как ваш ответ охватывает то, как этот подход достигает желаемого результата и почему он будет работать. Это действительно помогло бы знаниям ФП. – Bluetree

Смежные вопросы