wait.until(ExpectedConditions.elementToBeClickable (By.id("foo")));
Нижние строки являются точным эквивалентом приведенного выше Java-кода,
wait.until { driver.find_element(id: "foo").enabled? }
Фактом является то, что метод elementToBeClickable в Java вводит в заблуждение, фактически он проверяет включенное состояние элемента.
См. Реализацию elementToBeClickable в ExpectedContions.java,
/**
* An expectation for checking an element is visible and enabled such that you can click it.
*
* @param locator used to find the element
* @return the WebElement once it is located and clickable (visible and enabled)
*/
public static ExpectedCondition<WebElement> elementToBeClickable(final By locator) {
return new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
WebElement element = visibilityOfElementLocated(locator).apply(driver);
try {
if (element != null && element.isEnabled()) {
return element;
}
return null;
} catch (StaleElementReferenceException e) {
return null;
}
}
@Override
public String toString() {
return "element to be clickable: " + locator;
}
};
}
. См. this в github.