All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.applitools.eyes.selenium.CommandExecutor Maven / Gradle / Ivy

package com.applitools.eyes.selenium;

import java.util.List;
import java.util.Map;
import java.util.UUID;


import com.applitools.eyes.EyesException;
import com.applitools.eyes.Region;
import com.applitools.eyes.SyncTaskListener;
import com.applitools.eyes.locators.TextRegion;
import com.applitools.eyes.selenium.universal.dto.CheckEyes;
import com.applitools.eyes.selenium.universal.dto.CheckSettingsDto;
import com.applitools.eyes.selenium.universal.dto.Command;
import com.applitools.eyes.selenium.universal.dto.ConfigurationDto;
import com.applitools.eyes.selenium.universal.dto.DriverDto;
import com.applitools.eyes.selenium.universal.dto.EventDto;
import com.applitools.eyes.selenium.universal.dto.ExtractTextDto;
import com.applitools.eyes.selenium.universal.dto.ExtractTextRegionsDto;
import com.applitools.eyes.selenium.universal.dto.LocateDto;
import com.applitools.eyes.selenium.universal.dto.MakeManager;
import com.applitools.eyes.selenium.universal.dto.MakeSdk;
import com.applitools.eyes.selenium.universal.dto.MatchResultDto;
import com.applitools.eyes.selenium.universal.dto.OCRExtractSettingsDto;
import com.applitools.eyes.selenium.universal.dto.OCRSearchSettingsDto;
import com.applitools.eyes.selenium.universal.dto.OpenEyes;
import com.applitools.eyes.selenium.universal.dto.RectangleSizeDto;
import com.applitools.eyes.selenium.universal.dto.RequestDto;
import com.applitools.eyes.selenium.universal.dto.ResponseDto;
import com.applitools.eyes.selenium.universal.dto.TestResultsSummaryDto;
import com.applitools.eyes.selenium.universal.dto.VisualLocatorSettingsDto;
import com.applitools.eyes.selenium.universal.dto.request.CommandCloseAllEyesRequestDto;
import com.applitools.eyes.selenium.universal.dto.request.CommandCloseManagerRequestDto;
import com.applitools.eyes.selenium.universal.dto.request.CommandCloseRequestDto;
import com.applitools.eyes.selenium.universal.dto.request.CommandGetViewportSizeRequestDto;
import com.applitools.eyes.selenium.universal.dto.response.CommandCloseResponseDto;
import com.applitools.utils.GeneralUtils;
import org.openqa.selenium.StaleElementReferenceException;

/**
 * command executor
 */
public class CommandExecutor {

  private static USDKConnection connection;
  private static volatile CommandExecutor instance;

  public static CommandExecutor getInstance(String name, String version) {
    if (instance == null) {
      synchronized (CommandExecutor.class) {
        if (instance == null) {
          instance = new CommandExecutor(name, version);
        }
      }
    }
    return instance;
  }

  private CommandExecutor(String name, String version) {
    connection = new USDKConnection();
    connection.init();
    makeSdk(name, version, GeneralUtils.getPropertyString("user.dir"), "webdriver");
  }

  public void makeSdk(String name, String version, String cwd, String protocol) {
    EventDto request = new EventDto<>();
    MakeSdk makeSdk = new MakeSdk(name, version, cwd, protocol);
    request.setName("Core.makeSDK");
    request.setPayload(makeSdk);
    checkedCommand(request, false);
  }

  public Reference coreMakeManager(String type, Integer concurrency, Boolean isLegacy) {
    RequestDto request = new RequestDto<>();
    request.setName("Core.makeManager");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new MakeManager(type, concurrency, isLegacy));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto response = (ResponseDto) syncTaskListener.get();
    if (response != null && response.getPayload().getError() != null) {
      String message = response.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
    return response.getPayload().getResult();
  }

  public Reference managerOpenEyes(Reference ref, DriverDto driverDto, ConfigurationDto config) {
    RequestDto request = new RequestDto<>();
    request.setName("EyesManager.openEyes");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new OpenEyes(ref, driverDto, config));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto referenceResponseDto = (ResponseDto) syncTaskListener.get();

    if (referenceResponseDto != null && referenceResponseDto.getPayload().getError() != null) {
      String message = referenceResponseDto.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
    return referenceResponseDto.getPayload().getResult();
  }

  public void eyesCheck(Reference eyesRef, CheckSettingsDto settings, ConfigurationDto config) {
    RequestDto request = new RequestDto<>();
    request.setName("Eyes.check");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new CheckEyes(eyesRef, settings, config));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto responseDto = (ResponseDto) syncTaskListener.get();
    if (responseDto != null && responseDto.getPayload().getError() != null) {
      String message = responseDto.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
  }

