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 を使用してテストを繰り返すためです。Language Therapist のテキストに基づいて、「最初の」入力チェックボックスを選択する必要があります。

私が試してみました:

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')])

入力セットに到達します。私が抱えている問題は、「Language Therapist」の最初の入力チェックボックス コントロールを選択することです。

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 による ID 化が好きだったからです。

于 2012-12-04T20:48:39.527 に答える
1

この小さな xsl を xml に対して実行しようとすると、興味深い事実に気付きます。

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 に答える