WedX - журнал о программировании и компьютерных науках

Петля не работает должным образом - ночная охрана

У меня есть этот код, я хочу пройти по всем ссылкам, доступным внизу страницы. После нажатия на них я хочу убедиться, что открытый URL-адрес является правильным. Я думаю, что рекурсивные вызовы выполняются слишком рано. Другая проблема заключается в том, как я могу сказать, что ссылка принадлежит определенному URL-адресу.

function links(browser, total_links) {
    if (total_links <= 0) {
        browser.end();
        return;
    }

    console.log("Number of links: " + total_links);
    console.log('Flag1');

         browser
            .waitForElementVisible('.bottom .socal>span:nth-child(' + total_links + ')', 1000, function () {

            console.log('Flag2');
            browser.execute('scrollIntoView(alignToBottom)')

            .moveToElement('.bottom .socal>span:nth-child(' + total_links + ')', 3, 3)
                .pause(3000)
                .click('.bottom .socal>span:nth-child(' + total_links + ') a', function () {
                    console.log('Flag3');
                    browser.keys(['\uE006'])
                    //  .assert.urlContains('facebook')
                    //.assert.urlEquals('https://www.facebook.com/unitel.ao/?fref=ts')
                            .window_handles(function (result) {
                            console.log('Flag4');
                            browser.assert.equal(result.value.length, 2, 'There should be two windows open.');
                            var handle_1 = result.value[0];
                            var handle_2 = result.value[1];
                            browser.switchWindow(handle_2, function () {
                                browser.closeWindow()
                                    .switchWindow(handle_1, function () {
                                        total_links = total_links - 1;
                                        links(browser, total_links);
                                    });
                            });
                         });

                    console.log('Flag5');
                });
            console.log('Flag6');   
        });
}

module.exports = {
    'Social links': function (browser) {
        var total_links;

        browser
            .url('https://m.unitel.ao/fit/')
            .execute(function () {
                    return document.querySelectorAll("ul.navbar-nav>li").length;
                },
                function (tags) {
                    total_links = tags.value;
                    links(browser, total_links);

                });

        //  .end();
    }
};

  • извините, что слишком много кода и не имеет отношения к разъясненному вопросу. 23.05.2016

Ответы:


1

Хм, кажется, вы застряли с этим несколько дней назад. Я рекомендую объект страницы, это поможет вам избежать жесткого кода и упростить изменение CSS в будущем.

Объект домашней страницы (home.js) может выглядеть так:

module.exports = {
  url: function() {
    return 'https://m.unitel.ao/fit/';
  },
  commands: [{
    getUrl: function(n) {
      if (n === 3) {
        return 'youtube.com/user/tvUNITEL';
      }
      if (n === 1) {
        return 'facebook.com/unitel.ao/?fref=ts';
      }
      if (n === 2) {
        return 'instagram.com/unitelangola/';
      }
      if (n === 4) {
        return 'plus.google.com/110849312028181626033/posts';
      }
    }
  }],
  elements: {
    facebook: {
      selector: '.bottom .socal>span:nth-child(1)',
    },
    instagram: {
      selector: '.bottom .socal>span:nth-child(2)'
    },
    youtube: {
      selector: '.bottom .socal>span:nth-child(3)'
    },
    googleplus: {
      selector: '.bottom .socal>span:nth-child(4)'
    }
  }
};

И в вашем тесте должно быть так:

module.exports = {
  'Social links': function(browser) {
    const homePage = browser.page.home();
    var j = 0;
    for (var i in homePage.elements) {
      homePage
        .navigate()
        .waitForElementVisible(homePage.elements[i].selector, 5000, false,
          function() {
            browser.pause(3000);
          })
        .click(homePage.elements[i].selector, function() {
          browser
            .pause(2000)
            .window_handles(function(result) {
              url = homePage.getUrl(j + 1);
              var home = result.value[0];
              var handle = result.value[1];
              browser
                .switchWindow(handle)
                .verify.urlContains(url)
                .closeWindow()
                .switchWindow(home);
              j += 1;
            });
        })
    }
  }
};

PS: Если вы не знаете, как создать объект-страницу, вот документ https://nightwatchjs.org/guide#using-page-objects.

В файле конфигурации
Nightwatch.js:

  "src_folders" : ["tests"],
  "output_folder" : "reports",
  "custom_commands_path" : "",
  "custom_assertions_path" : "",
  "page_objects_path" : "./lib/pages", /* you need to add the path,e.g: './lib/pages', */
  "globals_path" : "",
24.05.2016
  • Вы правы, я уже несколько дней мучаюсь с этим... Спасибо за вашу помощь. У меня есть сомнения, объект страницы не работает с веб-драйвером selenium? Получил эту ошибку: Ошибка получения нового сеанса с сервера селена 24.05.2016
  • Сработало спасибо!!! Могу ли я создать объект страницы для динамических ссылок? Я имею в виду, что когда я не знаю, сколько ссылок щелкнуть и на какие из них щелкнуть, есть ли способ сделать это? Еще раз спасибо за вашу помощь 25.05.2016
  • Динамические ссылки? можешь привести пример, их уже 4, можно больше если хочешь. PS: если это сработало, пожалуйста, примите ответ. 25.05.2016
  • Принято! Например, на объекте страницы представьте, что я не знаю, что первая страница — это facebook, она новая, есть ли способ узнать, какая это страница, и проверить ее URL-адрес? 25.05.2016
  • Вы должны это знать, мы делаем тестовый пример после документа, элемент «должен» быть там. Если команда разработчиков добавит дополнительную ссылку, они должны сообщить вам, тогда вы пишете тестовый пример и делаете для него автотест, то есть процесс .Не предполагайте результат для любого теста, вы должны знать/ожидать, каков результат. 26.05.2016
  • не могли бы вы помочь мне с выпадающими меню? Спасибо заранее 27.05.2016
  • У меня есть 3 варианта в раскрывающемся списке. Он проходит 1-й и третий, он не может проверить 2-й. Проверка наличия в URL-адресе oyun.azercell.com/homepage?lang=ru. - ожидал oyun.azercell.com/homepage?lang=ru, а получил:oyun.azercell.com/? lang=az что может быть причиной этого @Bao Tran? 27.05.2016
  • oyun.azercell является одним из социальных (facebook, youtube, ..), не так ли? если это не относится к этой теме, создайте для нее другую. 28.05.2016
  • Не могли бы вы взглянуть на это, пожалуйста, stackoverflow.com/questions/37523672/ 30.05.2016
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

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


    Для любых предложений по сайту: [email protected]