Как остановить автоматическое закрытие браузера при написании тестовых примеров транспортира

Я новичок в написании тестовых примеров с использованием транспортира для приложения angular. Я написал образец тестового примера. Если браузер закрывается автоматически после запуска тестового примера. Как я могу это предотвратить. Вот мой код

var submitBtnElm = $('input[data-behavior=saveContribution]');

      it('Should Search', function() {
        browser.driver.get('http://localhost/enrollments/osda1.html');   
        browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
        submitBtnElm.click().then(function() {

        });
      });

Ответ 1

Добавьте browser.pause() в конце своей функции. Внутри самой функции.

Ответ 2

Я предлагаю вам использовать browser.driver.sleep(500); перед нажатием кнопки.

Смотрите это.

browser.driver.sleep(500);

element(by.css('your button')).click();
browser.driver.sleep(500);

Ответ 3

Добавьте функцию обратного вызова в блок It, и окно браузера не будет закрыто, пока вы его не вызовете. Поэтому выполните необходимые действия и поместите обратный вызов в удобное для вас время.

var submitBtnElm = $('input[data-behavior=saveContribution]');
  it('Should Search', function(callback) {
    browser.driver.get('http://localhost/enrollments/osda1.html');   
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
    submitBtnElm.click().then(function() {
       // Have all the logic you need
       // Then invoke callback
       callback();
    });
  });

Ответ 4

Я уверен, что на вашей странице нажата кнопка "Изменить". Это может быть что-то столь же тонкое, как изменение класса на элементе или как очевидное, как элемент <p></p> с отображенным текстом "Сохранено". То, что я сделаю, после теста явно ждет этого изменения.

[...]
return protractor.browser.wait(function() {
    return element(by.cssContainingText('p', 'Saved')).isPresent();
}, 10000);

Вы можете добавить такой механизм ожидания к методу afterEach() вашего спецификационного файла, чтобы ваши тесты были разделены, даже если неявные ожидания Protractor Angular.

Ответ 5

var submitBtnElm = $('input[data-behavior=saveContribution]');

  it('Should Search', function() {
    browser.driver.get('http://localhost/enrollments/osda1.html');   
    browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
    submitBtnElm.click().then(function() {

    });
    browser.pause(); // it should leave browser alive after test
  });

browser.pause() должен оставить браузер живым, пока вы не отпустите его.

@Edit Другим подходом является установка browser.ignoreSynchronization = true перед browser.get(...). Транскаватор не ожидал загрузки Angular, и вы могли бы использовать обычный синтаксис элемента (...).

Ответ 6

Лучший способ сделать браузер НЕ закрываться в течение некоторого времени, используйте browser.wait(). Внутри функции ожидания функции write логика для проверки либо visibilityOf(), либо invisibilityOf() элемента, которая не видна, или потребуется время, чтобы стать невидимым в пользовательском интерфейсе. В этом случае wait() продолжает проверять логику до тех пор, пока не будет достигнуто условие или тайм-аут. Вы можете увеличить время ожидания, если хотите, чтобы браузер отображал больше времени.

var EC=protractor.ExpectedConditions;
var submitBtnElm = $('input[data-behavior=saveContribution]');

it('Should Search', function() {
   browser.driver.get('http://localhost/enrollments/osda1.html');   
   browser.driver.findElement(by.id('contributePercentValue')).sendKeys(50);
   submitBtnElm.click().then(function() {
   browser.wait(function(){
            EC.invisibilityOf(submitBtnElm).call().then(function(isPresent){
                if(isPresent){
                    return true;
                }
            });
        },20000,'error message');
    });
  });

Ответ 7

Я также боролся с аналогичной проблемой, когда у меня был поток тестовых событий, в которых мы взаимодействовали с несколькими приложениями, и при использовании Protractor браузер закрывался после выполнения одного файла conf.js. Теперь, когда я заглянул в предыдущий ответ, это было похоже на добавление задержки, которая зависит от того, как быстро ваше следующее действие я выполнил, или оно было поражено или ушло. Даже если мы думаем, что от точки отладки большая часть пользователей будет выполнять ночные прогоны, и они хотят, чтобы браузер работал в течение нескольких часов, прежде чем анализировать проблему. Поэтому я начал изучать базовый код транспортира и столкнулся с общим решением, которое может обойти эту проблему независимо от любого браузера. В настоящее время решение зависит от требований, которые браузер не должен закрывать после запуска одного файла conf.js, а затем может быть улучшен, если кто-то может добавить параметр конфигурации, запрашивающий у пользователя, закрыть ли браузер после запуска.

Браузер можно использовать повторно для будущего файла conf.js, используя тег --seleniumSessionId в командной строке.

Решение:

  • Перейдите к..\AppData\Роуминг\npm\node_modules\protractor\built, где ваш транспортир установлен.
  • Откройте файл driverProvider.js и зайдите в функцию quitDriver
  • Замените return driver.quit() на return 0

Поскольку мое текущее использование, по-видимому, не влияет на изменение кода, будет обновлено, если я столкнулся с любой другой проблемой из-за этого изменения. Снимок фрагмента кода ниже.

Спасибо Глисон

Снимок фрагмента кода: Snapshot of code snippet