Почему ожидаемые условия clickable не выполняют click()?

avatar
nuzooo
8 августа 2021 в 18:41
97
1
0

Почему ожидаемые условия Selenium waitForElementToBeClickable не поставляются со встроенным методом click()?
Selenium знает, что я жду, пока элемент станет кликабельным, так почему я должен выполнять дополнительное действие driver.click() над этим элементом?
Они могли бы, по крайней мере, добавить туда какой-то флаг, чтобы он выполнял или не выполнял click() при выполнении ожидаемого условия.

Источник

Ответы (1)

avatar
pburgr
9 августа 2021 в 11:16
3

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();
    }
}
nuzooo
10 августа 2021 в 04:56
0

Еще почему не нажимается? зачем мне нужен WebElement , я хочу щелкнуть по нему в конце концов

pburgr
10 августа 2021 в 06:39
0

Если ваш тест не выполняет щелчок, генерирует ли ваш код какое-либо исключение? Или в чем проблема?

nuzooo
10 августа 2021 в 15:50
0

Ошибки нет, вопрос в том, чтобы уточнить, почему ребята из селена не добавили click() в waitForElementToBeClickable, если так или иначе, то, что я хочу сделать, это щелкнуть элемент в то время, когда он будет кликабельным

pburgr
11 августа 2021 в 12:12
0

Дело не только в этом случае. Вы можете наблюдать подобное «отсутствие» void во многих других API (исходный код был бы чрезвычайно и излишне большим). Вы (с помощью сообщества SO) должны иметь возможность создавать собственные методы, которые вы можете многократно использовать даже в будущих проектах.

nuzooo
11 августа 2021 в 19:52
0

Вопрос все еще на месте, почему мне оставляют способ завершить метод?

pburgr
12 августа 2021 в 06:28
0

Представьте, сколько современных методов возвращает объект WebElement. Если бы каждый из них реализовал метод щелчка, размер пакета значительно увеличился бы. И дело не только в щелчке.

Prophet
13 августа 2021 в 15:09
0

@pburgr, ты не понял вопроса. Автор спросил о методе ожидаемых условий waitForElementToBeClickable. Ни о каком другом ожидаемом состоянии. Этот метод ожидает, пока элемент станет кликабельным. Почему мы ждем, когда элемент станет кликабельным? Не быть представленным или быть видимым, но кликабельным? Чтобы успешно нажать на нее. Итак, после выполнения условия waitForElementToBeClickable мы собираемся нажать на этот элемент! Не извлекайте его текст и не выполняйте никаких других действий.

Prophet
13 августа 2021 в 15:11
0

Таким образом, было бы просто здравым смыслом добавить встроенный click() внутри метода waitForElementToBeClickable. или, как минимум, дать перегруженному методу получение еще 1 атрибута, какого-нибудь логического флага, включить или исключить встроенный клик туда! Вот о чем этот вопрос.

nuzooo
13 августа 2021 в 15:19
0

@pburgr это именно то, что написал Пророк, теперь это более объяснимо?

pburgr
17 августа 2021 в 06:04
0

Я вижу, то же самое может быть для упомянутого извлечения данных/свойства .getRect(), .getAttribute(String attributeName) после того, как элемент присутствует или виден. Возможно, они появятся в следующих версиях. Я использую для создания или изменения методов для необходимых мне функций (если они недоступны из другого источника). Так я многому научился.