[Resolved] Exception StaleElementReferenceException and NoSuchElementException

Exception StaleElementReferenceException and NoSuchElementException
Собственно в чем разница и зачем нужны оба ?

/documentation/webdriver/troubleshooting/errors/ это я читал .
и докучи что за Should you wish to head down this route, the simplest hook point is to call setElementConverter.

setElementConverter - этим кто-то пользовался ?

Представим, что у вас есть инпут, который отсылает какую-то информацию на сервер по смене фокуса, при этом, обновляя часть имеющейся формы (включая сам инпут).

Как в старые добрые времена, вы наверняка захотите вначале его очистить перед непосредственным заполнением. Т.е. технически цепочка выглядит следующим образом: findElement -> clear -> sendKeys.

Все бы ничего, но ввиду баговости метода clear, который зовет событие onChange, ваш инпут после очистки попытается обновить часть формы, не дожидаясь ввода текста. Т.е. в данном конкретном примере ваша цепочка прервется на sendKeys со StaleElementReferenceException, т.к. вы попытаетесь обратиться к элементу, который в данный момент обновляется, т.е. его состояние не позволяет вам с ним взаимодействовать прямо сию минуту, надо подождать, пока он вновь вернется в DOM.

Если бы элемента не было вообще на форме до попытки любого взаимодействия с ним, то вы бы получили NoSuchElementException при обращении к findElement.

Как пишет один из selenium коммитеров:

Please ignore the suggestion / recommendation for setElementConverter… that’s a bit old of documentation, it does exist still, just not really recommended. Typically you can attempt to retry the find as an alternative to this.

Что по сути схоже с механизмом явных ожиданий.

1 лайк