【问题标题】:Get Element By Xpath (Geb)通过 Xpath 获取元素 (Geb)
【发布时间】:2013-04-01 22:37:32
【问题描述】:

我在通过 Xpath 获取 Element 时遇到问题。我将 Spock 与 Geb 一起使用。 我有 HTML:

<form class="form" style="display: block;">
<div class="crm-field">
<div class="req label">
<span class="required">*</span>
Моё Имя:
</div>
<div class="value">
<input class="signup" type="text" style="background-color: rgb(255, 255, 255);">
</div>
</div>

<div class="crm-field">
<div class="req label">
<span class="required">*</span>
Login:
</div>
<div class="value">
<input class="signup" type="text" style="background-color: rgb(255, 255, 255);">
</div>
</div>

<div class="crm-field">
<div class="req label">
<span class="required">*</span>
Мой E-mail:
</div>
<div class="value">
<input class="signup" type="text" style="background-color: rgb(255, 255, 255);">
</div>
</div>

<div class="crm-field">
<div class="req label">
<span class="required">*</span>
Пароль:
</div>
<div class="value">
<input class="signup" type="text" style="background-color: rgb(255, 255, 255);">
</div>
</div>

我需要获取&lt;input class="signup" type="text" style="background-color: rgb(255, 255, 255);"&gt; 来写入字符串。但是 Geb 只使用 CSS 搜索。 请帮助我获取所有输入以及如何将文本写入输入。

我用于获取元素:

 driver.findElement(By.xpath("//html/body/div[3]/div[2]/form/div[2]/div[2]/input")) << arg

但我没有得到。

【问题讨论】:

    标签: selenium groovy spock geb


    【解决方案1】:

    Geb 不支持 XPath 表达式,但您仍然可以使用 Geb 的indexed css selectors 获取所需的元素。请注意,与 XPath 基于 1 的索引相反,这些索引是基于 0 的。例如:

    $('form.form > div', 1).find('input')
    

    编辑

    实际上,Geb 现在是supports XPath expressions。请记住,它尚未发布,仅在最新快照中可用,0.10.1-SNAPHOT

    【讨论】:

      【解决方案2】:

      您还没有明确哪个需要,因为它们都相似。但是,在这种情况下,工作方式与位置 XPath 略有不同。

      这意味着,得到接近你需要的东西,然后围绕它移动 DOM。

      例如,如果您需要input,则需要Email 标签(大概是为了输入电子邮件)。您将首先获得Email 标签(它接近您需要的):

      //div[contains(text(), 'Email')]
      

      然后你会得到div next door,也就是直接在这个之后的div,进行以下查询:

      //div[contains(text(), 'Email')]/following-sibling:div
      

      然后你就可以说,我想要这个div里面的input,所以它变成:

      //div[contains(text(), 'Email')]/following-sibling:div/input[@type='text']
      

      然后,您已经唯一标识了 input 元素,您可以在其中输入 Email

      【讨论】:

        猜你喜欢
        • 2020-08-14
        • 2021-02-13
        • 2020-07-19
        • 2015-04-02
        • 2015-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多