## 🚀 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()`. 

Object result = response.getValue();
    return new Pdf((String) result);
  }
  @Override
  public WebElement findElement(By locator) {
    Require.nonNull("Locator", locator);
    return findElement(this, this, locator);
  }
  WebElement findElement(RemoteWebDriver parent, SearchContext context, By locator) {
    Mechanism mechanism = remotableBys.get(locator.getClass());
    if (mechanism != null) {
      WebElement element = mechanism.findElement(parent, context, locator);
      return massage(parent, context, element, locator);
    }
    
    if (locator instanceof By.Remotable) {
      try {
        WebElement element = Mechanism.REMOTE.findElement(parent, context, locator);
        remotableBys.put(locator.getClass(), Mechanism.REMOTE);
        return massage(parent, context, element, locator);
      } catch (NoSuchElementException e) {
        remotableBys.put(locator.getClass(), Mechanism.REMOTE);
        throw e;
      } catch (InvalidArgumentException e) {
        
      }
    }
    try {
      WebElement element = Mechanism.CONTEXT.findElement(parent, context, locator);
      remotableBys.put(locator.getClass(), Mechanism.CONTEXT);