これはおそらくあなたがやろうとしているものと似た実装をしていましたが、私の実装はおそらくXPathではなくCSSセレクタを使用しているために複雑です。私はこれが最適化されていないことを確信しています。
WebdriverIOのelementIdText()
とelementIdClick()
というメソッドを使用して、Web JSON要素の「テキスト値」を操作し、探しているものと一致した後、目的の要素をクリックします。
http://webdriver.io/api/protocol/elementIdText.html http://webdriver.io/api/protocol/elementIdClick.html
ステップ1 - あなたが仕事をしたいすべてのあなたの潜在的な要素を探す:
// Elements Query to return Elements matching Selector (titles) as JSON Web Elements.
// Also `browser.elements('<selector>')`
titles = browser.$$('<XPath or CSS selector>')
ステップ2 - サイクル要素をInnerHTMLのか、テキスト値を除去し、中にそれをプッシュします別の配列:
// Create an Array of Titles
var titlesTextArray = [];
titles.forEach(function(elem) {
// Push all found element's Text values (titles) to the titlesTextArray
titlesTextArray.push(browser.elementIdText(elem.value.ELEMENT))
})
ステップ3 - タイトルテキストの配列を循環する値あなたが探しているもの。ご希望の値をクリックしelementIdClick()関数を使用します。
//Loop through the titleTexts array looking for matching text to the desired title.
for (var i = 0; i < titleTextsArray.length; i++) {
if (titleTextsArray[i].value === title) {
// Found a match - Click the corresponding element that
// it belongs to that was found above in the Titles
browser.elementIdClick(titles[i].value.ELEMENT)
}
}
は、私は私が検索したかった(あなたの場合、特定の
title
に)私が意図したテキストを提供している機能の中にこのすべてを包みました。お役に立てれば!
同じタイトルのオブジェクトのリストがあり、配列の番号を使用して特定の要素をクリックしたいのですが? – dielieus
あなたのhtml /要素の構造を知らなくても、言うのは難しいですが、もっと "ユニークな"セレクタを探す必要があります。 「タイトルテキスト」がすべて消えなければならない場合、webdriverioはデフォルトで、希望のセレクタに一致する「最初の」要素を選択します。あなたはあなたの要素構造の例を挙げることができますか? CSSセレクタでは、リスト内の位置に基づいて要素を抜き取ることができる「nth-child(#)」セレクタを実行できますが、それは脆いやり方です。 – Denzik
はい、うまくいきます!だから私はリストを作成する必要はありません、要素などを取得する。私は要素をクリックする関数のパラメータとして子の番号を指定します。どうもありがとうございました! – dielieus