当前位置: 首页 > 知识库问答 >
问题:

在C#中使用Selenium WebDrive的当前窗口截图

寿鸣
2023-03-14

我正在尝试拍摄一个在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窗口,然后弹出一个错误。我的目的是把一个已有的行书截图。我应该做哪些改变来实现这一点?

附言-有没有一种方法可以在执行测试时拍摄屏幕截图而不初始化新的驱动程序?

共有3个答案

耿志义
2023-03-14

这是我的解决办法。我必须创建一个新的显式驱动程序页面,并在该页面中添加屏幕截图方法。下面是我添加的方法:

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);
}
邓光耀
2023-03-14

对于找不到chromedriver.exe的错误,请将chromedriver.exe文件添加到可视化工作室解决方案中,并在属性窗口中将“复制到输出目录”设置为“始终复制”。

在截图之前,你需要导航到一个页面——如果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");

附言:请务必张贴您看到的任何错误的错误细节,以帮助我们更好地帮助您。

习胤运
2023-03-14

捕获屏幕截图使用Selenium WebDrive与C#.Net, NUnit.

// 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;
        }
    }
}
 类似资料:
  • 问题内容: 我正在尝试使用Linux上的python脚本拍摄当前窗口的屏幕截图。 我目前有一个脚本,可以截取整个屏幕的屏幕截图: 但是一个只想拥有选定的窗口。我知道问题出在grabWindow。但我不知道如何解决。 问题答案: 只需更换 与您要为其截屏的小部件一起使用。

  • 问题内容: 有没有一种方法可以使用Python在Mac OS X上的给定时间查找当前活动窗口的应用程序名称? 问题答案: 这应该工作: 仅适用于Leopard,如果安装了PyObjC,并且仅在第一行中指向正确的python二进制文件,则在Tiger上工作(如果您已经安装了通用MacPython,则可能要在Tiger上这样做)。但是Peter用Carbon的方式做这件事的答案可能会快很多,因为从Py

  • 本文向大家介绍javascript在当前窗口关闭前检测窗口是否关闭,包括了javascript在当前窗口关闭前检测窗口是否关闭的使用技巧和注意事项,需要的朋友参考一下 在当前窗口关闭前,检测当前窗口是否关闭 在ie9中,如果刷新文档的话,unloadform和onbeforeunload都会执行,如果是关闭页面的话只会执行onbeforeunload事件 值得注意的是,onunload在关闭页面时

  • 我尝试使用OpenGL绘制贝塞尔曲面。我的程序读取一个输入文件,其中包含用于绘图的采样点数量、用于表面着色的控制点和调色板。它必须输出一个带有曲面图的新窗口,我可以在其中操纵曲面和控制点的属性。 从Bernstein多项式生成的点被三角化,并通过从三角形的最小和最大高度映射它来按调色板分配颜色。 不幸的是,它打开了一个窗口,其中当前窗口的一部分在操作系统中打开,而没有为surface创建新界面。

  • 拦截窗口 bp CreateWindow 创建窗口 bp CreateWindowEx(A) 创建窗口 bp ShowWindow 显示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 获取窗口文本

  • 本文向大家介绍使用OpenGL创建窗口 C ++,包括了使用OpenGL创建窗口 C ++的使用技巧和注意事项,需要的朋友参考一下 在OpenGL上制作任何程序的基本步骤是创建一个窗口,所有代码都将在其中工作,因此我们如何创建它?在您的机器上安装OpenGL库之后(Ubuntu的OpenGL安装指南:如何在Ubuntu中安装OpenGL),我们可以开始了。 首先让我们了解如何构建OpenGL程序吗