@Override
public Object invoke(Object proxy, Method method, Object... args) throws Throwable {
if (methodsToSkipLogging.contains(method.getName()))
return Commands.getInstance().execute(proxy, webElementSource, method.getName(), args);
validateAssertionMode(config());
long timeoutMs = getTimeoutMs(method, args);
long pollingIntervalMs = getPollingIntervalMs(method, args);
SelenideLog log = SelenideLogger.beginStep(webElementSource.getSearchCriteria(), method.getName(), args);
try {
Object result = dispatchAndRetry(timeoutMs, pollingIntervalMs, proxy, method, args);
SelenideLogger.commitStep(log, PASS);
return result;
}
catch (Error error) {
Error wrappedError = UIAssertionError.wrap(driver(), error, timeoutMs);
SelenideLogger.commitStep(log, wrappedError);
if (config().assertionMode() == SOFT && methodsForSoftAssertion.contains(method.getName()))
return proxy;
else
throw wrappedError;
}
catch (RuntimeException error) {
SelenideLogger.commitStep(log, error);
throw error;
}
}