5

鉴于此 HTML:

<li class="check_boxes input optional" id="activity_roles_input">
    <fieldset class="choices">
        <legend class="label"><label>Roles</label></legend>
        <input id="activity_roles_none" name="activity[role_ids][]" type="hidden" value="" />
            <ol class="choices-group">
                <li class="choice">
                    <label for="activity_role_ids_104">
                        <input id="activity_role_ids_104" name="activity[role_ids][]" type="checkbox" value="104" />Language Therapist
                    </label>
                </li>
                <li class="choice">
                    <label for="activity_role_ids_103">
                        <input id="activity_role_ids_103" name="activity[role_ids][]" type="checkbox" value="103" />Speech Therapist
                    </label>
                </li>
            </ol>
    </fieldset>
</li>

我正在尝试使用 Selenium 和 xpath。我正在尝试选择第一个“复选框”输入元素链接。
我在选择元素时遇到问题。
我不能使用 db ID (104),因为这是每次都使用新 ID 进行重复测试。我需要选择“第一个”输入复选框,基于它具有语言治疗师的文本。

我试过了:

xpath=(//li[contains(@id,'activity_roles_input')])//input

xpath=(//li[contains(@id,'activity_roles_input')])//contains('Language Therapist")

但它没有找到元素。

当我做:

xpath=(//li[contains(@id,'activity_roles_input')])

它到达输入集。我遇到的问题是为“语言治疗师”选择第一个输入复选框控件。

4

4 回答 4

11

首先,找到<li>包含文本的任何内容,然后在第一个复选框的后代中查找。

xpath=(//li[contains(., "Language Therapist")]/descendant::input[@type="checkbox"][1])

(来自迈克尔)

以上对我有用。最后我实际使用了

xpath=(//li[contains(@id,'activity_roles_input')]/descendant::input[@type="checkbox"][1])

因为我喜欢通过 css ID 识别。

于 2012-12-04T20:48:39.527 回答
1

当我尝试对您的 xml 运行这个小 xsl 时,要注意一个有趣的事实。

XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>

<xsl:template match="/">
   <xsl:for-each select="//li[@id ='activity_roles_input']">
      <xsl:value-of select="."/>
   </xsl:for-each>       
</xsl:template>

</xsl:stylesheet>

输出:

    Roles




                    Language Therapist




                    Speech Therapist
于 2012-12-04T21:36:13.960 回答
0

你有

xpath=(//li[contains(@id,'activity_roles_input')])//input

那不应该是

xpath=(//li[contains(@id,'activity_roles_input')]//input)

更确切地说

xpath=(//li[@id='activity_roles_input']//input)

?

于 2012-12-04T20:42:30.137 回答
-1
xpath=(//li[@id='activity_roles_input']//input[1])
于 2016-12-02T12:00:40.460 回答