2017-06-02 108 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()); 

 } 
 }