【问题标题】:How to Xpath query all option tags containing the same attribute value如何 Xpath 查询包含相同属性值的所有选项标签
【发布时间】:2020-09-08 09:21:43
【问题描述】:

我正在尝试使用标记为 Book1 的数据存储值查询所有选项标签中的文本。下面是主题下拉列表。

<div class="form-group">
        <label>Cards</label>
        <select class="form-control giftcard-selector" name="giftcard">
                <option data-store="Book1" data-number="110" data-pin="333" data-balance="93.92" value="81372" style="display: none;">Book1: 1110 ($93.92)</option>
                <option data-store="Book2" data-number="111" data-pin="0619" data-balance="7.56" value="81371" style="display: none;">Book2: 112 ($7.56)</option>
                <option data-store="Book1" data-number="113" data-pin="8229" data-balance="10.24" value="81369" style="display: none;">Book1: 113 ($10.24)</option>
                <option data-store="Book2" data-number="114" data-pin="0984" data-balance="2.17" value="81373" style="display: none;">Book2: 115 ($2.17)</option>
        </select>
</div>

我已尝试使用以下 xpath 来查询标记为“Book1”的选项标签数据存储值中的所有文本,但它返回“Null”。任何帮助将不胜感激。

//select[@class="form-control giftcard-selector"]/option@data-store="Book1"

【问题讨论】:

    标签: java selenium selenium-webdriver xpath webdriver


    【解决方案1】:

    我认为你错误地构建了 xpath,试试这个:

    对于元素:

    //select[@class="form-control giftcard-selector"]/option[@data-store="Book1"]
    

    对于正文:

    //select[@class="form-control giftcard-selector"]/option[@data-store="Book1"]/text()
    

    【讨论】:

    • 正确!属性必须在括号中。
    • Hey Spencer,您提供的 xpath 返回语法错误。但是,当我使用 xpath = //select[@class="form-control giftcard-selector"]/option@data-store 时,它​​会返回 book1 的第一个属性数据存储值,但不会返回 book1 的两个数据存储值。
    • 你能在你的问题中展示你是如何使用这个定位器的吗?因为它不应该显示语法错误,所以我测试了这个定位器,粘贴你使用它的 java 代码。
    【解决方案2】:

    如果您仔细查看&lt;select&gt; 元素,所有后代&lt;option&gt; 元素都将style 属性设置为display: none;。所以Selenium 将无法以通用方式找到它们。


    解决方案

    大概&lt;option&gt; 标签中的文本也通过&lt;ul&gt; 和几个&lt;li&gt; 标签表示,您需要通过这些标签与选项元素进行交互。


    参考

    您可以在以下位置找到一些相关的详细讨论:

    【讨论】:

    • 嗨,Debajan,此脚本中没有
      • 标记。
    • @SpaceTech 你能再次交叉检查&lt;span&gt;标签吗?
    • @SpaceTech 搜索 //*[contains(., '1110')] 并尝试定位其他节点。
    【解决方案3】:

    你可以使用:

    cssSelector: ".form-control.giftcard-selector option[data-number='1']"

    【讨论】:

      猜你喜欢
      • 2015-04-14
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      相关资源
      最近更新 更多