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

element is not attached to the page document или как убедится. что элемент удален

java
selenide
testng
Теги: #<Tag:0x00007fedb53cf078> #<Tag:0x00007fedb53cef38> #<Tag:0x00007fedb53cedd0>

(Arina) #1

Всем утро!

Собственно есть 2 проблемы ошибка - 'StaleElementReferenceException: stale element reference: element is not attached to the page document и понимание как сделать нормально

В качестве результата теста следует убедится, что элемент удален

if (!$(byText(name)).isDisplayed()) {
            $(byTitle("Home")).click();
        }

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

 if (!$("#back-home").isDisplayed()) {
            errorMessage.shouldBe(visible);
        }

Но сказали, что так делать нельзя.
Как тогда стоит проверять, что нет элемента?

Это кусок из самого теста

 @BeforeMethod
    public void createBeforeDeleting() {
        LoginPage page = new LoginPage();
        page.clickOnLoginButton();
        page.enterUserInfo("r@bk.ru", "111111");
        page.agreeTOLogin();
        Configuration.timeout=1000;
        open(".com/@izyaz");
        AddCollection newcollection = new AddCollection();
        newcollection.buttonAddCollection();
        newcollection.clickOnCreateCollection();
        newcollection.setCollectionTitle("Test collection");
        newcollection.createCollection();
        open(".com/@izyaz/collections");
        Configuration.timeout=1000;
    }


    @Test
    public void deleteCollection() {
        DeleteCollection delete = new DeleteCollection();
        delete.findCollection();
        delete.deleteCollection();
        ResultDeleteCollection result = delete.deleteCollection();
        result.resultDeleteCollection("Test collection");
    }

Это шаги для удаления в другом классе:

public class DeleteCollection extends ResultDeleteCollection{
    public SelenideElement
            titleCollection = $(byText("Test collection")),
            editCollectionButton = $(byCssSelector("a[href*='edit_collection']")),
            deleteCollectionButton = $(byText("Delete Collection")),
            deleteButton = $(byText("Delete"));

    public DeleteCollection findCollection() {
        //найти коллекцию
        titleCollection.shouldBe(Condition.visible).click();
        //перейти на страницу редактирования
        editCollectionButton.waitUntil(Condition.visible,9000).click();
        return this;
    }
    public DeleteCollection deleteCollection() {
        deleteCollectionButton.waitUntil(Condition.visible, 9000).click();
        deleteButton.waitUntil(Condition.visible, 5000).click();
        return this;
    }

}

И сам результат удаления

public class ResultDeleteCollection {
    public ResultDeleteCollection resultDeleteCollection(String name) {
        open("h.com/@izyaz/collections");
        if (!$(byText(name)).isDisplayed()) {
            $(byTitle("Home")).click();
        }

        return this;
    }

}

Заранее спасибо


(Oleksandr Khotemskyi) #2

Ну раз сказали значит нельзя. Кто сказал, почему нельзя?

Я тут отвечал на похожий вопрос - Общий алгоритм решения "element is not attached to page document"

Вообще предлагаю вопросы по стейл референс эксепшн добавить в платиновые вопросы АТинфо


(Arina) #3

Лид команды сказал, что нельзя :slight_smile: спасибо за ссылку