2017-11-01 15 views
0

私はセレニウムとJavaを使用しています。正確な列を見つけて右クリックする必要がある表のセレクターを記述する必要があります。問題は、lstypeを使用して列がすべて異なる値を持つため、列を簡単に見つけることができますが、列を右クリックすることはできません。そのため、その下のボックスを直接クリックする必要があります。セレニウム - 別の要素に従って要素を選択

これは、テーブルがどのように見えるか、およそ次のとおりです。 Table

そして、これは、HTMLがどのように見えるかをおよそ次のとおりです。最初の部分で

<div class="head"> 
    <table> 
     <tbody> 
      <tr> 
       <td class="game" lstype="124"></td> 
       <td class="game" lstype="245"></td> 
       <td class="game" lstype="873"></td> 
      </tr> 
     </tbody> 
    </table> 
</div> 
<div class="body"> 
    <table id="extractBody"> 
     <tbody> 
      <tr> 
       <td class="game"></td> 
       <td class="game"></td> 
       <td class="game"></td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

TDのそれぞれは、(ヘッダボックスを参照してください。緑色)、2番目の部分のtdはそれぞれ実際にクリックできる要素です。

ヘッダーボックスにあるlstypeに従って、以下のボックスを取得する方法がわかりません。 私は3つの列として投稿しましたが、実際にはもっと多くの列があります。行と同じです。

私は助けていただきありがとうございます。私はそれがxpathsで行われるべきだと思うが、私が試したことは何も働いていない。

ありがとうございました!

答えて

2

だから、私はいくつかのxpathを使用して最初に行を選択できると仮定します。あなたは行に関する情報を表示していないので、私はそれがソートされていると思います。そして、行オブジェクトの上に私はあなたのノードがこの第二のノードであるので、もしこれが機能する方法は、XPathの

count(//td[@lstype='124']/preceding-sibling::td) + 1 

あなたの現在のノードの前にTD要素のカウントの下に、あるXPathの

.//table[@id='extractBody']//tr/td[count(//td[@lstype='124']/preceding-sibling::td) + 1] 

の下に使用します1を与えた後、列番号を得るために1を加えます。その後、我々はそのインデックスの要素を取得するには

.//table[@id='extractBody']//tr/td[desiredcount] 

を使用して、あなたはそれ

+0

ありがとうございました!これは多くの助けとなりました – StopTheRain

0

あなたはこのプラグインmozzila pluginを使用している2つの方法があります、それはすべての動きとクリック数とイベントを記録し、終了したら、あなたが望むようにそれをエクスポートするオプションがありますJavaクラスで。

他の方法は、body要素のすべてのチェックボックスにいくつかの一意の識別子を入れて、それを呼び出すことができますが、xpathは複雑ですが、他の2つのオプションが失敗した場合はxpathを適用する必要があります。

0

をクリックすることができます私は、最も簡単な方法は、クラスのゲーム

とTD要素のすべてを見つけることだと思います
List<WebElement> foo = webDriver.findElements(By.cssSelector("td.game"); 

次にあなたが欲しいものを見つけると、リスト全体の大きさの半分にそのインデックスを追加し、その要素をクリックするまで、要素を循環

int count =0; 
for(WebElement ele: foo){ 
if (ele.getAttribute("lstype").equals({searchTerm}) { 
    foo.get(count+(foo.size()/2)).click() 
} 
count++ 
} 

これは明らかに両方のテーブルに等しい数の要素があることを前提としています。