我试图在C#中使用Selenium WebDriver执行测试的屏幕截图。我正在使用Gallio来运行我的测试。以下是我的截图代码:
public void TakeScreenshot(IWebDriver driver, string saveLocation)
{
ITakesScreenshot screenshotDriver = driver as ITakesScreenshot;
Screenshot screenshot = screenshotDriver.GetScreenshot();
screenshot.SaveAsFile(saveLocation, ImageFormat.Png);
}
我在测试中使用以下代码来截取屏幕截图:
IWebDriver driver = new ChromeDriver();
TakeScreenshot(driver, @"C:\screenshot.png");
问题是,在执行时,语句会打开一个新的chrome窗口,然后弹出错误。我的目标是获取现有运行脚本的屏幕截图。我应该做些什么改变才能实现这一目标?
P.S。 - 在没有初始化新驱动程序的情况下,有没有办法在执行测试时截取屏幕截图?
答案 0 :(得分:3)
使用Selenium Webdriver使用C#.Net,NUnit捕获ScreenShot。
// 1- Add a reference of System.Drawing in your solution/project.
// 2- use system.Drawing.Imaging namespace in your test.
// Here I am capturing the screen shot of Facebook Home page.
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;
}
}
}
答案 1 :(得分:0)
对于未找到chromedriver.exe的错误,请将chromedriver.exe文件添加到visual studio解决方案,并在属性窗口中将“复制到输出目录”设置为“始终复制”。
您需要在截取屏幕截图之前导航到某个页面 - 如果Chrome中的默认页面为空白,那么您将看到错误
unknown error: cannot take screenshot
from unknown error: Cannot access contents of url "about:blank". Extension manifest must request permission to access this host.
如果没有,在C:\ root上保存文件时,您可能还会遇到权限问题,因此请将屏幕截图保存在子目录中。
以下代码应该有效:
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("http://www.google.com");
TakeScreenshot(driver, @"C:\devtest\screenshot.png");
PS:始终发布您看到的任何错误的错误详情,以帮助我们更好地为您提供帮助。
答案 2 :(得分:0)
这是我的解决方案。我不得不创建一个新的显式驱动程序页面,并在该页面中添加了屏幕截图方法。以下是我添加的方法:
public Screenshot GetScreenshot()
{
// Get the screenshot as base64.
Response screenshotResponse = this.Execute(DriverCommand.Screenshot, null);
string base64 = screenshotResponse.Value.ToString();
// ... and convert it.
return new Screenshot(base64);
}