Получение количества дочерних элементов, соответствующих определенному тексту, с помощью транспортира

У меня есть родитель <div> на странице, отличной от Angular. Внутри этого родителя <div> есть много дочерних <div>. В этих дочерних <div> у меня много тегов с данными. Структура HTML следующая:

<div class="row clearfix">
    <div class="col206">
        <p class="name">User16</p>
        <p class="project-name">Manager</p>
        <p class="telefone"></p>
    </div>
    <div class="col206">
        <p class="name">User16</p>
        <p class="project-name">Manager</p>
        <p class="telefone"></p>
    </div>
    <div class="col206">
        <p class="name">User15</p>
        <p class="project-name">Developer</p>
        <p class="telefone"></p>
    </div>
    <div class="col206">
        <p class="name">User14</p>
        <p class="project-name">Developer</p>
        <p class="telefone"></p>
    </div>
    <div class="col206">
        <p class="name">User13</p>
        <p class="project-name">Tester</p>
        <p class="telefone"></p>
    </div>
    <div class="col206">
        <p class="name">User12</p>
        <p class="project-name">Terster</p>
        <p class="telefone"></p>
    </div>
    <div class="col206">
        <p class="name">User11</p>
        <p class="project-name">Developer</p>
        <p class="telefone"></p>
    </div>
    <div class="col206">
        <p class="name">User10</p>
        <p class="project-name">Support</p>
        <p class="telefone"></p>
    </div>
</div>

Я хочу протестировать проект с помощью Protractor и получить количество тех элементов, чье имя проекта - тестер. Как это сделать?


person Utpal    schedule 26.02.2014    source источник


Ответы (1)


На данный момент нет встроенного локатора, чтобы легко выполнить то, что вы хотите сделать. Есть один локатор, который позволяет нам искать по тексту, но он предназначен только для элемент кнопки.

Я предложил pull request, чтобы иметь возможность искать элементы с помощью селектора CSS и текста, но это еще не принято.

Между тем, вы можете создать свой собственный локатор:

by.addLocator('projectName', function() {
    var projectSelector = '.row div'; // probably need some refinement
    var projectName = arguments[0];
    var using = arguments[1] || document;
    var elements = using.querySelectorAll(projectSelector); 
    var matches = [];
    for (var i = 0; i < elements.length; ++i) {
        var element = elements[i];
        var elementText = element.innerText || element.textContent;
        if (elementText === projectName) {
            matches.push(element);
        }
    }

    return matches;
});

И тогда вы можете считать так:

element.all(by.projectName("Tester")).count()
person Bastien Caudan    schedule 26.02.2014