2016-10-19 23 views
0

我是新來的硒,所以我不知道這是否是解決問題的最佳方法,但我正在尋找一種方法來使用xpath(或css)來找到一系列輸入元素,並以某種方式迭代所有元素,然後在其中輸入一些文本。使用硒輸入多個元素使用xpath

類似如下:

<form> 
    value1 <input type="text" placeholder="value1"><br> 
    value2 <input type="text" placeholder="value2"><br> 
    value3 <input type="text" placeholder="value3"><br> 
</form> 

我能夠使用此定位元素:

var input = driver.findElement(By.xpath("//input[@type='text']")) 

我可以輸入通過的xpath與下列發現該元件第一次出現的:

input.sendKeys('Some text') 

這就是我卡住的地方。我不知道如何在第一個輸入字段後輸入值。

最終,我想要做的就是將文本發送到xpath過濾器定位的所有輸入字段。我認爲這可能是一個for循環,但我不知道如何使用webdriverjs使用的承諾管理器。

這是可能的還是有更好的方法來做到這一點?

+0

將會有一個findElements方法是你正在使用的複數。這將返回一個列表,您可以迭代並輸入值。奇異findelement將始終返回它在頁面中找到的第一個匹配元素。 – Grasshopper

+0

謝謝,這讓我更進一步。仍然試圖找出如何迭代元素。 – jmreicha

+0

看看這個答案http://stackoverflow.com/questions/18677516/finding-multiple-elements – Grasshopper

回答

0

我的幫助了它與其他在此帖子。這裏是工作代碼的樣子:

driver.findElements(By.css("input[type='text']")) 
.then(function (inputs) { 
    inputs.forEach(function (input) { 
     input.sendKeys(password) 
    }) 
}) 
1

你可以做以下

driver.findElements(By.xpath("<xpath>")).then(function(elem) { 
    for(var i=0; i<elem.length; i++){ 
     driver.findElements(By.xpath("<xpath>")).get(i).sendKeys('some Text'); 
    } 
}); 

與您要發送的文字太元素的XPath只需更換。通常,您可以使用.get()從.findElements()返回的元素列表中選擇一個特定元素。

+0

感謝您的回覆。我正在尋找發送文本到所有的元素,而不是一個特定的索引。有沒有簡單的方法來做到這一點? – jmreicha

+0

您可以迭代findElements()返回的所有元素,然後發送它,但無法一次全部發送。你將不得不使用某種形式的迭代。 :( – pretzo246

+0

很高興知道,我不介意分開發送它們,所以我會試着弄清楚如何遍歷所有元素,我不知道如何去做。 – jmreicha

1

對於所有具有通用選擇器的元素,如下所示,您應該嘗試使用forEach: -

driver.findElements(By.css("input[type='text']")).then(function(elements) { 
    elements.forEach(function (input) { 
     input.sendKeys('Some text'); 
    }) 
}); 

或者,如果你想使用promise做的一樣,你需要硒的承諾爲如下參考: -

var promise = require('selenium-webdriver').promise; 
var elements = driver.findElements(By.css("input[type='text']")) 
promise.all(elements).then(function (input) { 
    input.sendKeys('Some text'); 
}); 
+0

'.each'似乎是最乾淨的方法,但我得到了'TypeError:elements.each不是函數',不知道爲什麼。 – jmreicha

+0

@jmreicha對不起,應該是'forEach'。嘗試更新的答案,並讓我知道.. –

+0

我也這麼認爲,但由於某種原因,它仍然無法正常工作:/獲取TypeError:elements.forEach不是一個函數。 – jmreicha