代码之家  ›  专栏  ›  技术社区  ›  Mate MrÅ¡e

使用katalon和chrome无头模式的屏幕截图

  •  1
  • Mate MrÅ¡e  · 技术社区  · 6 年前

    我正在使用以下代码在我的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 是的。

    是因为无头处决?我该怎么解决?

    2 回复  |  直到 6 年前
        1
  •  1
  •   JanZ    6 年前

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

    enter image description here

        2
  •  1
  •   Mate MrÅ¡e    6 年前

    看完之后 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 Java "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()
        }
    }