从硒webdriver的当前窗口GUID获取窗口句柄(IntPtr的) [英] Get Window handle (IntPtr) from Selenium webdriver's current window GUID
本文介绍了从硒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屋!
查看全文