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

},
    REMOTE {
      @Override
      WebElement findElement(RemoteWebDriver parent, SearchContext context, By locator) {
        String commandName;
        Map<String, Object> params = new HashMap<>();
        By.Remotable.Parameters fromLocator = ((By.Remotable) locator).getRemoteParameters();
        params.put("using", fromLocator.using());
        params.put("value", fromLocator.value());
        if (context instanceof RemoteWebElement) {
          commandName = DriverCommand.FIND_CHILD_ELEMENT;
          params.put("id", ((RemoteWebElement) context).getId());
        } else {
          commandName = DriverCommand.FIND_ELEMENT;
        }
        Response response = parent.execute(new CommandPayload(commandName, params));
        Object value = response.getValue();
        if (value == null) {
          throw new NoSuchElementException("Unable to find element with locator " + locator);
        }
        try {
          return (WebElement) value;
        } catch (ClassCastException ex) {
          throw new WebDriverException(
            "Returned value cannot be converted to WebElement: " + value, ex);
        }
      }
      @Override
      List<WebElement> findElements(RemoteWebDriver parent, SearchContext context, By locator) {
        String commandName;