量角器sendKeys返回NoSuchElementError

时间:2015-06-29 05:34:13

标签: angularjs protractor

我正在学习Protractor,我正在尝试在angularjs.org页面的输入字段中发送Key,但是我收到了这个错误:

  

NoSuchElementError:找不到使用定位器的元素:   By.model( “projectList.search”)

这是我的代码:

describe ("Search list", function() {
    it ("should search for jQuery and display 1 result", function() {
        browser.get("https://angularjs.org/");
        element(by.model("projectList.search")).sendKeys("jQuery");
    });
});

我尝试使用by.id并得到了同样的错误。我假设这是因为元素尚未可见而引起的。当我添加browser.pause()并逐步(慢慢地)时,测试通过。解决这个问题的最佳方法是什么?

angularjs.org的相关HTML

<input type="text" ng-model="projectList.search" class="search-query" id="projects_search"
       placeholder="Search">
<table>
  <thead>
  <tr>
    <th>Project</th>
    <th>Description</th>
    <th><a href="#/new"><i class="icon-plus-sign"></i></a></th>
  </tr>
  </thead>
  <tbody>
  <tr ng-repeat="project in projectList.projects | filter:projectList.search | orderBy:'name'">
    <td><a ng-href="{{project.site}}" target="_blank">{{project.name}}</a></td>
    <td>{{project.description}}</td>
    <td>
      <a ng-href="#/edit/{{project.$id}}"><i class="icon-pencil"></i></a>
    </td>
  </tr>
  </tbody>
</table>

3 个答案:

答案 0 :(得分:1)

我设法找到一个名为waitReady.js的小型图书馆,它解决了我的问题。这是我的最终代码,

require './waitReady.js')
var searchBtnElm = element(by.model('projectList.search'));
searchBtnElm.waitReady().then(function() {
      searchBtnElm.sendKeys("myText");
});

答案 1 :(得分:0)

你可以尝试这样的事情:

var elementSelector = by.model("projectList.search");
browser.driver.isElementPresent(elementSelector).then(function(isPresent){
    element(elementSelector).sendKeys("jQuery");
});

有关更多有用的功能,请参阅protractor docs

答案 2 :(得分:0)

waitReady.js真的适合你吗? 试图用它来点击过时的元素,但有时会发生异常。

有书面功能点击元素:

function clickWait(element) {
    (element).waitReady().then(function () {
        return element.click();
    });
};

然后像这样调用它:

clickWait(element);

框架:jasmine2