鉴于此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')])
它到达输入集。我遇到的问题是为“语言治疗师”选择第一个输入复选框控件。
答案 0 :(得分:10)
首先,查找包含文本的任何<li>
,然后在第一个复选框的后代中查找。
xpath=(//li[contains(., "Language Therapist")]/descendant::input[@type="checkbox"][1])
(来自Michael)
以上对我有用。最后我实际使用了
xpath=(//li[contains(@id,'activity_roles_input')]/descendant::input[@type="checkbox"][1])
因为我喜欢用css ID识别ID。
答案 1 :(得分:1)
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
答案 2 :(得分:0)
你有
xpath=(//li[contains(@id,'activity_roles_input')])//input
不应该是
xpath=(//li[contains(@id,'activity_roles_input')]//input)
或者更确切地说
xpath=(//li[@id='activity_roles_input']//input)
答案 3 :(得分:-1)
xpath=(//li[@id='activity_roles_input']//input[1])