Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как дождаться присутсвия атрибута у элемента?

java
webdriver
selenium
Теги: #<Tag:0x00007fedb9a6e510> #<Tag:0x00007fedb9a6e2e0> #<Tag:0x00007fedb9a6e1a0>

(Артем Хоружий) #1

Привет.
Подскажите, как дождаться присутствия аттрибута у элемента?


(Dmitry Astanin) #2

Если селенид, то можно через conditions.

Если голый драйвер, то ретраер какой нибудь написать. Ну т.е. чекать в цикле на протяжении какого либо времени раз в какое либо время, что аттрибут появился.


(Артем Хоружий) #3

А может есть фрагмент кода? Я так и представляю.


(Maxim Andryushchenkov) #4

Могу на Python. А вы можете переписать себе

def wait_for(condition, timeout=300, interval=5, error_message=None):
    raise_time = int(time() + timeout)
    while int(time()) < raise_time:
        if condition():
            return
        sleep(interval)
    raise TimeoutError(error_message)

condition - лямбда


(Dmitry Astanin) #5

Можно awaitility заюзать, дабы покрасивше и более модно было))

Код писать сейчас не оч удобно глянь тут много примеров

ну а как аттрибут получить тут - https://stackoverflow.com/questions/20645013/how-to-verify-an-attribute-is-present-in-an-element-using-selenium-webdriver


(Остап Олексин) #6

Используйте explicit wait:

new WebDriverWait(driver, 10).until(ExpectedConditions.attributeToBeNotEmpty(webElement, "attribute name"));

(asolntsev) #7

Используйте Selenide. Решение в одну строку:

$("#elem").shouldHave(attribute("attrName"));