Java 및 Selenium Webriver를 사용하여 스크린 샷을 저장하고 MSSQL 데이터베이스에 저장하는 방법



이것은 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를 지원합니다.

이전 기사

iCloud 주소록을 Google에 직접 가져 오는 방법은 무엇입니까?

iCloud 주소록을 Google에 직접 가져 오는 방법은 무엇입니까?

페이스 북 지저귀다 Pinterest WhatsApp 전보 Apple의 생태계는 꽤 고립되어있어서 안드로이드 나 다른 플랫폼으로 데이터를 전송하기가 쉽지 않습니다. iPhone 사용자이고 iCloud 연락처를 Google 연락처로 전송하려는 경우 솔루션이 예상대로 직접 작동하지 않을 수 있습니다. iPhone 사용자는 iPhone 설정에서 Google과 연락처를 동기화 할 수 있으며, 이 절차는 대부분 버그입니다. 그렇다면 iPhone에서 연락처 또는 백업 연락처를 Gmail로 내보내려면 어떻게해야합니까? 글쎄, 구글은이 절차를 아이폰 사용자들에게 쉽게 만들어 준다. Google에 iCloud 주소록을 전송하고 몇 가...

다음 기사

무료로 국제 전화를 걸 수있는 7 가지 최고의 iPhone 앱

무료로 국제 전화를 걸 수있는 7 가지 최고의 iPhone 앱

언제 어디서나이 앱은 가족 및 친구와 연락 할 수있는 동행자입니다. 가족과 떨어져 여행하는 동안 가족에게 전화하는 로밍 요금은 없습니다. 이 앱의 대부분은 WiFi / 3G / 4G에서 작동 할 수 있습니다. 이 앱을 통해 전화를 걸면 월간 분 또는 로밍 요금을 사용하지 않습니다. 여기서는 7 가지 iPhone 응용 프로그램을 나열하여 일상 생활에서 대부분을 국내 및 국제 전화의 대체 호출 방법으로 사용합니다. 이 모든 iPhone 응용 프로그램은 Wi-Fi / 3G / 4G 네트워크와 함께 통화 할 수 있습니다. 화상 통화 iPod / iPhone / iPad / MAC 용 FaceTime을 사용하면 iPad 2, iPhone 4,...