Транспортир sendKeys возвращает NoSuchElementError

0

Я изучаю Protractor и пытаюсь отправитьKeys в поле ввода на странице angularjs.org, но я получаю эту ошибку:

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() и шаг за шагом (медленно), тест проходит. Каков наилучший способ решить эту проблему?

Связанный HTML-код от angularjs.org

<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>
Теги:
protractor

3 ответа

1
Лучший ответ

Мне удалось найти небольшую библиотеку под названием waitReady.js, и она решила мою проблему. Вот мой последний код,

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

Действительно ли waitReady.js работает для вас?
Попробовали использовать его, чтобы нажимать на устаревшие элементы, но иногда в любом случае происходят исключения.

Написали функцию, чтобы щелкнуть элемент:

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

И вызовите его так:

clickWait(element);

рамки: жасмин2

0

Вы можете попробовать что-то вроде этого:

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

См. Документатор транспортира для более полезных функций

Ещё вопросы

Сообщество Overcoder
Наверх
Меню