ProtractorJS_Ошибка DEFAULT_TIMEOUT_INTERVAL при переходе между вкладками

protractor
Теги: #<Tag:0x00007fedb8e7dc88>

(Алексей Щербин) #1

Добрый день,

Может кто знает как написать в тесте переход на предыдущую вкладку? У меня постоянно бьет ошибку: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

Код теста:
describe (‘Тестируем процесс взятия через главную страницу’, function() {

beforeEach (function() {
	browser.ignoreSynchronization = true;
	browser.get('https://#');
});


it ('Тестируем через нажатие кнопки Взять', function() {
	//prepare

	var emailClient = '1649499@gmail.com';
	var passClient = '1111zZ';
	var handles = ['https://a', 'https://b'];
	
	//act
	browser.sleep(1000);
	main_page.buttonGet().click();
	
	//act
	browser.sleep(1000);
	registration_page.enterFieldEmail().sendKeys(emailClient);
	registration_page.enterFieldPass().sendKeys(passClient);
	browser.ignoreSynchronization = false;
	registration_page.buttonRegistration().click();
	
	//assert
	browser.sleep(1000);
	//expect(browser.getCurrentUrl()).toEqual('https://a');
	
	//act - идем брать код SMS из другого продукта
	browser.sleep(1000);
	browser.executeScript('window.open(\'https://b')').then(function() {
		browser.getAllWindowHandles().then(function(handles) {
		browser.switchTo().window(handles[1]);
		});
	});
		//страница другого продукта

	B_main_page.fieldTextSMS().getText().then(function(text) {
		codeSMS.push(text.match(/\d{4}/g) + "\n");
	});
	console.log(codeSMS);
	
	//act - возвращаемся на страницу сайта для ввода кода SMS
	browser.sleep(5000);
	browser.getAllWindowHandles().then(function(handles) {
		browser.driver.close(); //мое решение
		//browser.switchTo().window(handles[0]); //должно так работать
		});
	browser.sleep(5000);
	registration_page.enterFieldcodeSMS().sendKeys(codeSMS);
	registration_page.buttonEnterIn().click();
	browser.sleep(5000);
	
});

});

Частично решил проблему так:

browser.getAllWindowHandles().then(function(handles) {
browser.driver.close();
//browser.switchTo().window(handles[0]);
};
Окно закрывается, я на первой вкладке. Но ошибку все равно выдает.

P.S.: Sleep’ы такие потому что первый сайт на Angular, но есть лоадер скриптовый. А второй сайт не на Angular’е и сильно тормознутый.

Если надо PageObject, скажите, просто там обрезать надо много.


(Сергей Кузьмин) #2

Алексей Щербин а страницы доступны для тестирования - хочу попробовать Java порт Protractor который я же и писал вместе с карлосом который остыл
https://github.com/caarlos0/jProtractor - поскольку java то можно по-отлаживать
ктстати С# проект бруно тоже очень хороший
https://github.com/bbaia/protractor-net


(Oleksandr Khotemskyi) #3

@Aleksey_Shcherbin
jasmine.DEFAULT_TIMEOUT_INTERVAL - это таймаут от Jasmine фреймворка. Ограничивает время выполнения одного “it” блока. Хорошая вещь на самом деле. По умолчанию он 30 секунд.

Вариантов решения два:

  1. Уменьшить время выполнения теста:
  • переписать вызовы browser.sleep на browser.wait
  • вынести логику по входу на сайт в beforeEach/beforeAll - тогда это не будет считаться временем теста
  • разбить на несколько тестов поменьше
  1. Увеличить этот таймаут:
  • только для теста который бежит слишком долго - через обьявление третьего параметра (время в милисекундах) в it():
it('my test case name', function () {...}, 240000)
  • для всех тестов через обьявление в протрактор конфигурации
//где-то в твоем файле конфигурации
jasmineNodeOpts: {
    defaultTimeoutInterval: 240000
}

Почитать -
Все о таймаутах в протракторе - http://www.protractortest.org/#/timeouts#timeouts-from-sauce-labs

Ссылка на секцию конфигурации жасмина - https://github.com/angular/protractor/blob/master/lib/config.ts#L559


(Oleksandr Khotemskyi) #4

Открою вам тайну что и JS можно отлаживать. Дебаг прекрасно работает и в WebStorm и в Visual Studio Code.
К тому же есть
protractor --elementExplorer
browser.pause()

Но проекты которые вы дали предоставляют только синхронизацию с ангуляром, используя эти библиотеки вы не получите ленивые элементы, удобные дополнительные методы для локаторов, конфигурирование прийдется писать самому, а так же нужно подключить вебдрайвер-менеджер и какой-то тест-ранер. К тому же как вы сами сказали - поддержка оставляет желать лучшего, протрактор же развивает сама команда разработчиков Angular.


(Сергей Кузьмин) #5


это как раз и есть локаторы


$ ls -1 ../protractor/src/main/resources/
allowAnimations.js
binding.js
buttonText.js
cssContainingText.js
evaluate.js
getLocationAbsUrl.js
model.js
options.js
partialButtonText.js
repeater.js
repeaterColumn.js
repeaterElement.js
repeaterRows.js
resumeAngularBootstrap.js
selectedOption.js
selectedRepeaterOption.js
testForAngular.js
waitForAngular.js

которые взяты из ‘real’ protractor и больше ничего.
а отлаживать наверное можно и COBOL :slight_smile: но по-моему это будет “без удобств”. это конечно холивар - топик https://www.reddit.com/r/java/comments/2osnpw/is_it_just_me_or_is_javascript_a_lot_harder_to/


(Алексей Щербин) #6

Страницы, к сожалению, недоступны для тестирования.


(Алексей Щербин) #7

Вот это Вы мне открыли глаза. А я все мучаюсь. Благодарю!


(Oleksandr Khotemskyi) #8

Отметь плз как ответ если помогло, хочу ачивку :slight_smile: