有没有很好的示例,说明如何使用Selenium Webdriver C#截屏,然后裁剪并保存图像? [英] Are there any good examples of how to take a screenshot in selenium webdriver C#, then crop and save the image?
问题描述
我一直在寻找一些很好的示例,这些示例如何使用C#的Selenium Webdriver中的ITakesScreenshot截屏,然后使用元素尺寸裁剪图像,然后保存该新图像。运气不好,我没有在C#中找到任何东西。
I've been searching for some good examples of how to take a screenshot using ITakesScreenshot in Selenium Webdriver in C#, then to crop the image using the elements dimensions and then saving this new image. With no such luck have I found any in C#.
目前我有此方法,但是在测试中使用时,经常会遇到内存不足异常。
I have this method at the moment but every so often I get a Out of Memory exception when used in a test. It fails on the line where it tries to crop.
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);
}
感谢任何帮助,在此先感谢!!!
Any help is much appreciated, thanks in advance!!!
推荐答案
您正在创建的某些对象是 IDisposable
。您需要确保在它们上调用 Dispose()
。从目前的情况来看,他们没有释放他们所声称的内存,这就是为什么您会得到例外。
Some of the objects you're creating are IDisposable
. You need to make sure Dispose()
gets called on them. As it stands they're not releasing the memory they've claimed, which is why you get the exceptions.
确保清除这些物品的最简单方法是:将它们每个都包装在 using
块中。
The easiest way to make sure these items get disposed is to wrap each of them in a using
block.
这篇关于有没有很好的示例,说明如何使用Selenium Webdriver C#截屏,然后裁剪并保存图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!