代码之家  ›  专栏  ›  技术社区  ›  James

在Selenium 2中截图的最佳方法是什么?

  •  40
  • James  · 技术社区  · 14 年前

    我需要一种方法来截图我的功能测试。现在我正在使用Selenium 2和C绑定。我非常想在测试结束时截图以确保显示所需的页面。你们知道我可以在我的C代码中加入一些特定的工具来触发屏幕截图吗?我找不到一种内置的硒2溶液(不仔细看)。

    12 回复  |  直到 6 年前
        1
  •  60
  •   ballade4op52 Okezie    8 年前

    要在Selenium 2中进行屏幕截图,需要执行以下操作

    driver = new FireFoxDriver(); // Should work in other Browser Drivers
    driver.Navigate().GoToUrl("http://www.theautomatedtester.co.uk");
    Screenshot ss = ((ITakesScreenshot) driver).GetScreenshot();
    
    //Use it as you want now
    string screenshot = ss.AsBase64EncodedString;
    byte[] screenshotAsByteArray = ss.AsByteArray;
    ss.SaveAsFile("filename", ImageFormat.Png); //use any of the built in image formating
    ss.ToString();//same as string screenshot = ss.AsBase64EncodedString;
    

    这段代码应该可以工作,因为我在Ironpython repl中快速测试了它。参见下面的Ironpython代码

    import clr
    clr.AddReference("WebDriver.Common.dll")
    clr.AddReference("WebDriver.Firefox.dll")
    from OpenQA.Selenium import *
    from OpenQA.Selenium.Firefox import *
    driver = FirefoxDriver()
    driver.Navigate().GoToUrl("http://www.theautomatedtester.co.uk")
    s = driver.GetScreenshot()
    s.AsBaseEncodedString
    # HUGE string appears in the REPL
    
        2
  •  28
  •   Toolkit    7 年前
    var driver = new InternetExplorerDriver();
    driver.Navigate().GoToUrl("http://www.google.com");
    var ss = driver.GetScreenshot();   
    ss.SaveAsFile("ss.png", System.Drawing.Imaging.ImageFormat.Png);
    
        3
  •  11
  •   user800612    13 年前

    我不知道这是否重要,但我最终不得不在用C写的时候给司机做演员。

    类似:

    Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
    
        4
  •  5
  •   Deeb    9 年前

    只需在一行代码中使用扩展方法takescreenshot()。

    IWebDriver driver = new InternetExplorerDriver();
    driver.Navigate().GoToUrl("Your_Homepage_Url");
    
    driver.TakeScreenshot().SaveAsFile("file_name_string", ImageFormat.Jpeg);
    
        5
  •  2
  •   Lachlan Goodhew-Cook Matt Melton    9 年前
    1. 添加对的引用 System.Drawing 在您的解决方案/项目中。
    2. 使用 System.Drawing.Imaging 测试中的命名空间。

    在这里,我捕获了Facebook主页的屏幕截图。

    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;
            }
        }
    }
    
        6
  •  1
  •   Bartłomiej Semańczyk    9 年前
    public void TakeScreenshot(string saveLocation) {
            var location = GetPath() + _name + "\\" + saveLocation + ".png";
            var ssdriver = _driver as ITakesScreenshot;
            var screenshot = ssdriver.GetScreenshot();
            screenshot.SaveAsFile(location, ImageFormat.Png);
        }
    

    此代码将帮助您进行屏幕截图

        7
  •  1
  •   Rahul Rana    6 年前

    爪哇

    protected void fullPageScreenshot(String testname) {
                String timeStamp = new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss").format(Calendar.getInstance().getTime());
                String imageName = testname + "-" + timeStamp + ".png";
                Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(2000))
                        .takeScreenshot(DriverManager.getDriver());
                try {
                    ImageIO.write(screenshot.getImage(), "PNG", new File("./FullPage_Screenshots/" + imageName));
                } catch (Exception e) {
                    System.out.println("Capturing FullPage Screenshot failed");
                }
            }
    

    使用Ashot库获取整页屏幕截图-即使需要滚动页面 https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot/1.5.4

        8
  •  0
  •   Kalpesh Bhupta    9 年前

    使用System.Drawing.Imaging参考。 以下代码可用于截图。

    IWebDriver driver = new FirefoxDriver();
    ITakesScreenshot screenshotDriver = driver as ITakesScreenshot;
    Screenshot screenshot = screenshotDriver.GetScreenshot();
    String fp = "D:\\" + "snapshot" + "_"+ DateTime.Now.ToString("dd_MMMM_hh_mm_ss_tt") + ".png";
    screenshot.SaveAsFile(fp, ImageFormat.Png);
    

    笔记: 时间戳有两个优点: 1)截图时,你会知道完美的日期时间。 2)saveasfile函数覆盖现有文件。因此,datetime可以帮助创建不同的文件。

        9
  •  0
  •   J S V G Pavan Kumar    7 年前
            ScreenCaptureJob scj;
            scj = new ScreenCaptureJob();
            // Specify the path & file name in which you want to save         
            scj.OutputScreenCaptureFileName = @"C:\Users\jpavankumar\Desktop\Screencaptuere\ScreenRecording4.wmv";
            // Start the Screen Capture Job
            scj.Start(); scj.Stop();
    

    在这里尝试此代码…希望它对你有用……!

        10
  •  0
  •   vvvvv lexa-b    6 年前

    在全局代码中定义:

    var counter = DateTime.Now.Ticks.ToString();
    
    ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile((snap +counter + ".jpg").ToString(), OpenQA.Selenium.ScreenshotImageFormat.Jpeg);
    test.Log(LogStatus.Fail, "Snapshot below: " + test.AddScreenCapture(snap + counter + ".jpg"));
    
        11
  •  0
  •   Zoe - Save the data dump 张群峰    6 年前
    driver.Url = "https://www.amazon.in/";
    //Store image in bin folder
    ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("CurrentPage.png"); 
    //Store image in D drive        
    ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile(@"D:\CurrentPage.png");
    
        12
  •  -1
  •   Abel    14 年前

    使用硒有两个我熟悉的电话: captureEntirePageScreenshot captureScreenshot . 你可能想看看这些电话是否能满足你的要求。