2016-09-08 14 views
1

XPathを使用せずにテーブルを反復処理する方法はありますか? 現時点では、私はこのようなforループで反復処理しています:XPathを使用せずにテーブル型要素のアドレスを見つける方法

String a = "//*[@id='mainData']/table/tbody/tr["; 
String b = "]/td[2]"; 
int[] comparison = new int[101]; 
for (int i = 1; i <= 100; i++) { 
    String c = a + Integer.toString(i) + b; 
    WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(c))); 
     correct[i] = element.getText(); 

しかし、私は(.//*[@class='x ']のような)ダイナミックXPathingを使用したいと思います。しかし、どのようにして列アドレスを見つけることができますか?列をどのように反復するのですか?

+0

あなたは完全にXPathを避ける方法を求めているか、一度にすべての行を取得する方法を探していると、その後に頼ることなくデータを反復処理もうXPaths? 質問が定式化された方法で与えられた行ごとに行ごとまたは列ごとに反復するかどうかは不明です。 – sokkyoku

+0

私はFirebugで生成されたxpathsの代わりに動的なxPathingを使いたいとします。そして、私は配列内の列からすべての要素をコピーする必要があります。だから私は列を繰り返し、配列内の各行から結果を得る必要があります。 – Tudor

+0

@metarで提供されているソリューションは、数時間で最適化されたソリューションでこれに戻ってきます。@metarで提供されているソリューションは、非常に効率が悪く、すでに行ったことよりも優れていません。 – sokkyoku

答えて

1

あなたのようなあなたのテーブルを反復処理できます。

// count number of rows 
int sizeRows = driver.findElements(By.xpath("//*[@id='mainData']/table/tbody/tr")).size(); 

// iterate rows 
for(int tableRow = 1; tableRow <= sizeRows; tableRow++) { 
    String rowLocator = String.format("//*[@id='mainData']/table/tbody/tr[%d]", tableRow); 

    String column1 = driver.findElement(By.xpath(rowLocator+"/td[1]")).getText().trim(); 
    String column2 = driver.findElement(By.xpath(rowLocator+"/td[2]")).getText().trim(); 
.. 
} 
関連する問題