2015-04-23 146 views
0

Take a screenshot with Selenium WebDriver的問題和答案包含優秀的說明如何使用不同語言的Selenium網絡驅動程序進行屏幕截圖。使用Selenium網絡驅動程序進行網頁拍攝

我使用Python和C#驅動我的Web驅動程序,並使用一組不同的瀏覽器驅動程序。

例如,如果使用PhantomJS無頭瀏覽器和Python進行屏幕截圖,我會得到完整的頁面截圖。在C#截圖不是直接提供的驅動程序方法,所以需要一些代碼(參見上面提到的問題和建議的C#解決方案)。

但是,C#食譜雖然完美地拍攝屏幕截圖,但不是我在尋找的東西。

問題是,C#食譜需要一個屏幕截圖,我正在尋找的是如何進行整頁拍攝。預計屏幕截圖會出現在屏幕上,瀏覽器頁面通常比屏幕大。在很多情況下,拍攝的照片應該是頁面拍攝的。

這個問題與細微問題細節中引用的問題不同,導致結果不同。我想這個解決方案適用於不同語言的頁面拍攝。

+2

我認爲唯一的解決方法是在代碼中設置瀏覽器窗口的大小。這樣,屏幕截圖直接與畫布大小相關。這裏有什麼可以幫助你的驅動程序實例:'_driver.Manage()。Window.Size = new System.Drawing.Size(1280,5000); '(或者一些任意大的高度!!) –

+0

driver.Manage()。Window.Size設置一個物理窗口大小(當webdriver啓動時,我用它在一些瀏覽器上有相當小的窗口來改變窗口大小)。當頁面比頁面更長/更寬時,我會假定畫布也隨着內容獲取滾動條更大。將嘗試這個配方,並反映。 – ljgww

回答

4

當前WebDriver API的屏幕截圖被定義爲整頁屏幕截圖。當你通過WebDriver截圖時,無論你使用什麼語言(Python,C#,Java等),你都應該得到它們的整個頁面。話雖如此,有一些注意事項需要注意。

對於IE驅動程序,如果您在64位Windows上運行並使用32位IEDriverServer.exe,則會看到截屏截至系統顯示分辨率的最大尺寸,任何溢出均爲黑色圖像的部分。這是由於Windows鉤子程序的侷限性,它允許IE驅動程序創建整頁屏幕截圖。 IE驅動程序的作者在blog post中可以找到更深入的細節。

Chrome的驅動程序只提供screenshots of the visible view port。這是司機的一個已知問題,並且已經有一段時間了,並且由於底層的bug in the Chrome browser itself而無法修復。

Safari驅動程序的體系結構不支持完整的DOM屏幕截圖。由於Safari瀏覽器提供的擴展點的性質有限,因此這種情況不太可能發生變化。

最後,關於屏幕截圖的所有討論僅與當前的 WebDriver實現有關。 W3C working group創建WebDriver spec已決定屏幕截圖應該只有visible view port,所以這種行爲將來可能會發生變化,並且只有允許視圖端口的屏幕​​截圖。

+0

非常感謝您的深入瞭解。 – ljgww

+2

+1 jim ...在這個答案中有很多信息的金塊。我完全*得到*爲什麼W£C組會選擇僅默認顯示視口。也許這將允許進一​​步的擴展來明確地截取整個畫布,從而標準化跨瀏覽器的行爲。 –

+0

來自戰場。嘗試IE9,FF37和Chrome 42 - FF和IE採取完整的畫布拍攝。 Chrome獲取可見部分。將嘗試更多。在思考跨瀏覽器功能時,只是希望認可Jim的答案是出色的指導方針。 – ljgww

相關問題