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

@Test
  public void getCurrentUrl() {
    verifyFunction(WebDriver::getCurrentUrl, "http:selenium2.ru/");
  }
  @Test
  public void getTitle() {
    verifyFunction(WebDriver::getTitle, "test");
  }
  @Test
  public void getPageSource() {
    verifyFunction(WebDriver::getPageSource, "test");
  }
  @Test
  public void findElement() {
    final WebElement found = mock(WebElement.class);
    verifyDecoratingFunction($ -> $.findElement(By.id("test")), found, WebElement::click);
  }
  @Test
  public void findElementNotFound() {
    Fixture fixture = new Fixture();
    when(fixture.original.findElement(any())).thenThrow(NoSuchElementException.class);
    assertThatExceptionOfType(NoSuchElementException.class)
      .isThrownBy(() -> fixture.decorated.findElement(By.id("test")));
  }
  @Test
  public void findElements() {
    Fixture fixture = new Fixture();
    WebElement originalElement1 = mock(WebElement.class);
    WebElement originalElement2 = mock(WebElement.class);
    List<WebElement> list = new ArrayList<>();