有没有很好的例子说明如何在 selenium webdriver C# 中截取屏幕截图,然后裁剪并保存图像?

Posted

技术标签:

【中文标题】有没有很好的例子说明如何在 selenium webdriver C# 中截取屏幕截图,然后裁剪并保存图像?【英文标题】:Are there any good examples of how to take a screenshot in selenium webdriver C#, then crop and save the image? 【发布时间】:2014-09-04 16:29:45 【问题描述】:

我一直在寻找一些很好的例子,说明如何在 C# 中使用 Selenium Webdriver 中的 ITakesScreenshot 截取屏幕截图,然后使用元素尺寸裁剪图像,然后保存这个新图像。没有这样的运气,我在 C# 中找到了任何东西。

我目前有这种方法,但是在测试中使用时,我经常会遇到内存不足异常。它在尝试裁剪的那一行失败。

public void TakeScreenShotOfElement(IWebDriver _driver, string rootpath, string imgName, string element2)
    

            string element3 = element2;
            var element = driver.FindElement(By.XPath(element3));
            Byte[] ba = ((ITakesScreenshot)driver).GetScreenshot().AsByteArray;
            var ss = new Bitmap(new MemoryStream(ba));

            var crop = new Rectangle(element.Location.X, element.Location.Y, element.Size.Width, element.Size.Height);

            //create a new image by cropping the original screenshot
            Bitmap image2 = ss.Clone(crop, ss.PixelFormat);


            if (!Directory.Exists(rootpath))
            
                Directory.CreateDirectory(rootpath);
            
            image2.Save(String.Format("0\\1.png", rootpath, imgName), System.Drawing.Imaging.ImageFormat.Png);

    

任何帮助都非常感谢,在此先感谢!!!

【问题讨论】:

【参考方案1】:

您正在创建的一些对象是IDisposable。你需要确保Dispose() 被调用。就目前而言,他们没有释放他们声称的内存,这就是你得到异常的原因。

确保这些项目得到处理的最简单方法是将它们中的每一个包装在一个 using 块中。

【讨论】:

以上是关于有没有很好的例子说明如何在 selenium webdriver C# 中截取屏幕截图,然后裁剪并保存图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQLAlchemy 建立多对多关系:一个很好的例子

Lambda 解释和它是啥以及一个很好的例子[重复]

如何在Android中获取某人的纬度和经度?

CMake 中的 Cppcheck 支持

如何从服务器下载 JSON 的示例?

使用php和wsdl查询soap以获得结果