Как обрабатывать элемент, который больше не привязан к DOM в объекте страницы?

Я пытаюсь протестировать веб-сайт с помощью объекта страницы. Когда я выполняю свои сценарии, я получаю Элемент больше не привязан к DOM (Selenium :: WebDriver :: Error :: StaleElementReferenceError ) периодически появляется сообщение об ошибке при вызове функции.

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


person KAK    schedule 08.08.2013    source источник


Ответы (3)


Мы тоже столкнулись с той же проблемой в нашем проекте. Один из способов преодолеть это - использовать блок try catch внутри метода, который вызывает эту проблему. Внутри блока catch снова выполните те же строки кода / другой метод. Это решит проблему.

person Vinay    schedule 08.08.2013

Вы получаете это исключение, когда элемент, с которым вы взаимодействуете, был изменен в DOM. Если вы захватываете элемент в объекте WebElement, а затем используете этот объект для выполнения некоторых щелчков / набора текста, и если между ними ссылка на этот элемент изменилась, то используемый вами объект больше не будет ссылаться на правильный локатор. Попробуйте использовать локаторы элементов во время взаимодействия с элементом вместо того, чтобы сначала захватывать его в объекте WebElement, а затем использовать этот объект в дальнейшем.

Например. вместо того, чтобы делать:

WebElement e = driver.findElement(By.id("someID"));
e.click();
.
.
.
e.click();

попробуй использовать :

driver.findElement(by.id("someID")).click();
.
.
.
driver.findElement(by.id("someID")).click();

В противном случае вы можете использовать метод Виная.

person DesertPride    schedule 09.08.2013

Используйте PageFactory для инициализации объектов вашей страницы. Он создаст ленивые прокси для фактического элемента.

public class PageObject {
   @FindBy(id="someID")
   private WebElement someElement;

   public void doSomething() {
      someElement.click();  
   }
}

PageObject po = PageFactory.initElements(driver, PageObject.class);

Если вы не используете @CacheLookup вместе с @FindBy, каждый раз, когда вы используете someElement, он будет искать этот элемент с помощью средства поиска.

person santon    schedule 24.09.2013