【问题标题】:How to select the inner elements' text in GEB?如何在 GEB 中选择内部元素的文本?
【发布时间】:2014-02-25 22:47:05
【问题描述】:

我有以下场景:

<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"

任何帮助或建议对我来说都是非常有益的!谢谢!

【问题讨论】:

    标签: html css grails spock geb


    【解决方案1】:

    仅仅通过观察你的例子,你得到的是 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"]
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 好吧,至少你找到了解决方案!请务必将其标记为正确答案,以免其他人知道不要尝试为您解决问题。
      • 我肯定会这样做。我还找到了您昨天提出并删除的问题的解决方案!我正要粘贴它作为答案,你的问题消失了!
      • 哈,真的吗?是的,我只需要将 Geb 升级到下一个小版本。好笑。
      • 真的,你的字符串有问题。
      • 啊,我的示例中可能有错字,但基本问题是 Geb 在 0.9.1 中添加了对 has() 的支持以具有多个参数(例如 .has('p', foo:'bar')。在 0.9. 0 它只支持标签名称,例如.has('p').
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 1970-01-01
        • 2021-09-14
        相关资源
        最近更新 更多