import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import java.awt.image.BufferedImage as BufferedImage
import java.nio.file.Files as Files
import java.nio.file.Path as Path
import java.nio.file.Paths as Paths
import javax.imageio.ImageIO as ImageIO
import org.openqa.selenium.WebDriver as WebDriver
import com.kms.katalon.core.configuration.RunConfiguration as RunConfiguration
import com.kms.katalon.core.model.FailureHandling as FailureHandling
import com.kms.katalon.core.webui.driver.DriverFactory as DriverFactory
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import ru.yandex.qatools.ashot.AShot as AShot
import ru.yandex.qatools.ashot.Screenshot as Screenshot
import ru.yandex.qatools.ashot.comparison.ImageDiff as ImageDiff
import ru.yandex.qatools.ashot.comparison.ImageDiffer as ImageDiffer
import ru.yandex.qatools.ashot.shooting.ShootingStrategies as ShootingStrategies
import com.kms.katalon.core.util.KeywordUtil as KeywordUtil
import java.text.DecimalFormat as DecimalFormat
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
import com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords as CucumberKW
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import com.kms.katalon.core.testcase.TestCase as TestCase
import com.kms.katalon.core.testdata.TestData as TestData
import com.kms.katalon.core.testobject.TestObject as TestObject
import com.kms.katalon.core.checkpoint.Checkpoint as Checkpoint
import internal.GlobalVariable as GlobalVariable
import com.kms.katalon.core.logging.KeywordLogger as KeywordLogger
//Default Ashot parameters (Default for Desktop)
int scrollTimeout = 100
int header = 0
int footer = 0
float dpr = 2
def browserName = DriverFactory.getExecutedBrowser().getName()
if (browserName == 'IOS_DRIVER'){
//Ashot parameters if Browser is IOS_DRIVER:
scrollTimeout = 500
header=69
footer=0
dpr=2
}
if (browserName == 'ANDROID_DRIVER'){
//Ashot parameters if Browser is ANDROID_DRIVER:
scrollTimeout = 500
header=0
footer=0
dpr=3
}
File imageFile = resolveScreenshotFile((("$browserName" + '_') + "$fileName") + '.png' //****** Variable ****
)
WebUI.delay(6)
takeEntirePage(DriverFactory.getWebDriver(), imageFile, 500, scrollTimeout, header, footer, dpr)
WebUI.comment(">>> wrote image into ${imageFile.toString()}")
void takeEntirePage(WebDriver webDriver, File file, Integer timeout = 300, scrollTimeout, header, footer, dpr) {
Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportRetina(scrollTimeout, header, footer, dpr)).takeScreenshot(
webDriver)
ImageIO.write(screenshot.getImage(), 'PNG', file)
}
File resolveScreenshotFile(String fileName) {
Path projectDir = Paths.get(RunConfiguration.getProjectDir())
Path reportDir = projectDir.resolve('Screenshots')
Files.createDirectories(reportDir)
Path pngFile = reportDir.resolve(fileName)
return pngFile.toFile()
}
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import java.awt.image.BufferedImage as BufferedImage
import java.nio.file.Files as Files
import java.nio.file.Path as Path
import java.nio.file.Paths as Paths
import javax.imageio.ImageIO as ImageIO
import org.openqa.selenium.WebDriver as WebDriver
import com.kms.katalon.core.configuration.RunConfiguration as RunConfiguration
import com.kms.katalon.core.model.FailureHandling as FailureHandling
import com.kms.katalon.core.webui.driver.DriverFactory as DriverFactory
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import ru.yandex.qatools.ashot.AShot as AShot
import ru.yandex.qatools.ashot.Screenshot as Screenshot
import ru.yandex.qatools.ashot.comparison.ImageDiff as ImageDiff
import ru.yandex.qatools.ashot.comparison.ImageDiffer as ImageDiffer
import ru.yandex.qatools.ashot.shooting.ShootingStrategies as ShootingStrategies
import com.kms.katalon.core.util.KeywordUtil as KeywordUtil
import java.text.DecimalFormat as DecimalFormat
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
import com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords as CucumberKW
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import com.kms.katalon.core.testcase.TestCase as TestCase
import com.kms.katalon.core.testdata.TestData as TestData
import com.kms.katalon.core.testobject.TestObject as TestObject
import com.kms.katalon.core.checkpoint.Checkpoint as Checkpoint
import internal.GlobalVariable as GlobalVariable
import com.kms.katalon.core.logging.KeywordLogger as KeywordLogger
def browserName = DriverFactory.getExecutedBrowser().getName()
File imageFile1 = resolveScreenshotFile((("$browserName" + '_') + "$fileName1") + '.png',"$baseLineImageFolder")
WebUI.delay(6)
File imageFile2 = resolveScreenshotFile((("$browserName" + '_') + "$fileName2") + '.png' ,"$screenShotFolder")
// ---------------------------------------------------------------------------------
// Load images for comparison and Compare
// ---------------------------------------------------------------------------------
BufferedImage bufferedImage1 = ImageIO.read(imageFile1)
BufferedImage bufferedImage2 = ImageIO.read(imageFile2)
Screenshot ScreenshotImage1 = new Screenshot(bufferedImage1)
Screenshot ScreenshotImage2 = new Screenshot(bufferedImage2)
ImageDiff diff = new ImageDiffer().makeDiff(ScreenshotImage1, ScreenshotImage2)
BufferedImage markedImage = diff.getMarkedImage()
DecimalFormat dformat = new DecimalFormat('##0.00')
Double criteriaPercent = Double.parseDouble(acceptableDiff)
Double diffRatioPercent = diffRatioPercent(diff)
if (diffRatioPercent > criteriaPercent) {
KeywordUtil.markFailed("diffRatio=${dformat.format(diffRatioPercent)} exceeds criteria=${criteriaPercent}")
}
// ---------------------------------------------------------------------------------
// Save files for viewing in image2's folder
// ---------------------------------------------------------------------------------
File diffFile = resolveScreenshotFile((("$browserName" + '_') + "$fileName1" + "_" + "$fileName2") + "_imageDiff(${dformat.format(diffRatioPercent)}).png" //****** Variable ****
,"$screenShotFolder")
File copyOfImage1 = resolveScreenshotFile((("$browserName" + '_') + "$fileName1" + "_copy") + ".png","$screenShotFolder")
ImageIO.write(markedImage, 'PNG', diffFile)
ImageIO.write(bufferedImage1, 'PNG', copyOfImage1)
WebUI.comment(">>> wrote the ImageDiff into ${diffFile.toString()}")
// ---------------------------------------------------------------------------------
// Functions that help
// ---------------------------------------------------------------------------------
File resolveScreenshotFile(String fileName, String folderName) {
Path projectDir = Paths.get(RunConfiguration.getProjectDir())
Path reportDir = projectDir.resolve(folderName)
Files.createDirectories(reportDir)
Path pngFile = reportDir.resolve(fileName)
return pngFile.toFile()
}
Double diffRatioPercent(ImageDiff diff) {
boolean hasDiff = diff.hasDiff()
if (!(hasDiff)) {
return 0.0
}
int diffSize = diff.getDiffSize()
int area = diff.getMarkedImage().getWidth() * diff.getMarkedImage().getHeight()
Double diffRatio = (diff.getDiffSize() / area) * 100
return diffRatio
}
No comments:
Post a Comment