2013-04-01 247 views
2

我有通過Xpath獲取元素的問題。我用Geb使用Spock。 我有HTML:通過Xpath獲取元素(Geb)

<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

Geb不支持XPath表達式,但仍然可以使用Geb的indexed css selectors獲取所需的元素。請注意,與基於XPath 1的索引相反,這些索引是0。例如:

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

編輯

其實,現在蓋布supports XPath expressions。請記住,它尚未發佈,並且僅在最新快照0.10.1-SNAPHOT中提供。

+0

這是工作!!!謝謝你! – plsgogame

1

您還沒有清楚哪一個你需要,因爲它們都是相似的。但是,在這種情況下,工作方式與位置XPath稍有不同。

這意味着,獲得接近你需要的東西,並圍繞它移動DOM。

例如,如果您需要input需要Email標籤(大概是輸入電子郵件)。你會首先得到Email標籤(這是附近你的需要):

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

你會再拿到div隔壁到這一點,也就是直接在此一個後div,使這查詢:

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

,那麼你已經可以說,好,我想這裏面divinput,所以就變成:

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

然後,您可以唯一標識input元素,您可以在Email中輸入元素。

+0

我嘗試這個變體,但我有錯誤。 -_ \\ – plsgogame