Useful Scripts

Take screenshot of entire page:


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()
}


Compare Two Images:


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

Test Automation Examples

My Examples 1) Example of Katalon Studio running with Docker: https://github.com/asokangunanathan/Katalonics Readme: Setup need...