带有Katalon和Chrome无头模式的屏幕截图 [英] Screenshot with Katalon and Chrome headless mode
问题描述
我正在使用以下代码在我的Katalon Studio脚本中截取警告和错误消息的屏幕截图:
I'm using the following code to take screenshots of warning and error messages in my Katalon Studio scripts:
import ru.yandex.qatools.ashot.AShot
import ru.yandex.qatools.ashot.Screenshot
import ru.yandex.qatools.ashot.coordinates.*
import ru.yandex.qatools.ashot.cropper.*
public class ScreenshotHelper {
public void takeWebElementScreenshot(TestObject object) {
WebElement element = WebUiCommonHelper.findWebElement(object, 20)
WebDriver driver = DriverFactory.getWebDriver();
String fileName = new SimpleDateFormat("yyyyMMddHHmmSSS").format(new Date())
Screenshot screenshot = new AShot().takeScreenshot(driver, element)
ImageIO.write(screenshot.getImage(),'PNG', new File(System.getProperty("user.dir")+"/ErrorScreenshots/ElementScreenshot"+"_"+fileName+".png"))
}
}
此方法从同一类的另一个方法调用:
This method gets called from another method of the same class:
public void catchNotyMessage(){
TestObject noty_warning = WebUI.modifyObjectProperty(findTestObject("DUMMY"), 'css', 'equals', 'div.noty_type_warning', true)
TestObject noty_error = WebUI.modifyObjectProperty(findTestObject("DUMMY"), 'css', 'equals', 'div.noty_type_error', true)
if (WebUI.verifyElementPresent(noty_error, 1, FailureHandling.OPTIONAL)){
this.takeWebElementScreenshot(noty_error)
}
else if (WebUI.verifyElementPresent(noty_warning, 1, FailureHandling.OPTIONAL)){
this.takeWebElementScreenshot(noty_warning)
}
}
它工作正常,在正常模式下使用Katalon时截取了屏幕截图.
And it works fine, the screenshot gets taken when using Katalon in normal mode.
但是,当我以无头模式运行脚本时,会收到以下警告:
However, when I run the script in headless mode, I get the following warning:
WARNING com.kms.katalon.core.webui.exception.WebElementNotFoundException: Web element with id: 'Object Repository/DUMMY' located by 'By.cssSelector: div.noty_type_error' not found
即使该元素应该存在.并且测试失败,并显示java.lang.NullPointerException
.
even though the element should be present. And the test fails with the java.lang.NullPointerException
.
是因为无头的死刑吗?而我该如何解决呢?
Is is because of the headless execution? And how can I fix this?
推荐答案
浏览 java.io.FileNotFoundException:系统找不到指定的文件,,我终于弄清楚了.
After looking through https://docs.oracle.com/javase/tutorial/2d/images/saveimage.html, java.io.FileNotFoundException: the system cannot find the file specified, Chrome Headless Doesn't work and Java "user.dir" property - what exactly does it mean?, i finally figured it out.
问题在于,当在无头模式下通过命令行执行测试时,System.getProperty("user.dir")
会发生变化.因此,此代码有效:
The problem is that System.getProperty("user.dir")
changes when the test gets executed via command line in headless mode. So, this code works:
public void takeWebElementScreenshot(TestObject object) {
WebElement element = WebUiCommonHelper.findWebElement(object, 20)
WebDriver driver = DriverFactory.getWebDriver();
String fileName = new SimpleDateFormat("yyyyMMddHHmmSSS").format(new Date())
Screenshot screenshot = new AShot().takeScreenshot(driver, element)
try {
if (DriverFactory.getExecutedBrowser().getName()=='HEADLESS_DRIVER'){
ImageIO.write(screenshot.getImage(),'PNG', new File("C:/Users/path_to_working_directory/ErrorScreenshots/HeadlessElementScreenshot"+"_"+fileName+".png"))
} else {
ImageIO.write(screenshot.getImage(),'PNG', new File(System.getProperty("user.dir")+"/ErrorScreenshots/ElementScreenshot"+"_"+fileName+".png"))
}
} catch (Exception e) {
e.printStackTrace()
}
}
这篇关于带有Katalon和Chrome无头模式的屏幕截图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!