## 🚀 Feature Proposal

I suggest
1. either to add method `getId()` to interface `WebElement`, or
2. to create interface like `HasId` or `HasIdentity` and make `RemoteWebElement` implement it. 

## Motivation

People often cast `WebElement` to `RemoteWebElement` just to call method `getId()`. 
De-facto all implementations of `WebElement` have method `getId()`. 
For me, it's a problem because `RemoteWebElement` is a class, not interface, and therefore I cannot create a proxy object for it in Selenide. I need some interface with method `getId()`. 

private ErrorHandler errorHandler = new ErrorHandler();
  private CommandExecutor executor;
  private Capabilities capabilities;
  private SessionId sessionId;
  private FileDetector fileDetector = new UselessFileDetector();
  private ExecuteMethod executeMethod;
  private JsonToWebElementConverter converter;
  private RemoteKeyboard keyboard;
  private RemoteMouse mouse;
  private Logs remoteLogs;
  private LocalLogs localLogs;
  
  protected RemoteWebDriver() {
    this.capabilities = init(new ImmutableCapabilities());
  }
  private static URL getDefaultServerURL() {
    try {
      return new URL(System.getProperty("webdriver.remote.server", "http:localhost:4444/"));
    } catch (MalformedURLException e) {
      throw new WebDriverException(e);
    }
  }
  public RemoteWebDriver(Capabilities capabilities) {
    this(getDefaultServerURL(),
         Require.nonNull("Capabilities", capabilities));
  }
  public RemoteWebDriver(URL remoteAddress, Capabilities capabilities) {
    this(createTracedExecutorWithTracedHttpClient(Require.nonNull("Server URL", remoteAddress)),
         Require.nonNull("Capabilities", capabilities));
  }