2

我在通过 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>

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

我用于获取元素:

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

但我没有得到。

4

2 回答 2

4

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

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

编辑

实际上,Geb 现在支持 XPath 表达式。请记住,它尚未发布,仅在最新快照中可用,0.10.1-SNAPHOT.

于 2013-04-02T12:22:07.463 回答
1

你还没有说清楚你需要一个,因为它们都是相似的。但是,在这种情况下,工作方式与位置 XPath 略有不同。

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

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

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

然后你会得到这个的div 隔壁,即div直接在这个之后,进行以下查询:

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

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

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

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

于 2013-04-02T09:44:27.507 回答