How can I get screenshot of specified element using WebDriver in C#

前端 未结 2 563
忘了有多久
忘了有多久 2020-12-17 07:13

I have my little project written on Java and I need to rewrite it in C#.

It\'s almost done, but I am stuck on getting screenshot of element using Selenium webdriver.

相关标签:
2条回答
  • 2020-12-17 07:18

    I didn't check the code, but must work perfectly:

    public Bitmap MakeElemScreenshot( IWebDriver driver, WebElement elem)
    {
        Screenshot myScreenShot = ((ITakesScreenshot)driver).GetScreenshot();
    
        Bitmap screen = new Bitmap(new MemoryStream(myScreenShot.AsByteArray));
        Bitmap elemScreenshot = screen.Clone(new Rectangle(elem.Location, elem.Size), screen.PixelFormat);
    
        screen.Dispose();
    
        return elemScreenshot;
    }
    

    By the way, it's c# code. But java's code will be similar to this.

    0 讨论(0)
  • 2020-12-17 07:23

    Here i have written some code to take screenshot of an Element using c#

     FirefoxDriver driver = null;
        private WebDriverWait wait;
    
        // Use this function to take screenshot of an element.  
    
    public static Bitmap GetElementScreenShot(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 = GetElementScreenShot(driver, element);
                        img.Save("test.png", System.Drawing.Imaging.ImageFormat.Png);
                    }
                }
            }
            catch (Exception)
            {
    
                throw;
            }
        }
    

    if any issue then let me know.

    0 讨论(0)
提交回复
热议问题