2016-10-19 26 views
0

私はこれが問題に近づく最も良い方法であるかどうかはわかりませんが、xpath(またはcss)を使用する方法を探しています一連の入力要素を探し、何らかの形でそれらのすべてを反復処理し、テキストを入力します。xpathを使用して複数の要素を入力するにはセレンを使用してください

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

I入力でき、以下でのxpathで見つかった要素のうち最初に出現した:

私はこれを使って要素を見つけることができる午前

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

:次のような

何か

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

あなたはちょうどあなたがあまりにもテキストを送信している要素のXPathのと交換して、次の

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'); 
    } 
}); 

を行うことができます。通常、.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

関連する問題