从硒webdriver的当前窗口GUID获取窗口句柄(IntPtr的) [英] Get Window handle (IntPtr) from Selenium webdriver's current window GUID

查看:923
本文介绍了从硒webdriver的当前窗口GUID获取窗口句柄(IntPtr的)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图捕捉到整个浏览器屏幕的快照(例如使用任何工具栏,面板等),不仅整个页面,所以我得到这个code:

 使用(FirefoxDriver驱动程序=新FirefoxDriver())
{
    。driver.Navigate()GoToUrl(URL);

    抓屏SC =新的抓屏();

    //我如何才能找到窗口的自然IntPtr的手柄位置,使用GUID类标识符由driver.currentWindowHandle回来?
    图片IMG = sc.CaptureWindow(...);
    MemoryStream的毫秒=新的MemoryStream();
    img.Save(MS,ImageFormat.Jpeg);
    返回新FileStreamResult(MS,为image / jpeg);
}
 

解决方案

只是和想法破解。你可以使用反射的方法来获取Firefox实例的过程。首先声明从FirefoxDriver继承FirefoxDriverEx类 - 访问受保护的二元属性,它封装流程实例:

 类FirefoxDriverEx:FirefoxDriver {
        公开程序GetFirefoxProcess(){
            VAR网络= typeof运算(FirefoxBinary).GetField(过程,BindingFlags.NonPublic可| BindingFlags.Instance);
            返回fi.GetValue(this.Binary)的过程;
        }
    }
 

可能比你得到的流程实例访问MainWindowHandle财产

 使用(VAR驱动程序=新FirefoxDriverEx()){
            。driver.Navigate()GoToUrl(URL);

            VAR方法= driver.GetFirefoxProcess();
            如果(处理!= NULL){
                VAR抓屏=新的抓屏();
                VAR图像= screenCapture.CaptureWindow(process.MainWindowHandle);
                // ...
            }
        }
 

I'm trying to capture a screenshot of whole browser screen (e.g. with any toolbars, panels and so on) not only an entire page, so I'm got this code:

using (FirefoxDriver driver = new FirefoxDriver())
{ 
    driver.Navigate().GoToUrl(url);                

    ScreenCapture sc = new ScreenCapture();

    // How can I find natural IntPtr handle of window here, using GUID-like identifier returning by driver.currentWindowHandle?
    Image img = sc.CaptureWindow(...);
    MemoryStream ms = new MemoryStream();
    img.Save(ms, ImageFormat.Jpeg);
    return new FileStreamResult(ms, "image/jpeg");
}

解决方案

Just and idea for hack. You may use Reflection methods to get process of firefox instance. First declare FirefoxDriverEx class inherited from FirefoxDriver - to access protected Binary property which encapsulates Process instance:

 class FirefoxDriverEx : FirefoxDriver {
        public Process GetFirefoxProcess() {
            var fi = typeof(FirefoxBinary).GetField("process", BindingFlags.NonPublic | BindingFlags.Instance);
            return fi.GetValue(this.Binary) as Process;
        }
    }

Than you may get process instance for access to MainWindowHandle property

using (var driver = new FirefoxDriverEx()) {
            driver.Navigate().GoToUrl(url);

            var process = driver.GetFirefoxProcess();
            if (process != null) {
                var screenCapture = new ScreenCapture();
                var image = screenCapture.CaptureWindow(process.MainWindowHandle);
                // ...
            }
        }

这篇关于从硒webdriver的当前窗口GUID获取窗口句柄(IntPtr的)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