C# 如何在C中使用html2canvas JavaScript和Selenium webdriver#
使用SeleniumWebDriver,我将测试JS脚本,直接在浏览器上拍摄网页或其部分的“截图”。 我编写了一个C#代码来测试它,但是obj总是空的 C#参考代码C# 如何在C中使用html2canvas JavaScript和Selenium webdriver#,c#,javascript,selenium,selenium-webdriver,C#,Javascript,Selenium,Selenium Webdriver,使用SeleniumWebDriver,我将测试JS脚本,直接在浏览器上拍摄网页或其部分的“截图”。 我编写了一个C#代码来测试它,但是obj总是空的 C#参考代码 有两种想法是错误的: returnimg是由onrendered函数返回的值。这意味着html2canvas()call不会像您在代码中期望的那样返回图像 executjs.ExecuteScript返回IWebElement、Int64、布尔值、字符串、列表或null。因此,您无法获取此图像作为返回值,有关更多详细信息,请参阅 如
有两种想法是错误的:
returnimg
是由onrendered
函数返回的值。这意味着html2canvas()
call不会像您在代码中期望的那样返回图像executjs.ExecuteScript
返回IWebElement、Int64、布尔值、字符串、列表或null。因此,您无法获取此图像作为返回值,有关更多详细信息,请参阅((ITakesScreenshot)驱动程序)代码>()
如果您需要此站点中的图像,则必须将其实现为onrendered
函数
更新(2013年10月25日)
您可以调用executjs.ExecuteAsyncScript
。javascript函数调用中的最后一个参数是webdriver注入的回调函数。异步方法在注入方法后返回
调用,或完成脚本超时。出于这个原因,将timeout设置为更高的值是一个好主意(只是为了确保应用程序按预期运行,稍后您可以在生产系统中使用该值)
结果是base64编码图像为字符串。有两种想法是错误的:
returnimg
是由onrendered
函数返回的值。这意味着html2canvas()
call不会像您在代码中期望的那样返回图像
executjs.ExecuteScript
返回IWebElement、Int64、布尔值、字符串、列表或null。因此,您无法获取此图像作为返回值,有关更多详细信息,请参阅
如果您需要站点的屏幕截图,可以使用((ITakesScreenshot)驱动程序)代码>()
如果您需要此站点中的图像,则必须将其实现为onrendered
函数
更新(2013年10月25日)
您可以调用executjs.ExecuteAsyncScript
。javascript函数调用中的最后一个参数是webdriver注入的回调函数。异步方法在注入方法后返回
调用,或完成脚本超时。出于这个原因,将timeout设置为更高的值是一个好主意(只是为了确保应用程序按预期运行,稍后您可以在生产系统中使用该值)
结果是base64编码图像为字符串。我将测试html2canvas,因为使用此脚本可以拍摄部分网页(Div,…)的“截图”。这在((ITakesScreenshot)驱动程序中是不可能的代码>我会测试html2canvas,因为有了这个脚本,就可以对部分网页(Div,…)进行“截图”。这在((ITakesScreenshot)驱动程序中是不可能的代码>
IWebDriver Driver = new FirefoxDriver();
Driver.Navigate().GoToUrl("http://www.monsite.com");
string scriptJS = File.ReadAllText("html2canvas.js");
scriptJS += @"
html2canvas(document.body, {
onrendered: function(canvas) {
var img = canvas.toDataURL("image/png");
return img;
}
});";
IJavaScriptExecutor executorJS = Driver as IJavaScriptExecutor;
var obj = executorJS.ExecuteScript(scriptJS);
Driver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromSeconds(5));
scriptJS += @"
var webDriverCallback = arguments[arguments.length - 1];
html2canvas(document.body, {
onrendered: function(canvas) {
var img = canvas.toDataURL('image/png').replace('data:image/png;base64,', '');;
webDriverCallback(img);
}
});";
IJavaScriptExecutor executorJS = Driver as IJavaScriptExecutor;
var obj = executorJS.ExecuteAsyncScript(scriptJS);