通过Xpath获取元素(Geb)

时间:2013-04-01 22:37:32

标签: selenium groovy spock geb

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

但我没有得到。

2 个答案:

答案 0 :(得分:4)

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

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

修改

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

中可用

答案 1 :(得分:1)

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

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

例如,如果您需要input需要Email标签(可能是在电子邮件中输入)。您首先会获得Email标签(附近您需要的标签):

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

然后,您可以将div 隔壁添加到此,即直接在此div之后进行此查询:

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

然后你可以说,我想要input内的div,所以它变成了:

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

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