我在angularjs网站上练习。在那里,有一个搜索栏,只要字符串长度超过2个字符,就可以对字段中的任何变化进行研究。
反正。使用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);
});
});
,搜索字段代码为:
<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="">
似乎永远不会使用Protractor执行seach(q)
函数。
您是否了解此问题背后的原因?
修改:
我设法使用evaluate()显示搜索结果框。代码变为:
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()命令,那么搜索结果将不会出现。
所以我认为这是一种解决方法,它使我能够处理我想要达到的实际框架。但我想知道如何在没有这个技巧的情况下达到那个框架。