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

handles.add("test");
    verifyFunction(WebDriver::getWindowHandles, handles);
  }
  @Test
  public void switchTo() {
    final WebDriver.TargetLocator target = mock(WebDriver.TargetLocator.class);
    verifyDecoratingFunction(WebDriver::switchTo, target, WebDriver.TargetLocator::defaultContent);
  }
  @Test
  public void navigate() {
    final WebDriver.Navigation navigation = mock(WebDriver.Navigation.class);
    verifyDecoratingFunction(WebDriver::navigate, navigation, WebDriver.Navigation::refresh);
  }
  @Test
  public void manage() {
    final WebDriver.Options options = mock(WebDriver.Options.class);
    verifyDecoratingFunction(WebDriver::manage, options, WebDriver.Options::deleteAllCookies);
  }
  @Test
  public void executeScriptThatReturnsAPrimitive() {
    verifyFunction($ -> ((JavascriptExecutor) $).executeScript("..."), 1);
  }
  @Test
  public void executeScriptThatReturnsAnElement() {
    WebElement element = mock(WebElement.class);
    verifyDecoratingFunction($ -> (WebElement) ((JavascriptExecutor) $).executeScript("..."), element, WebElement::click);
  }
  @Test
  public void executeAsyncScriptThatReturnsAPrimitive() {
    verifyFunction($ -> ((JavascriptExecutor) $).executeAsyncScript("..."), 1);