  public Map> locate(Reference eyesRef, VisualLocatorSettingsDto locatorSettingsDto, ConfigurationDto config) {
    RequestDto request = new RequestDto<>();
    request.setName("Eyes.locate");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new LocateDto(eyesRef, locatorSettingsDto, config));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto>> locateResponse = (ResponseDto>>) syncTaskListener.get();
    if (locateResponse != null && locateResponse.getPayload().getError() != null) {
      String message = locateResponse.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
    return locateResponse.getPayload().getResult();
  }

  public Map> extractTextRegions(Reference eyesRef, OCRSearchSettingsDto searchSettingsDto, ConfigurationDto config) {
    RequestDto request = new RequestDto<>();
    request.setName("Eyes.extractTextRegions");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new ExtractTextRegionsDto(eyesRef, searchSettingsDto, config));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto>> extractTextRegionsResponse = (ResponseDto>>) syncTaskListener.get();
    if (extractTextRegionsResponse != null && extractTextRegionsResponse.getPayload().getError() != null) {
      String message = extractTextRegionsResponse.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
    return extractTextRegionsResponse.getPayload().getResult();

  }

  public List extractText(Reference eyesRef, List extractSettingsDtoList, ConfigurationDto config) {
    RequestDto request = new RequestDto<>();
    request.setName("Eyes.extractText");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new ExtractTextDto(eyesRef, extractSettingsDtoList, config));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto> responseDto = (ResponseDto>) syncTaskListener.get();
    if (responseDto != null && responseDto.getPayload().getError() != null) {
      String message = responseDto.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
    return responseDto.getPayload().getResult();
  }

  public List close(Reference eyesRef, boolean waitResult) {
    RequestDto request = new RequestDto<>();
    request.setName("Eyes.close");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new CommandCloseRequestDto(eyesRef));
    SyncTaskListener syncTaskListener = checkedCommand(request, waitResult);
    if (!waitResult) {
      return null;
    }
    ResponseDto> closeResponse = (ResponseDto>) syncTaskListener.get();
    if (closeResponse != null && closeResponse.getPayload() != null && closeResponse.getPayload().getError() != null) {
      String message = closeResponse.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }

    return closeResponse.getPayload().getResult();
  }

  public List abort(Reference eyesRef, boolean waitResult) {
    RequestDto request = new RequestDto<>();
    request.setName("Eyes.abort");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new CommandCloseRequestDto(eyesRef));
    SyncTaskListener syncTaskListener = checkedCommand(request, waitResult);
    if (!waitResult) {
      return null;
    }
    ResponseDto> closeResponse = (ResponseDto>) syncTaskListener.get();
    if (closeResponse != null && closeResponse.getPayload().getError() != null) {
      String message = closeResponse.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
    return closeResponse.getPayload().getResult();
  }

  public static RectangleSizeDto getViewportSize(DriverDto driver) {
    RequestDto request = new RequestDto<>();
    request.setName("Core.getViewportSize");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new CommandGetViewportSizeRequestDto(driver));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto getViewportSizeResponse = (ResponseDto) syncTaskListener.get();
    return getViewportSizeResponse.getPayload().getResult();
  }

  public List closeAllEyes(Reference managerRef) {
    RequestDto request = new RequestDto<>();
    request.setName("EyesManager.closeAllEyes");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new CommandCloseAllEyesRequestDto(managerRef));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto> closeResponse = (ResponseDto>) syncTaskListener.get();
    if (closeResponse != null && closeResponse.getPayload().getError() != null) {
      String message = closeResponse.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
    return closeResponse.getPayload().getResult();
  }

  public TestResultsSummaryDto closeManager(Reference managerRef, Boolean throwError) {
    RequestDto request = new RequestDto<>();
    request.setName("EyesManager.closeManager");
    request.setKey(UUID.randomUUID().toString());
    request.setPayload(new CommandCloseManagerRequestDto(managerRef, throwError));
    SyncTaskListener syncTaskListener = checkedCommand(request, true);
    ResponseDto closeResponse = (ResponseDto) syncTaskListener.get();
    if (closeResponse != null && closeResponse.getPayload().getError() != null) {
      String message = closeResponse.getPayload().getError().getMessage();
      if (message != null && message.contains("stale element reference")) {
        throw new StaleElementReferenceException(message);
      }
      throw new EyesException(message);
    }
    return closeResponse.getPayload().getResult();
  }


  public static SyncTaskListener checkedCommand(Command command, boolean waitResult) {
    try {
      return connection.executeCommand(command, waitResult);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy