33import com .zebrunner .agent .core .config .ConfigurationHolder ;
44import com .zebrunner .agent .core .registrar .TestSessionRegistrar ;
55import com .zebrunner .agent .core .registrar .descriptor .SessionStartDescriptor ;
6+ import lombok .Data ;
7+ import lombok .NoArgsConstructor ;
8+ import lombok .RequiredArgsConstructor ;
69import lombok .extern .slf4j .Slf4j ;
710import net .bytebuddy .implementation .bind .annotation .Argument ;
811import net .bytebuddy .implementation .bind .annotation .RuntimeType ;
2124import java .net .URISyntaxException ;
2225import java .net .URL ;
2326import java .util .Arrays ;
27+ import java .util .Objects ;
28+ import java .util .function .Consumer ;
2429
2530@ Slf4j
2631public class StartSessionInterceptor {
2732
2833 private static final TestSessionRegistrar REGISTRAR = TestSessionRegistrar .getInstance ();
2934 private static final CapabilitiesCustomizerChain CAPABILITIES_CUSTOMIZER_CHAIN = CapabilitiesCustomizerChain .getInstance ();
35+ private static final ThreadLocal <Consumer <SessionRegisterDescriptor >> SESSION_REGISTER_DESCRIPTOR_CONSUMER = new ThreadLocal <>();
36+
37+ public static void setSessionRegisterConsumer (Consumer <SessionRegisterDescriptor > consumer ) {
38+ SESSION_REGISTER_DESCRIPTOR_CONSUMER .set (consumer );
39+ }
3040
3141 @ RuntimeType
3242 public static void onSessionStart (@ This RemoteWebDriver driver ,
@@ -37,7 +47,9 @@ public static void onSessionStart(@This RemoteWebDriver driver,
3747 capabilities = customizeCapabilities (methodInvocationProxy , capabilities );
3848 }
3949
40- SessionStartDescriptor startDescriptor = SessionStartDescriptor .initiatedWith (capabilities .asMap ());
50+ SessionRegisterDescriptor sessionRegisterDescriptor = new SessionRegisterDescriptor ();
51+ sessionRegisterDescriptor .setSessionStartDescriptor (SessionStartDescriptor .initiatedWith (capabilities .asMap ()));
52+
4153 try {
4254 methodInvocationProxy .run ();
4355
@@ -61,14 +73,24 @@ public static void onSessionStart(@This RemoteWebDriver driver,
6173 driverCapabilities = (Capabilities ) capabilitiesField .get (driver );
6274 }
6375
64- startDescriptor .successfullyStartedWith (sessionId , driverCapabilities .asMap ());
76+ sessionRegisterDescriptor .getSessionStartDescriptor ()
77+ .successfullyStartedWith (sessionId , driverCapabilities .asMap ());
6578 } catch (Exception e ) {
79+ sessionRegisterDescriptor .setException (e );
6680 StringWriter errorMessageStringWriter = new StringWriter ();
6781 e .printStackTrace (new PrintWriter (errorMessageStringWriter ));
68- startDescriptor .failedToStart (errorMessageStringWriter .toString ());
82+ sessionRegisterDescriptor .getSessionStartDescriptor ()
83+ .failedToStart (errorMessageStringWriter .toString ());
6984 throw e ;
7085 } finally {
71- REGISTRAR .registerStart (startDescriptor );
86+ if (SESSION_REGISTER_DESCRIPTOR_CONSUMER .get () == null ) {
87+ REGISTRAR .registerStart (sessionRegisterDescriptor .getSessionStartDescriptor ());
88+ } else {
89+ Consumer <SessionRegisterDescriptor > consumer = SESSION_REGISTER_DESCRIPTOR_CONSUMER .get ();
90+ SESSION_REGISTER_DESCRIPTOR_CONSUMER .remove ();
91+ sessionRegisterDescriptor .setTestSessionRegistrar (REGISTRAR );
92+ consumer .accept (sessionRegisterDescriptor );
93+ }
7294 }
7395 }
7496
@@ -157,4 +179,12 @@ private static Capabilities customizeCapabilities(Runnable methodInvocationProxy
157179 return capabilities ;
158180 }
159181
182+ @ Data
183+ @ NoArgsConstructor
184+ @ RequiredArgsConstructor
185+ public static class SessionRegisterDescriptor {
186+ private TestSessionRegistrar testSessionRegistrar ;
187+ private SessionStartDescriptor sessionStartDescriptor ;
188+ private Exception exception ;
189+ }
160190}
0 commit comments