Мы внедряем подход BDD и используем транспортир для тестирования. В тестируемом приложении есть страницы Angular и Non Angular. Страница входа не угловая, а домашняя страница угловая. Сценарий отлично работает на странице входа в систему, и когда он переходит в режим, отличный от angular, ничего не происходит (никаких действий не выполняется).
В чем может быть проблема?
StepDefinition.js
Given(/^User lands on Login$/, function () {
var appUrl = properties.get('appUrl');
return browser.driver.get('appUrl');
browser.ignoreSynchronization = true;
});
When(/^User enters Username and Password$/, function () {
xph.get('Username').sendKeys(username);
return xph.get('Password').sendKeys('password');;
});
When(/^User Clicks Submit$/, function(){
browser.executeScript("arguments[0].click();",xph.get('Login'))
//return browser.sleep(7000);
browser.ignoreSynchronization = false;
browser.waitForAngular();
});
Then(/^User successfully logs$/, function() {
var hString= xph.get('LogOut');
hString.getText().then(function(text){expect(text).to.equal('LogOut');});
});
Then(/^User clicks Create Account$/, function () {
browser.executeScript("arguments[0].click();",xph.get('CreateAcct'))
});



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Две проблемы в вашем коде, попробуйте еще раз после их исправления следующим образом:
1) ты ставишь browser.ignoreSynchronization = true за return, смысла нет.
Внутри browser.get() он определит, что открывающаяся страница является угловой, за исключением того, что browser.ignoreSynchronization = true помещается перед browser.get(), чтобы указать транспортиру, что открывающаяся страница не является угловой.
Given(/^User lands on Login$/, function () {
var appUrl = properties.get('appUrl');
browser.ignoreSynchronization = true;
return browser.driver.get('appUrl');
});
2) Вы должны возвращать объект, похожий на обещание, для каждого определения шага, иначе исполнитель будет останавливаться на этом определении шага до истечения времени ожидания.
waitForAngular(), эквивалентный browser.ignoreSynchronization = false;. Первый представлен в более высокой версии транспортира, более поздний может работать с более низкой и более высокой версией транспортира.
Почему вы не используете Protractor API xph.get('Login').click(), а используете Javascript DOM API для нажатия кнопки Submit.
When(/^User Clicks Submit$/, function(){
return element(<locator of Submit button>).click().then(function(){
return browser.ignoreSynchronization = false;
})
});