मैं पूरी ब्राउज़र स्क्रीन के स्क्रीनशॉट लेने कोशिश कर रहा हूँ (जैसे किसी भी उपकरण पट्टियों, पैनलों और इतने पर के साथ) न केवल एक पूरे पेज, तो मैं यह मिल गया हूँ कोड:सेलेनियम webdriver के वर्तमान विंडो GUID से विंडो हैंडल (IntPtr) जाओ
using (FirefoxDriver driver = new FirefoxDriver())
{
driver.Navigate().GoToUrl(url);
string title = String.Format("{0} - Mozilla Firefox", driver.Title);
var process = Process.GetProcesses()
.FirstOrDefault(x => x.MainWindowTitle == title);
if (process != null)
{
var screenCapture = new ScreenCapture();
var image = screenCapture.CaptureWindow(process.MainWindowHandle);
// ...
}
}
निश्चित रूप से इसका मतलब यह है कि आप उस विशिष्ट शीर्षक के साथ एकल ब्राउज़र उदाहरण है:
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");
}
अच्छा चाल, btw, लेकिन दो देखते हैं कि अलग-अलग पर पूरा काम कर समाधान (सी #) सामने ब्राउज़र लाने के लिए किया जाता है पोस्ट करने के लिए, एक ही शीर्षक के साथ फ़ायरफ़ॉक्स के उदाहरण? – kseen
@kseen आप बदल सकते [ 'FirstOrDefault'] (http://msdn.microsoft.com/en-us/library/bb549039) [' SingleOrDefault'] के साथ (http://msdn.microsoft.com/en-us/लाइब्रेरी/बीबी 549274), ताकि यदि एक ही शीर्षक के साथ दो अलग-अलग ब्राउज़र इरादे हैं तो आपको अपवाद मिलेगा। यदि आप एक परीक्षण मामले में हैं तो आप इसे जोर दे सकते हैं। –
@PaoloMoretti मैं कैसे वर्तमान विंडो (मौजूदा विंडो जो मैन्युअल रूप से खोला जाता है) को संभाल प्राप्त कर सकते हैं जो ड्राइवर द्वारा खोला नहीं है मैं driver.getWindowHandle() का उपयोग नहीं कर सकते हैं मतलब है, –