### Feature and motivation

Currently `Select` methods work even the `option` is disabled. Or `select` is disabled.

I suggest these `selectByFoo` methods should throw an exception. 

### Usage example

```java
new Select(element).selectByVisibleText("fish");
```


### Pull request

see https://github.com/SeleniumHQ/selenium/pull/10814
when(element.getTagName()).thenReturn("select");
    when(element.getDomAttribute("multiple")).thenReturn("false");
    when(element.findElements(xpath1)).thenReturn(emptyList());
    when(element.findElements(xpath2)).thenReturn(Collections.singletonList(firstOption));
    when(firstOption.getText()).thenReturn("foo bar");
    Select select = new Select(element);
    select.selectByVisibleText("foo bar");
    verify(firstOption).click();
  }
  @Test
  public void shouldIndicateWhetherASelectIsMultipleCorrectly() {
    assertThat(selectElementWithMultipleEqualTo("false").isMultiple()).isFalse();
    assertThat(selectElementWithMultipleEqualTo(null).isMultiple()).isFalse();
    assertThat(selectElementWithMultipleEqualTo("true").isMultiple()).isTrue();
    assertThat(selectElementWithMultipleEqualTo("multiple").isMultiple()).isTrue();
  }
  @Test
  public void shouldThrowAnExceptionIfThereAreNoElementsToSelect() {
    final WebElement element = mockSelectWebElement("false");
    when(element.findElements(ArgumentMatchers.any())).thenReturn(emptyList());
    Select select = new Select(element);
    assertThatExceptionOfType(NoSuchElementException.class)
        .isThrownBy(() -> select.selectByIndex(12));
    assertThatExceptionOfType(NoSuchElementException.class)
        .isThrownBy(() -> select.selectByValue("not there"));
    assertThatExceptionOfType(NoSuchElementException.class)
        .isThrownBy(() -> select.selectByVisibleText("also not there"));
  }
}