Если вы используете реализацию IWebDriver (например, InternetExplorerDriver, FirefoxDriver), вы можете просто бросить его в интерфейс ITakesScreenshot и использовать метод GetScreenShot():
IWebDriver driver = new InternetExplorerDriver();
Screenshot screenShot = ((ITakesScreenshot)driver).GetScreenshot();
screenShot.SaveAsFile(/*fullFileNameAndPath*/, ImageFormat.Png);
Но если вы хотите сделать это с помощью RemoteWebDriver, вы не можете, потому что он не реализует интерфейс ITakesScreenshot. Таким образом, вы должны создать новый класс, основанный на RemoteWebDriver, который реализует этот интерфейс и добавляет метод GetScreenshot(), такие как:
public class ScreenShotRemoteWebDriver : RemoteWebDriver, ITakesScreenshot
{
public ScreenShotRemoteWebDriver(Uri RemoteAdress, ICapabilities capabilities)
: base(RemoteAdress, capabilities) { }
/// <summary>
/// Gets a <see cref="Screenshot"/> object representing the image of the page on the screen.
/// </summary>
/// <returns>A <see cref="Screenshot"/> object containing the image.</returns>
public Screenshot GetScreenshot()
{
// Get the screenshot as base64.
Response screenshotResponse = this.Execute(DriverCommand.Screenshot, null);
string base64 = screenshotResponse.Value.ToString();
// ... and convert it.
return new Screenshot(base64);
}
}
Теперь вы можете использовать его, как вы бы для IWebDriver:
RemoteWebDriver driver = new ScreenShotRemoteWebDriver(/*uri*/, /*capabilities*/);
Screenshot screenShot = ((ITakesScreenshot)driver).GetScreenshot();
screenShot.SaveAsFile(/*fullFileNameAndPath*/, ImageFormat.Png);
Мне понадобилось время, чтобы понять лабиринт классов и интерфейсов для драйверов, но через некоторое время все это имеет смысл.