C# 如何在C中使用html2canvas JavaScript和Selenium webdriver#

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。因此,您无法获取此图像作为返回值,有关更多详细信息,请参阅 如

使用SeleniumWebDriver,我将测试JS脚本,直接在浏览器上拍摄网页或其部分的“截图”。 我编写了一个C#代码来测试它,但是obj总是空的

C#参考代码


有两种想法是错误的:

  • 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);