Как выделить текст внутренних элементов в GEB?

У меня есть следующий сценарий:

<div>
    <ul class="select2-results" style="width: 400px;">
        <li class="select2-results-dept-0 select2-result select2-result-selectable">
            <div class="select2-result-label">
                <span id="12345" class="null">
                    GBP
                </span>
            </div>
        </li>
        <li class="select2-results-dept-0 select2-result select2-result-selectable">
            <div class="select2-result-label">
                <span id="45678" class="null">
                    KPW
                </span>
            </div>
        </li>
        <li class="select2-results-dept-0 select2-result select2-result-selectable">
            <div class="select2-result-label">
                <span id="12345" class="null">
                    USD
                </span>
            </div>
        </li>
    </ul>
</div>

Мне нужно выбрать валюты из него. Я пытался сделать следующее, но никак:

assert $('UL.select2-results LI.select2-results-dept-0.select2-result.select2-result-selectable', 0..2)*.text() == ["GBP", "KPW", "USD"]

Даже я не смог справиться с этим:

assert $('UL.select2-results LI.select2-results-dept-0.select2-result.select2-result-selectable')*.size() == 3

Хотя я могу обработать один элемент:

assert $('UL.select2-results').find("LI.select2-results-dept-0.select2-result.select2-result-selectable", 0).text() == "GBP"

Любая помощь или предложение было бы очень полезно для меня! Спасибо!


person Sharif Mamun    schedule 25.02.2014    source источник


Ответы (3)


Просто взглянув на ваш пример, вы получите 3 DIVs. Похоже, вам нужно пойти немного глубже, добавив .find('span') прямо перед звездочкой.

assert $(
   'UL.select2-results LI.select2-results-dept-0.select2-result.select2-result-selectable',
    0..3)*.text() == ["GBP", "KPW", "USD"]

становится

assert $(
   'UL.select2-results LI.select2-results-dept-0.select2-result.select2-result-selectable',
    0..3).find('span')*.text() == ["GBP", "KPW", "USD"]
person inanutshellus    schedule 26.02.2014

Я не знаю, почему ответ @Gabriel не сработал! Я знаю, что была проблема с 0..3, так как это было бы 0..2! Но вместо того, чтобы найти, это, наконец, сработало:

assert $('UL.select2-results LI.select2-results-dept-0.select2-result.select2-result-selectable span')*.text() == ["GBP", "KPW", "USD"]

Я хотел бы узнать, может ли кто-нибудь объяснить, почему индексирование + использование find + * не работало вместе для этой конкретной проблемы или была ли какая-либо проблема, связанная с логическим синтаксисом.

person Sharif Mamun    schedule 26.02.2014
comment
Ну по крайней мере вы нашли решение! Обязательно отметьте его как правильный ответ, чтобы другие не пытались решить его за вас. - person inanutshellus; 27.02.2014
comment
Я сделаю это обязательно. Я также нашел решение вопроса, который вы задали, и удалил вчера! Я собирался вставить это как ответ, но ваш вопрос исчез! - person Sharif Mamun; 27.02.2014
comment
Ха, правда? Да, мне просто нужно было обновить Geb до следующей маленькой версии. Смешной. - person inanutshellus; 28.02.2014
comment
Действительно, у вас была проблема со строкой. - person Sharif Mamun; 28.02.2014
comment
Ах, возможно, в моем примере была опечатка, но основная проблема заключалась в том, что Геб добавил поддержку для has() нескольких параметров в 0.9.1 (например, .has('p', foo:'bar'). В 0.9.0 он будет поддерживать только имя тега, например, .has('p'). - person inanutshellus; 28.02.2014
comment
да вы правы! Вы не можете использовать несколько параметров/свойств, как вы пытались это сделать :) - person Sharif Mamun; 28.02.2014

Я думаю, вы могли бы упростить получение валюты, выполнив следующие действия:

$("div.select2-result-label").children("span")*.text() == ["GBP", "KPW", "USD"]

Поскольку у вас уже есть классы в элементах div, вы можете легко получить к ним доступ с помощью приведенного выше селектора, а затем получить дочерние элементы span и получить текст каждого элемента span. Надеюсь, это поможет!

person Justin Schoen    schedule 21.08.2017