Транспортир - Найти все элементы и l oop длина найденных элементов и нажать кнопку - PullRequest
0 голосов
/ 12 февраля 2020

Итак, я пытался выяснить, как нажимать кнопку x раз, в зависимости от того, сколько найдено Все элементы. Это означает, что если есть 3 элемента, которые найдены с тем же именем класса, то мы l oop 3 раза, которые должны нажать кнопку 3 раза.

Я сделал что-то вроде этого:

(Новое обновление, проверьте редактирование поста внизу)

Обычно element.all(by.className('btn btn-remove btn-outlined')).getText() равен 3, но его можно изменить на 6 и случайные числа, поэтому я решил сначала прочитать, сколько btn btn-remove btn-outlined в HTML и щелкните столько раз найденных элементов. Поэтому, если найдено 3, нажмите кнопку 3 раза.

Однако проблема сейчас заключается в том, что он находит, сколько элементов существует. Он также зацикливается столько раз, что задано как text.length, но внутри l oop кажется, что по некоторым причинам функции it пропускаются, и я не могу понять, почему

Right теперь он находит длину элементов, равную 3, и кажется, что l oop столько раз, но он пропускает функции it (эта часть):

      it('Click remove button - ' + i + '/' + text.length, function (done) {

            browser.driver
                .then(() => browser.executeScript("arguments[0].click();", element.all(by.className('btn btn-remove btn-outlined').first().getWebElement())));
                .then(() => done());
        });

        it('Wait for fading button to be gone', function (done) {

            setTimeout(function () {
                done();
            }, 1000);

        });

и я уверен, что Возможно, я сделал что-то не так, о чем я не знаю.

Как я могу найти, сколько заданных элементов в DOM и сколько раз * l oop нажать кнопку удаления?

РЕДАКТИРОВАТЬ КОД:

it('Click remove button', function (done) {

    element.all(by.className('btn btn-remove btn-outlined')).getText().then(function (text) {
        console.log(text.length) //returns 3
        for (var i = 0; i < 4; i++) {

            console.log(i); //Does print 0 1 2

            it('Click remove button - ' + i + '/' + text.length, function (done) {

                console.log("Remove button"); //Doesnt print

                browser.driver
                    .then(() => browser.executeScript("arguments[0].click();", element.all(by.className('btn btn-remove btn-outlined').first().getWebElement())));
                    .then(() => done());
            });

            it('Wait for fading button to be gone', function (done) {

                console.log("TIme out"); //Doesnt print

                setTimeout(function () {
                    done();
                }, 1000);

            });
        }
    })
    done();
});

1 Ответ

1 голос
/ 13 февраля 2020

Причиной того, что it внутри для l oop не выполнен, являются те, которые it генерируются динамически во время выполнения и не соблюдаются в рамках теста, Жасмин, Мокко.

Как я узнал , Jasmine нужно загрузить и проанализировать данные c it в файлах тестовых сценариев перед их выполнением, а динамические c it, созданные после этапа загрузки и анализа, будут игнорироваться. Таким образом, вам нужно удалить Dynami c it.

Попробуйте код ниже

it('Click remove button', function (done) {

    let allBtns = element.all(by.className('btn btn-remove btn-outlined'));

    allBtns.count()
    .then(function (cnt) {

        console.log('Find buttons:', cnt)

        for (let i = 0; i < cnt; i++) { // important to use let but var here.
            console.log('Remove button - ' + i + '/' + cnt);
            browser.executeScript("arguments[0].click();", allBtns.get(i).getWebElement())
            browser.sleep(1000) // sleep 1s
        }
    })
    .then(()=>{
        done();
    })

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...