【问题标题】:Screenshot with Katalon and Chrome headless modeKatalon 和 Chrome 无头模式的屏幕截图
【发布时间】:2018-07-04 08:02:55
【问题描述】:

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

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

这个方法被同一个类的另一个方法调用:

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 时会截取屏幕截图。

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

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

是因为无头执行吗?我该如何解决这个问题?

【问题讨论】:

    标签: groovy screenshot google-chrome-headless katalon-studio


    【解决方案1】:

    您必须将参数设置为无头 chrome:

    【讨论】:

    • 已经设置好了。其他测试用例按预期工作,只是这个失败了。我的怀疑是因为它试图在无头模式下截屏。
    【解决方案2】:

    看了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") 在无头模式下通过命令行 执行测试时发生变化。所以,这段代码有效:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 2019-01-28
      • 2012-07-30
      • 2012-12-20
      • 2023-01-13
      • 1970-01-01
      相关资源
      最近更新 更多