2017-11-24 10 views
0

XPATHを使用して要素のリストを取得しようとしていますが、このリストからclassnameに基づいて子要素を取得してクリックします。私はNode.jsのを知っていませんが、Javaでは、あなたがして、目標を達成する必要があり構成されたxpathを使用して要素を見つけてそれをクリックする

var rowList = XPATH1 + className; 
var titleList = className + innerHTMLofChildElement; 

for(var i = 0; i < titleList.length; i++) { 
       if(titleList[i][0] === title) { 
        browser.click(titleList[i][0]); //I don't know what to do inside the click function 
      } 
     } 

答えて

0

これはおそらくあなたがやろうとしているものと似た実装をしていましたが、私の実装はおそらく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に)私が意図したテキストを提供している機能の中にこのすべてを包みました。お役に立てれば!

+0

同じタイトルのオブジェクトのリストがあり、配列の番号を使用して特定の要素をクリックしたいのですが? – dielieus

+0

あなたのhtml /要素の構造を知らなくても、言うのは難しいですが、もっと "ユニークな"セレクタを探す必要があります。 「タイトルテキスト」がすべて消えなければならない場合、webdriverioはデフォルトで、希望のセレクタに一致する「最初の」要素を選択します。あなたはあなたの要素構造の例を挙げることができますか? CSSセレクタでは、リスト内の位置に基づいて要素を抜き取ることができる「nth-child(#)」セレクタを実行できますが、それは脆いやり方です。 – Denzik

+0

はい、うまくいきます!だから私はリストを作成する必要はありません、要素などを取得する。私は要素をクリックする関数のパラメータとして子の番号を指定します。どうもありがとうございました! – dielieus

0

:titleListを想定し

titleList[i].findElementBy(By.className("classToFind")) 

[i]は、あなたから子要素を取得したいリストの要素であります

関連する問題