Я занимаюсь сайтом angularjs. Там есть панель поиска, которая выполняет исследование любых изменений в поле, если длина строки превосходит 2 символа.Trigger the ng-change
В любом случае. С помощью Protractor я использую sendKeys для ввода имени, ожидая начала поиска, но я не могу получить никаких результатов. Если я делаю это вручную, он работает нормально. Вот более или менее часть коды я использую, чтобы ввести в своем исследовании:
describe('Search Field', function(){
browser.get('https://docs.angularjs.org/api');
it('displays a frame with the results of the search', function(){
var searchField = element(by.css('.search-query'));
var searchResult= element(by.css('.search-results-container'));
searchField.click();
searchField.sendKeys('angular');
//I use a wait function here to wait for the results
browser.wait(function() {
return searchResult.isDisplayed();
},10000);
//Before doing anything else, I expect to see the results
expect(searchResult.isPresent()).toBe(true);
expect(searchResult.isDisplayed()).toBe(true);
});
});
и код searchfield является:
<input type="text" name="as_q" class="search-query ng-valid ng-touched ng-dirty ng-valid-parse" placeholder="Click or press/to search" ng-focus="focus=true" ng-blur="focus=false" ng-change="search(q)" ng-model="q" docs-search-input="" autocomplete="off" style="">
кажется, что функция seach(q)
никогда не выполняется с транспортиром.
У вас есть идея причины этой проблемы?
редактировать:
мне удалось поиск фрейм результата появляются с помощью оценки(). Код становится:
describe('Search Field', function(){
browser.get('https://docs.angularjs.org/api');
it('displays a frame with the results of the search', function(){
var searchField = element(by.css('.search-query'));
var searchResult= element(by.css('.search-results-container'));
searchField.click();
topBanner.searchField.evaluate('search("angular")');
//I use a wait function here to wait for the results
browser.wait(function() {
return searchResult.isDisplayed();
},10000);
//Before doing anything else, I expect to see the results
expect(searchResult.isPresent()).toBe(true);
expect(searchResult.isDisplayed()).toBe(true);
});
});
Но странно то, что если я оставляю SendKeys команда() до того, как оценить, то результаты поиска не будут отображаться.
Таким образом, я рассматриваю это как обходной путь, он позволяет мне работать с фактическим фреймом, который я хотел достичь. Но я хотел бы знать, как достичь этого кадра без этого трюка.
Попробуйте searchField.blur() - может быть, поле не теряет фокус после ввода текста. (просто мысль) – sirrocco
Я просто попытался размыть или щелкнуть по другому элементу, но результата нет. – Majuj
У меня нет хорошего ответа для вас, но я нашел эту статью, которая, я думаю, могла бы помочь вам на правильном пути: http://iswwwup.com/t/6484d98c7426/how-to-trigger -ng-change-in-directive-test-in-angularjs.html – SamHuckaby