选择给定标签

时间:2017-10-31 04:16:12

标签: python xpath selenium-webdriver

所以我通常使用driver.find_element_by_xpath('//input[@id=(//*[contains(text(), "User Name")]/@for)]')在文本框中输入信息,但这并不适用于以下代码:

<div class="form-group text-entry required ">
  <div class="label-set" id="answerTextBox-30918642">Primary User Name (First and Last Name)</div>
  <div class="group-set" role="group" aria-labelledby="answerTextBox-30918642">
    <input id="pageResponse_Responses_Index" name="pageResponse.Responses.Index" type="hidden" value="fta30918642">
    <input class="freeTextAnswerId form-control" id="pageResponse_Responses_fta30918642__FreeTextAnswerId" name="pageResponse.Responses[fta30918642].FreeTextAnswerId" type="hidden" value="30918642">
    <label for="answerTextBox-30918642-free" class="sr-only">Write-In Answer</label>
    <input class="form-control free-text" id="answerTextBox-30918642-free" name="pageResponse.Responses[fta30918642].FreeText" type="text" value="">
  </div>
</div>

我尝试使用xpath来选择输入,

driver.find_element_by_xpath("//label[contains(.,'User Name')]/following-sibling::input[1]")

但到目前为止,我到目前为止没有尝试过任何事情。这可以找到包含标签driver.find_element_by_xpath("//*[contains(text(), 'User Name')]")的元素,但我的问题是选择要发送密钥的输入。

2 个答案:

答案 0 :(得分:1)

您可以将XPath简化为

//div[contains(.,'User Name')]/following::input[@type='text']

following axis from MDN

  

following轴表示在上下文节点之后显示的所有节点,但任何descendantattributenamespace节点除外。

其他INPUT被隐藏,因此指定@type='text'只会找到您想要的那个。

答案 1 :(得分:0)

所以我能够将它融入Santhosh的建议:

//*[contains(text(), \"User Name\")]/../div//input[@class='form-control free-text']