如何在GEB中选择内部元素的文本?

时间:2014-02-25 22:47:06

标签: html css grails spock 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"

任何帮助或建议都对我有益!谢谢!

3 个答案:

答案 0 :(得分:3)

仅仅通过观察你的例子,你得到的回报是3 DIV。看起来您需要更深入一点,在星号之前添加.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"]

答案 1 :(得分:1)

我不知道为什么@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 + *不能同时解决这个特定问题,或者是否存在与逻辑语法相关的问题。

答案 2 :(得分:0)

我认为您可以通过执行以下操作来简化您获取货币的方式:

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

因为您已经在div上有类,所以您可以使用上面的选择器轻松访问它们,然后您可以获取子 span 元素并获取每个范围的文本。我希望这有帮助!