Снимок экрана с режимом безглавой связи Katalon и Chrome - PullRequest
0 голосов
/ 04 июля 2018

Я использую следующий код для создания снимков экрана с предупреждениями и сообщениями об ошибках в моих сценариях 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 ]

0 голосов
/ 12 июля 2018

После просмотра https://docs.oracle.com/javase/tutorial/2d/images/saveimage.html, java.io.FileNotFoundException: система не может найти указанный файл , Chrome Headless Не работает и Java " user.dir "свойство - что именно это значит? , я наконец понял это.

Проблема в том, что 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()
    }
}
0 голосов
/ 04 июля 2018

Вы должны установить параметр для вашего безголового хрома:

enter image description here

...