如何在C#中使用WebDriver获取指定元素的屏幕截图

我的小项目是用Java编写的,我需要用C#重写它。

它差不多完成了,但我仍然坚持使用Selenium webdriver获取元素的截图。 我用下一种方式在Java中做到了:

public String saveImage(){ String src = ""; try{ File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); BufferedImage fullImg = ImageIO.read(screenshot); Point point = elementToScreent.getLocation(); int eleWidth = elementToScreent.getSize().getWidth(); int eleHeight = elementToScreent.getSize().getHeight(); BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight); ImageIO.write(eleScreenshot, "png", screenshot); src = path + System.currentTimeMillis() +".png"; FileUtils.copyFile(screenshot, new File(src)); }catch(Exception e){ e.printstacktrace(); } return src; } 

它在Java中运行得很完美,但我不知道如何用C#重写它,因为我对它不太熟悉。

有人可以建议一些很好的方法在C#中实现相同的目标吗?

在这里,我编写了一些代码,使用c#将屏幕缩短为一个元素

  FirefoxDriver driver = null; private WebDriverWait wait; // Use this function to take screen short of an element. public static Bitmap GetElementScreenShort(IWebDriver driver, IWebElement element) { Screenshot sc = ((ITakesScreenshot)driver).GetScreenshot(); var img = Image.FromStream(new MemoryStream(sc.AsByteArray)) as Bitmap; return img.Clone(new Rectangle(element.Location, element.Size), img.PixelFormat); } //testing function public void GetIPLocation(string IPAddress) { try { if (driver == null) driver = new FirefoxDriver(); if (driver.Title != "IP Location Finder - Geolocation") driver.Navigate().GoToUrl("https://www.iplocation.net/"); if (wait == null) wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); var ipTextBox = wait.Until(ExpectedConditions.ElementExists(By.CssSelector("input[type='text']"))); ipTextBox.Clear(); ipTextBox.SendKeys(IPAddress); wait.Until(ExpectedConditions.ElementExists(By.CssSelector("input[type='submit']"))).Click(); foreach (IWebElement element in driver.FindElements(By.CssSelector("div>.col.col_12_of_12"))) { if (element.FindElements(By.TagName("h4")).Count > 0) { var img = GetElementScreenShort(driver, element); img.Save("test.png", System.Drawing.Imaging.ImageFormat.Png); } } } catch (Exception) { throw; } } 

如有任何问题,请告诉我。