2011-07-12 59 views
4

我試圖測試一個頁面,點擊一個按鈕生成一個PDF格式的彈出窗口。 我想讓selenium點擊彈出窗口並截取屏幕截圖或保存pdf。與Selenium中的PDF彈出窗口交互

我使用下面的代碼來獲取所有窗口句柄來使用switchTo()命令,但是當我執行它時,它只會返回一個窗口。硒似乎不認可PDF彈出窗口。

Set<String> handles = driver.getWindowHandles(); 
//converts set to array 
String[] array = handles.toArray(new String[0]); 

System.out.println(Arrays.asList(array)); 

是否有另一種方式切換到PDF彈出?

+0

我給你下面一個開始。但是我沒有足夠的信息來100%回答你,並且我的答案被標記爲「答案」,除非你很慷慨。 (1)PDF是在HTTP處理程序中啓動的(作爲文件本身)還是(2)在對象 - 嚴格(或iFrame - 過渡)標記中,PDF流式傳輸到在對象/ iFrame內啓動的頁面就像PDFViewer.aspx或(3)一樣,它是否在其自己的頁面中啓動(如PDFViewer.aspx)?這對解決這項工作的解決方案將產生很大的影響。 – MacGyver

+0

你是說PDF在Adobe應用程序中而不是在瀏覽器PDF插件中打開?如果是這樣,也許它只是一個MIME類型調整,以在第二個瀏覽器窗口中打開PDF,那麼您可以使用WebDriver窗口句柄方法跟蹤這兩個窗口並截取它(可能使用Sikuli?)。 – djangofan

回答

2

由於Selenium只能控制DOM可以控制的東西(IDE只是運行JavaScript),所以不能拍攝屏幕截圖。唯一的選擇就是保存它,除非新HTML5的JavaScript在操作系統上啓動(我不知道)。我會讓你找到使用JavaScript在Google上保存PDF的代碼,但是這些信息會讓你開始。只需創建一個名爲Selenium.prototype.doLaunchAndSavePDF的自定義命令來啓動PDF並保存它。並讓你的「目標」參數成爲文件的路徑和名稱。我不確定Selenium如何通過向前(或向後)的斜槓傳遞JavaScript,所以請小心。祝你好運!

選項#1 - 如果使用Selenium IDE:

指定下硒IDE>選項(菜單)>選項(菜單選項)>常規選項卡用戶extensions.js文件,然後瀏覽到您的文件在「Selenium核心擴展」下。

選項#2 - 如果使用Selenium RC服務器:

如果你不使用的IDE和使用Selenium RC服務器與客戶端驅動程序(如JUnit的爲例),您必須指定的路徑當您在命令行上啓動Selenium RC Server時,帶有-userExtensions參數的* .js文件。但是你說你只是想使用IDE,所以我會忽略這一點。使用Selenium RC服務器需要相當多的其他設置。

Java的罐子硒的server.jar -userExtensions用戶extensions.js

=======================

我在自定義user-extensions.js文件中創建了以下自定義命令(JavaScript函數)。我必須在IDE找到它之前退出並重新啓動它。在IDE的「Command」字段中的「do」後鍵入所有內容以查找自定義命令。它看起來也向IDE添加了「customAlertAndWait」。

代碼在用戶extensions.js文件:

Selenium.prototype.doCustomAlert =函數(sTarget,S值){警報( '目標:' + sTarget + '...值:' + S值); };

硒IDE命令的詳細信息:

命令:customAlert
目標:自定義的警報目標
值:自定義警戒值