从browserstack

时间:2017-06-02 06:41:15

标签: java node.js selenium selenium-webdriver browserstack

我已经基于ExpressJS和NodeJS为我的硒测试创建了一个自定义报告工具。我将有关已执行测试的所有信息存储在自己的数据库中(testrun,testcases,teststeps等)。

现在,我想展示每个测试步骤的屏幕截图。测试将在browserstack中执行,现在我想从构建中获取屏幕截图并将它们集成到我的自定义报告中。我的第一个想法是自己截取屏幕截图并将它们存储到数据库(或文件系统)中,但图像非常大,为什么不使用browsertack的屏幕截图。

是否可以从browserstack获取屏幕截图并将其集成到我的自定义报告工具中的每个测试步骤中?我知道,有一个来自browserstack的api,但我认为很难得到它们并将它与我当前的逻辑相匹配。 最好的方法是从运行时的browserstack获取屏幕截图路径并将其存储到我的数据库中。这可能吗?

2 个答案:

答案 0 :(得分:0)

我从browserstack得到以下答案:

  

Browserstack REST API将检索' Raw日志'。这些Raw   需要在本地解析日志以提取屏幕截图URL   作为会话的一部分自动生成' Visual logs'。这些   然后,URL可以存储在本地数据库中。 REST API:curl -u   ":"   https://www.browserstack.com/automate/sessions/。json   以上API以JSON格式返回响应。取决于   您可以使用" logs"," video_url"," browser_url"要么   " public_url"键。 "日志" :链接访问会话' s   原始日志" video_url" :链接到记录的访问会话   视频" browser_url" :只有登录用户才能访问此项   会话链接" public_url" :会话链接可公开访问

所以,我猜它不可能在运行时收到相应的屏幕截图。目前,我正在使用TestNGListener类来记录每个测试步骤并将其直接存储到数据库中。我的想法是从browserstack获取屏幕截图,例如调用afterNavigateTo时。但这似乎是不可能的。目前,我认为我必须在单独的视图中显示我生成的日志和来自browserstack的可视化日志。或者有人有其他想法吗?

答案 1 :(得分: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());

 }
 }