【问题标题】:Need help finding xpath of input field beside label需要帮助查找标签旁边输入字段的 xpath
【发布时间】:2014-11-30 17:46:09
【问题描述】:

我有一个这样的dom结构

<tr class="">
<td class="labelCol requiredInput">
    <label for="name_lastacc2" class="">
        <span class="requiredMark">*</span>
    Last Name</label>
</td>
<td class="dataCol col02">
    <div class="requiredInput">
        <div class="requiredBlock"></div>
        <input id="name_lastacc2" maxlength="80" name="name_lastacc2" size="20" tabindex="3" type="text"></div>
    </td>
    <td class="labelCol">
        <label for="00NG0000008Rybp">Business Ext.</label>
    </td>
    <td class="dataCol">
        <input id="00NG0000008Rybp" maxlength="10" name="00NG0000008Rybp" size="20" tabindex="22" type="text"></td>
    </tr>

我正在尝试在其标签旁边找到输入框。

例如:

姓氏:________________

我尝试过使用像

这样的 xpath 查询
//label[contains(text(),'Last Name']/../following-sibling::*/div/input[@type='text'] 

但我收到 [INVALID XPATH EXPRESSION] 错误。我哪里错了?

【问题讨论】:

    标签: selenium xpath


    【解决方案1】:

    您的路径表达式缺少 contains() 的右括号。

    //label[contains(text(),'Last Name')]/../following-sibling::*/div/input[@type='text']
    

    但是话虽如此,我认为您的路径表达式现在不正确。您的表达式将匹配label[contains(text(),'Last Name')] 父级的兄弟姐妹的任何。您希望它找到的是紧随其后的input 元素。

    您的原始表达式仅找到一个input 元素的唯一原因是第二个元素嵌套在另一个div 中。但我认为你不应该依赖它。

    请尝试:

    //label[contains(.,'Last Name')]/following::input[1]
    

    那么,结果是

    <input id="name_lastacc2" maxlength="80" name="name_lastacc2" size="20" tabindex="3" type="text"/>
    

    【讨论】:

    • 啊,废话!我已经为此坐了一个小时。我多么愚蠢。谢谢!
    • @user2148105 不客气。也请看看我的编辑。
    • 但是跟随 wud 拿走 td 之后的一切,对吗?我正在尝试将我的范围限制在下一个 td 内
    • @user2148105 不,它只考虑之后的内容,直到找到第一个 input 元素。我想这正是你想要的。顺便说一句,为什么不寻找forid 属性匹配的labelinput 元素?
    • 我现在明白了。谢谢!
    猜你喜欢
    • 2022-12-26
    • 2016-04-24
    • 2011-06-28
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多