Почему ожидаемые условия Selenium waitForElementToBeClickable
не поставляются со встроенным методом click()
?
Selenium знает, что я жду, пока элемент станет кликабельным, так почему я должен выполнять дополнительное действие driver.click()
над этим элементом?
Они могли бы, по крайней мере, добавить туда какой-то флаг, чтобы он выполнял или не выполнял click()
при выполнении ожидаемого условия.
Почему ожидаемые условия clickable не выполняют click()?
8 августа 2021 в 18:41
97
1
Ответы (1)
9 августа 2021 в 11:16
org.openqa.selenium.support.ui.ExpectedConditions.elementToBeClickable(By locator)
возвращает объект WebElement
, это не пустота. Вы можете добавить click()
в custom void:
public static void waitForClickableAndClick(WebDriver driver, By by, int waitSeconds) {
try {
new WebDriverWait(driver, waitSeconds).until(ExpectedConditions.elementToBeClickable(by)).click();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
Еще почему не нажимается? зачем мне нужен WebElement , я хочу щелкнуть по нему в конце концов
Если ваш тест не выполняет щелчок, генерирует ли ваш код какое-либо исключение? Или в чем проблема?
Ошибки нет, вопрос в том, чтобы уточнить, почему ребята из селена не добавили
click()
вwaitForElementToBeClickable
, если так или иначе, то, что я хочу сделать, это щелкнуть элемент в то время, когда он будет кликабельнымДело не только в этом случае. Вы можете наблюдать подобное «отсутствие» void во многих других API (исходный код был бы чрезвычайно и излишне большим). Вы (с помощью сообщества SO) должны иметь возможность создавать собственные методы, которые вы можете многократно использовать даже в будущих проектах.
Вопрос все еще на месте, почему мне оставляют способ завершить метод?
Представьте, сколько современных методов возвращает объект WebElement. Если бы каждый из них реализовал метод щелчка, размер пакета значительно увеличился бы. И дело не только в щелчке.
@pburgr, ты не понял вопроса. Автор спросил о методе ожидаемых условий
waitForElementToBeClickable
. Ни о каком другом ожидаемом состоянии. Этот метод ожидает, пока элемент станет кликабельным. Почему мы ждем, когда элемент станет кликабельным? Не быть представленным или быть видимым, но кликабельным? Чтобы успешно нажать на нее. Итак, после выполнения условияwaitForElementToBeClickable
мы собираемся нажать на этот элемент! Не извлекайте его текст и не выполняйте никаких других действий.Таким образом, было бы просто здравым смыслом добавить встроенный
click()
внутри методаwaitForElementToBeClickable
. или, как минимум, дать перегруженному методу получение еще 1 атрибута, какого-нибудь логического флага, включить или исключить встроенный клик туда! Вот о чем этот вопрос.@pburgr это именно то, что написал Пророк, теперь это более объяснимо?
Я вижу, то же самое может быть для упомянутого извлечения данных/свойства
.getRect()
,.getAttribute(String attributeName)
после того, как элемент присутствует или виден. Возможно, они появятся в следующих версиях. Я использую для создания или изменения методов для необходимых мне функций (если они недоступны из другого источника). Так я многому научился.