2017-06-02 111 views
1

我爲我的硒測試創建了基於ExpressJS和NodeJS的自定義報告工具。我將有關執行測試的所有信息存儲在自己的數據庫中(testrun,testcases,teststeps等)。從browserstack獲取屏幕截圖

現在,我想顯示每個測試步驟的截圖。測試將在browserstack中執行,現在我想從構建中獲取屏幕截圖並將其集成到我的自定義報告中。我的第一個想法是由我自己截取屏幕截圖並將它們存儲到數據庫(或文件系統)中,但圖像非常大,爲什麼不使用browsertack的屏幕截圖。

是否可以從瀏覽器獲取截圖並將其集成到我的自定義報告工具的每個測試步驟中?我知道,有一個來自瀏覽器的api,但我認爲很難讓它們與我目前的邏輯相匹配。 最好的方法是在運行時從browserstack獲取截圖路徑並將其存儲到我的數據庫。那可能嗎?

+2

你能考慮分享你的工作嗎?謝謝 – DebanjanB

+0

感謝您的提示,但我有很多代碼,我認爲這與我的問題沒有關係或有幫助。我還沒有實現任何接收來自browserstack的截圖。 – taddeuz

回答

0

我從browserstack如下回答:

Browserstack REST API將檢索 '原木'。這些Raw 日誌需要在本地進行解析,以提取作爲會話'可視化日誌'的一部分自動生成的屏幕快照URL 。這些URL可以存儲在本地數據庫中。 REST API:curl -u 「:」 https://www.browserstack.com/automate/sessions/ .json上述API的 以JSON格式返回響應。根據 要求,您可以使用「日誌」,「video_url」,「browser_url」或 「public_url」密鑰。 「日誌」:鏈接訪問會話的 原木「VIDEO_URL」:鏈接訪問會話的記錄 視頻「browser_url」:只有登錄的用戶可以訪問此 會話鏈接「public_url」:公開訪問會話鏈接

所以,我想在運行時不可能收到相應的屏幕截圖。目前,我正在使用TestNGListener類來記錄每個測試步驟並將其直接存儲到數據庫中。我的想法是從browserstack獲取屏幕截圖,例如在調用afterNavigateTo時。但這似乎是不可能的。目前,我想我必須在單獨的視圖中顯示我生成的日誌和來自瀏覽器的可視化日誌。還是有人有其他想法?

+0

好吧,如果你不能從REST API獲取它: 截取屏幕截圖並將其保存在(分離的)s3存儲桶中,而不是存儲在服務器上,然後從s3存儲桶中嵌入IMG-URL。 –

0

您可以使用此代碼段。它爲我工作,我得到它從http://learn-automation.com/how-to-capture-screenshot-in-selenium-webdriver/

import java.io.File; 

import java.io.IOException; 

import org.apache.commons.io.FileUtils; 

import org.openqa.selenium.OutputType; 

import org.openqa.selenium.TakesScreenshot; 

import org.openqa.selenium.WebDriver; 

import org.openqa.selenium.firefox.FirefoxDriver; 

import org.testng.annotations.Test; 

public class ScreenshootGoogle { 

 @Test 
 public void TestJavaS1() 
{ 
// Open Firefox 
WebDriver driver=new FirefoxDriver(); 

// Maximize the window 
driver.manage().window().maximize(); 

// Pass the url 
driver.get("http://www.google.com"); 

// Take screenshot and store as a file format 
File src= ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
try { 
 // now copy the  screenshot to desired location using copyFile //method 
FileUtils.copyFile(src, new File("C:/selenium/error.png")); 
} 

catch (IOException e) 
 { 
  System.out.println(e.getMessage()); 

 } 
 }