Может кто знает как написать в тесте переход на предыдущую вкладку? У меня постоянно бьет ошибку: 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, скажите, просто там обрезать надо много.
@Aleksey_Shcherbin
jasmine.DEFAULT_TIMEOUT_INTERVAL - это таймаут от Jasmine фреймворка. Ограничивает время выполнения одного “it” блока. Хорошая вещь на самом деле. По умолчанию он 30 секунд.
Вариантов решения два:
Уменьшить время выполнения теста:
переписать вызовы browser.sleep на browser.wait
вынести логику по входу на сайт в beforeEach/beforeAll - тогда это не будет считаться временем теста
разбить на несколько тестов поменьше
Увеличить этот таймаут:
только для теста который бежит слишком долго - через обьявление третьего параметра (время в милисекундах) в it():
it('my test case name', function () {...}, 240000)
для всех тестов через обьявление в протрактор конфигурации
//где-то в твоем файле конфигурации
jasmineNodeOpts: {
defaultTimeoutInterval: 240000
}
Открою вам тайну что и JS можно отлаживать. Дебаг прекрасно работает и в WebStorm и в Visual Studio Code.
К тому же есть protractor --elementExplorer browser.pause()
Но проекты которые вы дали предоставляют только синхронизацию с ангуляром, используя эти библиотеки вы не получите ленивые элементы, удобные дополнительные методы для локаторов, конфигурирование прийдется писать самому, а так же нужно подключить вебдрайвер-менеджер и какой-то тест-ранер. К тому же как вы сами сказали - поддержка оставляет желать лучшего, протрактор же развивает сама команда разработчиков Angular.
которые взяты из ‘real’ protractor и больше ничего.
а отлаживать наверное можно и COBOL но по-моему это будет “без удобств”. это конечно холивар - топик Reddit - Dive into anything