首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Katalon和Chrome无头模式的截图

带有Katalon和Chrome无头模式的截图
EN

Stack Overflow用户
提问于 2018-07-04 08:02:55
回答 2查看 1.9K关注 0票数 1

我使用以下代码在Katalon Studio脚本中获取警告和错误消息的屏幕截图:

代码语言:javascript
复制
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"))
  }
}

从同一个类的另一个方法调用此方法:

代码语言:javascript
复制
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时拍摄的。

但是,当我以无头模式运行脚本时,会收到以下警告:

代码语言:javascript
复制
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测试失败。

是因为无头处决吗?我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-12 13:09:04

在浏览了https://docs.oracle.com/javase/tutorial/2d/images/saveimage.htmljava.io.FileNotFoundException: the system cannot find the file specifiedChrome Headless Doesn't workJava "user.dir" property - what exactly does it mean?之后,我终于找到了答案。

问题是,当测试在无头模式下通过命令行执行时,System.getProperty("user.dir")会发生变化。因此,此代码工作如下:

代码语言:javascript
复制
    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()
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-07-04 10:48:32

必须将参数设置为无头铬:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51168671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档