Javascript 触发ng变化

Javascript 触发ng变化,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,我在angularjs网站上练习。在那里,有一个搜索栏,只要字符串长度超过2个字符,它就可以对字段中的任何更改执行研究 无论如何。使用量角器,我使用sendKeys输入名称,期望搜索开始,但无法得到任何结果。然而,当我手动操作时,它工作得很好。 下面或多或少是我在研究中输入的一段代码: describe('Search Field', function(){ browser.get('https://docs.angularjs.org/api'); it('displays a fr

我在angularjs网站上练习。在那里,有一个搜索栏,只要字符串长度超过2个字符,它就可以对字段中的任何更改执行研究

无论如何。使用量角器,我使用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="">
但奇怪的是,如果我在求值之前保留sendkeys()命令,那么搜索结果就不会出现

所以我认为这是一个解决办法,它使我能够在我想要到达的实际框架上工作。但是我想知道如何在没有这个技巧的情况下到达那个框架

searchField.value('angular');
searchField.trigger('input');
之后你需要

$scope.$apply();
之后你需要

$scope.$apply();

尝试searchField.blur()-输入文本后,该字段可能没有失去焦点。(只是一个想法)我只是试图模糊,或者点击另一个元素,但是没有结果。我没有一个好的答案给你,但我确实找到了这篇文章,我认为这篇文章可能会让你走上正确的轨道:我尝试了,但失败了<代码>发送键,
操作()
,等等。。。不会触发变化。SamHuckaby:谢谢,这篇文章似乎说Angular在创作角色时会抑制“ng change”触发器。但是Angular文档补充说,它应该在离开表单或按RETURN键()时触发。我两个都试过了,还是没有成功。盐水:谢谢你的尝试!尝试searchField.blur()-输入文本后,该字段可能没有失去焦点。(只是一个想法)我只是试图模糊,或者点击另一个元素,但是没有结果。我没有一个好的答案给你,但我确实找到了这篇文章,我认为这篇文章可能会让你走上正确的轨道:我尝试了,但失败了<代码>发送键,
操作()
,等等。。。不会触发变化。SamHuckaby:谢谢,这篇文章似乎说Angular在创作角色时会抑制“ng change”触发器。但是Angular文档补充说,它应该在离开表单或按RETURN键()时触发。我两个都试过了,还是没有成功。盐水:谢谢你的尝试!我尝试了这些行,作为要求值的参数(我想保留Jasmine语法),但它不起作用。您的代码似乎不完整。在哪里注入依赖项?我直接执行量角器,它处理依赖项。它还包装了WebDriverJ,并在代码中使用了一些Jasmine语法(描述,it…)。这就是为什么我不能直接使用你写的东西。我必须把它封装起来。我试着用evaluate(…),但它没有用。现在我尝试使用browser.executeScript(…),但它无法识别$scope。我不熟悉Javascript和量角器,所以请原谅我使用了不正确的术语。我尝试了这些行,作为要计算的参数(我想保留Jasmine语法),但它不起作用。Jasmine语法是什么意思,Jasmine只是Javascript。您的代码似乎不完整。在哪里注入依赖项?我直接执行量角器,它处理依赖项。它还包装了WebDriverJ,并在代码中使用了一些Jasmine语法(描述,it…)。这就是为什么我不能直接使用你写的东西。我必须把它封装起来。我试着用evaluate(…),但它没有用。现在我尝试使用browser.executeScript(…),但它无法识别$scope。我不熟悉Javascript和量角器,所以请原谅我使用了不正确的术语。