#javascript #angularjs #protractor #angularjs-e2e #end-to-end
#javascript #angularjs #транспортир #angularjs-e2e #сквозной
Вопрос:
У меня есть приложение с двумя страницами…первая страница — это целевая страница, где есть кнопка входа в систему…как только пользователь нажимает эту кнопку входа, он перенаправляется на login.html …. где есть два входа. Один для имени пользователя и один для пароля.
Соответствующий код выглядит следующим образом:
index.html
<a ui-sref="login" class="fa fa-sign-in" href="/login">amp;nbsp;Login</a>
и
login.html
<input type="text" id="username" name="username" placeholder="Username" ng-model="user.username" required="" autocomplete="off" class="ng-pristine ng-invalid ng-invalid-required">
<input type="password" name="password" placeholder="Password" ng-model="user.password" required="" autocomplete="off" class="ng-pristine ng-invalid ng-invalid-required">
В моем тесте я сначала нажимаю кнопку входа и проверяю, что я правильно перенаправил на новую страницу. Этот тест пройден, но затем я получаю сообщение об ошибке при попытке ввода в эти поля ввода, как если бы эти поля не существовали. Я пытался перевести браузер в режим ожидания, но это тоже не сработало.
// in test/e2e/main.spec.js
describe('E2E: main page', function(){
'use strict';
var ptor;
// keep track of the protractor instance
beforeEach(function(){
browser.get('http://127.0.0.1:9000/');
ptor = protractor.getInstance();
});
it('it should load the login page once the login button is clicked', function(){
var link = element(by.css('.fa.fa-sign-in'))
link.click();
browser.sleep(4000);
expect(ptor.getCurrentUrl()).toMatch(//login/);
element(by.input('user.username')).sendKeys('test');
element(by.input('user.password')).sendKeys('test');
});
});
Есть какие-нибудь советы?
Обновить:
Использование by.model вместо by.input работает, но в книге, которую я читал, говорилось, что первый должен работать слишком … странно.
Ответ №1:
by.input()
Локатор был устаревшим, и вы должны использовать by.model()
, однако вы могли бы определить свой собственный, если вам действительно нужно, что-то вроде:
by.addLocator('input', function(model, opt_parentElement) {
using = using || document;
var prefixes = ['ng-', 'ng_', 'data-ng-', 'x-ng-', 'ng\:'];
for (var p = 0; p < prefixes.length; p) {
var selector = 'input[' prefixes[p] 'model="' model '"]';
var inputs = using.querySelectorAll(selector);
if (inputs.length) {
return inputs;
}
}
});
// To use the locator
element(by.input('username')).sendKeys('test');