Тест транспортира: способен ли он заблокировать / заморозить DOM во время выполнения теста? - PullRequest
0 голосов
/ 15 января 2020

Я выполняю тест Транспортира в веб-приложении angular.

Контрольный пример:

  1. Поиск элементов в списке.

  2. L oop через каждый элемент в списке.

  3. Если элемент содержит требуемое имя.

  4. Нажмите на элемент.

Код :

let projectsList = await element.all(by.css(Selectors.projectList));
for (item of projectsList) {
    item.getText().then((text) => {
        if (text.includes("50_projects_to_tests")) {
            console.log(text)
            item.clik()

        }

    }, (err) => console.log(err));
}

Проблема:

Тестовый пример прост для выполнения, кроме одной вещи. Запрос на обновление информации в проекте отправляется каждые несколько секунд. При ответе с сервера я теряю выбранный список проектов ранее.

Это означает, что я не могу щелкнуть по найденному элементу, поскольку элемент больше не существует.

Я получаю:

StaleElementReferenceError: stale element reference: element is not attached to the page document

Вопрос:

Можно ли заблокировать / заморозить DOM во время выполнения теста?

Любые идеи будут полезны для решения проблемы.

1 Ответ

1 голос
/ 15 января 2020

Получение устаревших ссылок на элементы во время зацикливания - распространенная проблема

Первое замечание: вам следует избегать использования .then() для управления обещаниями, если вы уже используете async/await, это только усложняет задачу. read.

Во-вторых, я бы предостерег от отключения refre sh, если приложение работает не так, когда с ним будет взаимодействовать конечный пользователь.

Следующий ответ основан на предположении, что после обновления страницы те же элементы будут найдены element.all(by.css(Selectors.projectList));. В этом ответе весь массив элементов перехватывается в течение каждого l oop, но в нем хранится значение индекса нужного ему элемента, поэтому l oop продолжается

let projectsList = await element.all(by.css(Selectors.projectList));

for(let loopCount = 0; loopCount < projectsList.length; loopCount++){
    projectsList = await element.all(by.css(Selectors.projectList));

    const item = projectsList[loopCount];
    const itemText = await item.getText();

    if (itemText.includes("50_projects_to_tests")) {
        console.log(itemText )
        item.clik()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...