2016-03-11 2 views
11

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

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() { 

     }); 
     }); 
+0

Можете ли вы объяснить свой вопрос немного больше? Что значит браузер закрывается автоматически? Не должен ли ваш браузер закрываться после завершения запуска вашего скрипта? Спасибо –

+0

@GirishSortur Я хочу выполнить действие click. Но браузер закрывается перед запуском click.I обновил код в вопросе. – Balu

+0

Есть ли какой-либо журнал в консоли после закрытия окна? Что сообщает транспортир/жасмин в конце? – Gunderson

ответ

4

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

См.

browser.driver.sleep(500); 

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

У меня есть аналогичная проблема, я использую browser.sleep (1000); но это не решило мою проблему, я даже изменил DEFAULT_TIMEOUT_INTERVAL = 120000; но результат не всегда всегда проходит все мои тесты, прежде чем загрузится страница! – Emna

+2

Добавление сон, как это, не является хорошей практикой. См. Ниже решение, если у вас есть функции обратного вызова, чтобы открыть окно браузера. – AdityaReddy

4

Добавить функцию обратного вызова в 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(); 
    }); 
    }); 
2

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

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

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

2
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 перед браузером.get (...). Транспортир не ожидал, что Angular загружен, и вы можете использовать обычный синтаксис элемента (...).

5

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

+0

Кажется, что он не работает ни внутри функции, ни снаружи. – SomeoneElse

2

Лучший способ сделать браузер НЕ закрывать в течение некоторого времени, используйте 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'); 
    }); 
    }); 
0

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

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

Решение:

  • Перейти к .. \ AppData \ Roaming \ НПМ \ node_modules \ транспортир \ построен, на котором установлена ​​ транспортир.
  • Открыть driverProvider.js файл и перейти работать quitDriver
  • Заменить возврата driver.quit() по возвращение 0

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

Благодаря Глисон

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

+0

Привет, Gleeson. Вы должны рассмотреть возможность размещения кода прямо в своем ответе. Это упростит индексирование и ссылку. –