Created
August 6, 2017 16:50
-
-
Save angelovstanton/4e79591c65ee0d73abdd6831b4d62722 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[Test] | |
public void TakingHTML2CanvasFullPageScreenshot() | |
{ | |
using (var driver = new ChromeDriver()) | |
{ | |
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(5); | |
driver.Navigate().GoToUrl(@"https://automatetheplanet.com"); | |
IJavaScriptExecutor js = driver; | |
var html2canvasJs = File.ReadAllText($"{GetAssemblyDirectory()}\\html2canvas.js"); | |
js.ExecuteScript(html2canvasJs); | |
string generateScreenshotJS = @"function genScreenshot () { | |
var canvasImgContentDecoded; | |
html2canvas(document.body, { | |
onrendered: function (canvas) { | |
window.canvasImgContentDecoded = canvas.toDataURL(""image/png""); | |
}}); | |
} | |
genScreenshot();"; | |
js.ExecuteScript(generateScreenshotJS); | |
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); | |
wait.IgnoreExceptionTypes(typeof(InvalidOperationException)); | |
wait.Until(wd => ((IJavaScriptExecutor)wd).ExecuteScript("return canvasImgContentDecoded;") != null); | |
var pngContent = (string)js.ExecuteScript("return canvasImgContentDecoded;"); | |
pngContent = pngContent.Replace("data:image/png;base64,", string.Empty); | |
byte[] data = Convert.FromBase64String(pngContent); | |
var tempFilePath = Path.GetTempFileName().Replace(".tmp", ".png"); | |
Image image; | |
using (var ms = new MemoryStream(data)) | |
{ | |
image = Image.FromStream(ms); | |
} | |
image.Save(tempFilePath, ImageFormat.Png); | |
} | |
} | |
private string GetAssemblyDirectory() | |
{ | |
string codeBase = Assembly.GetExecutingAssembly().CodeBase; | |
var uri = new UriBuilder(codeBase); | |
string path = Uri.UnescapeDataString(uri.Path); | |
return Path.GetDirectoryName(path); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment