Я новичок в написании тестовых примеров с использованием транспортира для приложения 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]()