이것은 Selenium Webdriver를 사용하여 Screenshot을 가져 와서 MS SQL 데이터베이스에 저장하는 것입니다. 이미지는 이미지 이름에 브라우저 이름, 브라우저 버전, 시퀀스 번호 및 시나리오 이름이 추가 된 데이터베이스에 저장됩니다. 이 코드는 Chrome, Firefox, Internet Explorer 및 Safari에서 지원됩니다.
원하는 경우 그림을 로컬 폴더에 저장하기 위해 63-70 줄 사이에 하나 이상의 옵션이 있습니다. 로컬 시스템에 폴더를 설정할 수 있으며 MSSQL 데이터베이스에서 png 형식 및 바이트 형식으로 지정한 폴더에 그림을 저장합니다.
Java 및 Selenium Webriver를 사용하여 스크린 샷 찍고 MSSQL 데이터베이스에 저장하십시오.
패키지 com.main;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
org.openqa.selenium.TakesScreenshot 가져 오기
org.openqa.selenium.WebDriver 가져 오기
import org.openqa.selenium.remote.RemoteWebDriver;
공용 클래스 ImageSave {
개인 정적 int imageSeqNo = 0;
private static String scenName;
개인 정적 WebDriver browserDriver;
개인 정적 int browserWidth;
private static int browserHeight;
public static String 브라우저;
공개 정적 WebDriver 드라이버;
공공 정적 int getBrowserWidth () {
return browserWidth;
}
공공 정적 int getBrowserHeight () {
return browserHeight;
}
공공 정적 문자열 getScenName () {
return sceneName;
}
공공 정적 int getImageSeqNo () {
return imageSeqNo;
}
public static void main (String [] args) 예외를 throw합니다.
// BrowserDriver.getCurrentDriver ();
}
public static void addScreenshot (WebDriver 드라이버)는 IOException을 던집니다.
ClassNotFoundException, InterruptedException {
바이트 [] scrByte = getScreenShotBytes (드라이버);
browser = getBrowserAndVersion ();
String scenarioName = getScenName ();
문자열 imageName = scenarioName + ""+ 브라우저 + ""
+ System.currentTimeMillis () + ".png";
파일 scrFile = getScreenShotFile (드라이버);
String screenWidthHeight = getImageWidthHeight (scrFile);
// 로컬 시스템에서 스크린 샷 이미지를 저장하려면 아래 라인을 활성화하십시오
// FileUtils.copyFile (scrFile, 새 파일 ( "C : // screenshot //"+ imageName));
insertImageDB (scrByte, scenarioName, imageName, screenWidthHeight,
브라우저);
Thread.sleep (1000);
}
public static String getImageWidthHeight (File imageFile) throws IOException {
BufferedImage bimg = ImageIO.read (imageFile);
int imageWidth = bimg.getWidth ();
int imageHeight = bimg.getHeight ();
if (imageWidth! = 0) {
반환 imageWidth + "x"+ imageHeight;
} else {
"FullScreenx"+ imageHeight를 반환합니다.
}
}
공공 정적 파일 getScreenShotFile (WebDriver 드라이버) {
// WebDriver driverA = new Augmenter (). augment (driver);
return ((TakesScreenshot) 드라이버) .getScreenshotAs (OutputType.FILE);
}
public static byte [] getScreenShotBytes (WebDriver 드라이버) {
return ((TakesScreenshot) 드라이버) .getScreenshotAs (OutputType.BYTES);
}
공공 정적 무효의 insertImageDB (byte [] imageByte, 문자열 scenName,
문자열 imageName, 문자열 screenWidthHeight, 문자열 브라우저)
throws ClassNotFoundException {
속성 dbProp = 새 Properties ();
InputStream dbPropInput = null;
ResultSet rs = null;
PreparedStatement ps = null;
연결 con = null;
// setImageSeqNo (getImageSeqNo () + 1);
int seqNo = getImageSeqNo ();
System.out.println (scenName + "-"+ 브라우저 + "-"
+ screenWidthHeight + "- 샷 번호 :"+ seqNo);
시도 {
문자열 propPath = ". \ src \ test \ resources \ props \ dbConnect.properties";
dbPropInput = 새 FileInputStream (propPath);
dbProp.load (dbPropInput); // 속성 파일을로드합니다.
문자열 dbDriver = (dbProp.getProperty ( "dbDriver"));
문자열 dbURL = (dbProp.getProperty ( "dbURL"));
String stPro = (dbProp.getProperty ( "SPSql"));
Class.forName (dbDriver);
con = DriverManager.getConnection (dbURL);
ps = con.prepareStatement (stPro);
java.util.Date date = new java.util.Date ();
java.sql.Timestamp sqlTimestamp = 새로운 java.sql.Timestamp (date.getTime ());
System.out.println ( "Image Timestamp ="+ sqlTimestamp);
ps.setEscapeProcessing (true);
ps.setQueryTimeout (90); // 타임 아웃 값은 나중에 비활성화 될 수 있습니다.
ps.setString (1, "Project");
ps.setString (2, scenName);
ps.setString (3, browser);
ps.setString (4, screenWidthHeight);
ps.setTimestamp (5, sqlTimestamp);
ps.setInt (6, seqNo);
ps.setString (7, imageName);
ps.setBytes (8, imageByte);
// 데이터베이스 아래쪽에 주석을 달아 데이터베이스 업데이트를 비활성화합니다.
ps.executeUpdate ();
} catch (IOException e) {
e.printStackTrace ();
} catch (SQLException e) {
e.printStackTrace ();
} finally {
시도 {
if (dbPropInput! = null)
dbPropInput.close ();
if (rs! = null)
rs.close ();
if (ps! = null)
ps.close ();
if (con! = null)
con.close ();
} catch (예외 e) {
e.printStackTrace ();
}
}
}
공공 정적 문자열 getBrowserAndVersion () {
String browser_version = null;
기능 cap = ((RemoteWebDriver) 드라이버) .getCapabilities ();
String browsername = cap.getBrowserName ();
//이 블록은 IE 버전 번호를 확인합니다.
if ( "Internet Explorer".equalsIgnoreCase (browsername)) {
String uAgent = (String) ((JavascriptExecutor) 드라이버)
.executeScript ( "return navigator.userAgent;");
System.out.println (uAgent);
// uAgent는 IE8 용 "MSIE 8.0 Windows"로 반환합니다.
if (uAgent.contains ( "MSIE") && uAgent.contains ( "Windows")) {
browser_version = uAgent.substring (uAgent.indexOf ( "MSIE") + 5,
uAgent.indexOf ( "Windows") - 2);
} else if (uAgent.contains ( "Trident / 7.0")) {
browser_version = "11.0";
} else {
browser_version = "00";
}
} else {
// Firefox 및 Chrome 용 브라우저 버전
browser_version = cap.getVersion (); // .split ( ".") [0];
}
문자열 browserversion = browser_version.substring (0,
browser_version.indexOf ( ".")));
String bVersion = String.format ( "% 02d", Integer.parseInt (browserversion));
return ((browsername) + "_"+ bVersion);
}
공공 정적 문자열 browserNameConvert (문자열 browser_name) {
if (org.apache.commons.lang3.StringUtils.containsIgnoreCase (
browser_name, "explorer")) {
return "IE";
} else if (org.apache.commons.lang3.StringUtils.containsIgnoreCase (
browser_name, "firefox")) {
"FF"를 반환;
} else if (org.apache.commons.lang3.StringUtils.containsIgnoreCase (
browser_name, "chrome")) {
"CH"를 반환;
} else if (org.apache.commons.lang3.StringUtils.containsIgnoreCase (
browser_name, "safari")) {
"SF"를 반환;
} else {
NA "를 반환하십시오.
}
}
}
사용자 자격 증명 및 저장 프로 시저가있는 MSSQL 데이터베이스 연결 속성 파일
########### dbConnect.properties ############
dbDriver = com.microsoft.sqlserver.jdbc.SQLServerDriver
dbURL = jdbc : sqlserver : // YOURSERVERURL; 데이터베이스 = 데이터베이스, 사용자 = 사용자 이름, 암호 = 암호
SPSql = {STOREPROCEDURE (?, ?, ?, ?, ?, ?, ?, ?)} 호출
데이터베이스에 저장하려면이 예제에서 이미 작성된 저장 프로시 듀어와 데이터베이스 연결 및 저장 프로시 듀어에 대한 모든 데이터가 특성 파일에 나열되어 있어야합니다.
FF (Firefox), CH (Chrome) 등 2 자 형식의 짧은 형식으로 변환하는 브라우저 이름. Internet Explorer 버전 번호를 포함하여 프로그래밍 방식으로 브라우저 버전을 찾을 수도 있습니다. 이 스크립트는 Internet Explorer 버전 8, 9, 10, 11를 지원합니다.