Это предположение, но по опыту оно обычно не за горами. Когда страница, на которую вы переходите, загружается, могут ли происходить какие-либо анимации, запросы AJAX или другие задержки, отличные от AngularJS? Транспортир их не ждет и выполнит код:
element(by.model("post.postText")).sendKeys("hello");
как только сможет. Если при этом все анимации еще не были завершены, ваш элемент не будет виден транспортиру, и вы увидите ошибку, с которой столкнулись.
Чтобы быстро проверить это, добавьте browser.sleep(10000);
перед строкой, в которой происходит сбой. browser.sleep();
— это команда, которая заставит браузер ждать определенное время, в данном случае 10 000 миллисекунд (10 секунд).
Если это сработает, вы можете изменить его на что-то более элегантное, например:
browser.wait(function() {
return element(by.model("post.postText")).isPresent();
}, 10000);
Который будет ждать, пока ваш элемент станет видимым, но только максимум 10 секунд, после чего все равно продолжится.
EDIT1: (что работает нормально):
HTML (обслуживание с http://localhost:8080)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
<script src="bower_components/angular/angular.min.js"></script>
<script>
var app = angular.module('app', []);
app.controller('myCtrl', function($scope) {
});
</script>
</head>
<body ng-app="app" ng-controller="myCtrl">
<textarea id="post-editor" placeholder="Tell your friends" ng-model="post.postText" class="textareanoborder col-xs-12 col-md-12 ng-pristine ng-valid ng-isolate-scope ng-touched" autocomplete="off" aria-invalid="false"> </textarea>
</body>
</html>
spec.js
describe('angularjs homepage todo list', function() {
it('should add a todo', function() {
browser.get('http://localhost:8080');
$("#post-editor").sendKeys("testlol");
browser.sleep(2000);
});
});
conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['spec.js']
};
person
Tom Nijs
schedule
21.11.2016