结合XPath选择器来选择后代或自我

时间:2017-07-30 10:31:34

标签: selenium xpath selenium-webdriver

我正在使用以下XPath选择器:

//*[text()="Surname"]//parent::*//following-sibling::*[self::select or self::input or self::textarea]
//*[text()="Surname"]//parent::*//following-sibling::*//*[self::select or self::input or self::textarea]

要选择输入,请从此结构中的标签中选择或textarea:

    <div>
      <div><label for="">Surname</label></div>
      <div class="help">Some help text in a tooltip</div>
      <div class="control">
        <div>
            <input type="text" value="" />
        </div>
      </div>
    </div>

或者这个:

    <div>
      <div><label for="">Surname</label></div>
      <div class="help">Some help text in a tooltip</div>
      <input type="text" value="" />
    </div>

这很好用,但是只关注选择器的结尾,我想知道是否可以使这只是一个选择器?

我在上面的第二个选择器上尝试了后代或自我而不是自我,但它不能用于选择第二个dom结构。

4 个答案:

答案 0 :(得分:1)

你可以升级两级并寻找任何后代

//*[text()="Surname"]//..//..//*[self::select or self::input or self::textarea]

答案 1 :(得分:1)

以下XPath使用&#34; Surname&#34;标识包含div元素的label元素。 value,然后使用following-sibling::轴匹配匹配div之后的同一级别的任何元素(它可能是第二个示例中的表单元素或包含那些表单元素的div第一个例子),然后使用带有谓词的descendant-or-self::轴来匹配任何所需的表单元素。

//div[label = 'Surname']
  /following-sibling::*
    /descendant-or-self::*[self::select or self::input or self::textarea]

答案 2 :(得分:0)

请按照以下步骤操作:

  1. 尝试在浏览器中打开HTML /页面。
  2. 按F12或右键单击并按&#34;检查元素&#34;上 浏览器。
  3. 尝试搜索您需要的元素10.0.2.2 //This refers to the computer 元件。
  4. 右键点击该元素,选择&#34;复制&#34;然后选择 &#34;复制选择器&#34;。
  5. 验证选择器是否正确 您的案例<input>元素中的元素。打开浏览器的控制台 并输入<input>
    现在,只需将您复制的元素粘贴在引号之间即可 按回车键。你应该看到$("")元素的html。
  6. 在您的Selenium代码中成功验证后使用 <input>并粘贴您复制并粘贴的内容 第5步中的引用。
  7. 成功运行程序。

答案 3 :(得分:0)

我不确定为什么之前没有用,但第一个选择器现在实际上涵盖了两种情况。我刚才意识到parent::*也可以是..

//*[text()="Surname"]//..//following-sibling::*[self::select or self::input or self::textarea]