Вызов webelement второй раз в Page Object с шаблоном дизайна Page Factory дает исключение устаревшего элемента - PullRequest
0 голосов
/ 18 октября 2018

У нас есть структура пользовательского интерфейса с шаблонами Page Object и Page Factory.В одном из моих классов Page Object я определил webelement и вызвал его.В своем тестовом классе я вызываю этот элемент bebelement один раз, когда он находится на одной странице, и снова вызываю этот элемент webelement, когда он находится на другой странице.Ниже мой код выглядит следующим образом:

PageObjectClass1:

@FindBy(how=How.XPATH, using="//*[contains(text(),'Successfully')]")
@CacheLookup
public WebElement successMsg;

testStepClass:

//on first page 
PageObjectClass1.successMsg.isDisplayed()

//Then I navigate to some other page and again call this webelement

PageObjectClass1.successMsg.isDisplayed();

При повторном вызове веб-драйвера я получаю исключение staleElementException.Этот xpath является общим xpath и будет использоваться на каждой странице.Это определенно присутствует в DOM, поэтому не уверен, почему он дает мне это исключение?Как я могу использовать его, не создавая этот webelement в каждом классе объекта страницы?

Исключение составляет:

org.openqa.selenium.StaleElementReferenceException: устаревшая ссылка на элемент: элемент не прикрепленна страницу документа

1 Ответ

0 голосов
/ 18 октября 2018

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

Java ExpectedConditions (и только в настоящее время только Java) имеют обновленный для ожидания перерисовки элемента вДОМ

(new WebDriverWait(driver, 30)).until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOf(successMsg)));
...