SergeyPirogov / video-recorder-java

This library allows easily record video of your UI tests by just putting couple annotations.
http://automation-remarks.com/video-recorder-java/
MIT License
218 stars 65 forks source link

can not customize "video.screen.size" configuration #75

Closed YingLi-gc closed 2 years ago

YingLi-gc commented 2 years ago

I am trying to customize video.screen.size configuration, but it does not work, and VideoRecorder always get System Screen Dimension

my code (in Kotlin) is something like:

System.getProperties().apply {
    setProperty("video.folder", videoFolder.toString())
    setProperty("video.screen.size", "1366x768")
}

and when I debug into method com.automation.remarks.video.recorder.ffmpeg.FFmpegWrapper#getScreenSize:

private String getScreenSize() {
    Dimension dimension = conf().screenSize();
    return dimension.width + "x" + dimension.height;
}

the dimension value get from conf().screenSize() is always System Screen Dimension, instead of my customized setting 1366x768

since conf() returns a proxy which created by org.aeonbits.owner.ConfigFactory so I also debugged into these proxy code, and found something in org.aeonbits.owner.PropertiesInvocationHandler#invoke:

public Object invoke(Object proxy, Method invokedMethod, Object... args) throws Throwable {
    propertiesManager.syncReloadCheck();

    if (isDefault(invokedMethod))
        return invokeDefaultMethod(proxy, invokedMethod, args);

    DelegateMethodHandle delegate = getDelegateMethod(invokedMethod);
    if (delegate != null)
        return delegate.invoke(args);

    return resolveProperty(invokedMethod, args);
}

looks like com.automation.remarks.video.recorder.VideoConfiguration#screenSize is a default method of interface,

@Key("video.screen.size")
default Dimension screenSize() {
  return SystemUtils.getSystemScreenDimension();
}

so PropertiesInvocationHandler always invokes this default method, instead of resolve property value, that's why customized video.screen.size is never be used.

I guess this issue was introduced in this commit: https://github.com/SergeyPirogov/video-recorder-java/commit/05506999456c2863c397553ca674a78e331adf91#diff-203944a2497bdc096cac64c8e238e158746026fe559d3f4bcf0ed24db5dcc523R47-R50

I like to ask, is my investigation result correct? if so, I like to send a PR to fix this issue

YingLi-gc commented 2 years ago

sorry, I am using a wrong github account I will close this issue and create a new one with correct account