【问题标题】:Selecting xpath input given label选择 xpath 输入给定标签
【发布时间】:2017-10-31 04:16:11
【问题描述】:

所以我通常使用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')]") 的元素,但我的问题是选择要发送密钥的输入。

【问题讨论】:

  • //div//input[@class='form-control free-text'] 这对你有用吗?
  • 请阅读为什么a screenshot of code is a bad idea。粘贴代码并正确格式化。
  • @JeffC 这有帮助吗
  • @Jake Some... 我修好了。当我发布 HTML 时,我通常使用像 cleancss.com/html-beautify 这样的 HTML 美化器。

标签: python xpath selenium-webdriver


【解决方案1】:

您可以将 XPath 简化为

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

following axis from MDN

following 轴表示出现在上下文节点之后的所有节点,descendantattributenamespace 节点除外。

其他INPUTs 是隐藏的,所以指定@type='text' 只会找到你想要的那个。

【讨论】:

    【解决方案2】:

    所以我能够让它工作集成 Santhosh 的建议:

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

    【讨论】: