2016-08-06 12 views
0

異なる行のCity列の値を画像の下の表から印刷しようとしています。Selenium:Webtableの異なる行の値を印刷できません

以下のコードを使用しました。私のコードは、異なる都市を印刷する代わりに、「ドバイ」を4回印刷します。誰かがこれを修正する際に私を助けてくれる?

System.setProperty("webdriver.chrome.driver","C:\\Selenium\\Drivers\\chromedriver.exe"); 
WebDriver driver = new ChromeDriver(); 
driver.manage().window().maximize(); 

driver.get("http://toolsqa.com/automation-practice-table/"); 


WebElement body = driver.findElement(By.xpath("//*[@id='content']/table/tbody")); 
List<WebElement> rows = body.findElements(By.tagName("tr")); 
System.out.println(rows.get(0).findElement(By.xpath("//td[2]")).getText()); 
System.out.println(rows.get(1).findElement(By.xpath("//td[2]")).getText()); 
System.out.println(rows.get(2).findElement(By.xpath("//td[2]")).getText()); 
System.out.println(rows.get(3).findElement(By.xpath("//td[2]")).getText()); 

Table Image

答えて

1

実際にはあなたのコードは正しいですが、あなたのxpathで都市要素を取得するのに問題があります。

xpath //td[2]を使用して都市名を検索する場合は、毎回実際に2番目の列を検索していますが、毎回同じ都市名が表示されるためページ全体で検索しています。あなたは.xpathを提供する場合、それが唯一の要素コンテキストを検索しますので、あなたがそれ以外の場合は、文書を検索します、.//td[2] XPathを提供する必要が

は、ページ全体に意味し、ページ全体の出力に応じて、絶対に正しいです。あなたは印刷するだけで必要な場合

は今、すべての都市は以下のようにしてみてください: -

List<WebElement> cities = driver.findElements(By.xpath("//*[@id='content']/table/tbody//td[2]")); 

for(WebElement city : cities) 
{ 
System.out.println(city.getText()); 
} 
+0

詳細な説明はありがとうSaurabh。今、私のコードは完璧に動作します。 –

+0

@Saurabh '/ tbody // td [2]'が1つの要素(この場合はtr)をスキップしたように、xpathに '/'を指定すると、興味がありますか?また、市の列の値を印刷するのにも私の答えが働くでしょうか?私はセレンの専門家ではない。だから、私はちょうど興味があった。 – Harish

+0

@Harish '/'ルートノードから選択し、 '//'現在のノードからドキュメント内のノードを選択します。これは 'tbody'にあるときに選択すると一致します現在のノードでは、その後、私は '/'を使って、 'tbody'から要素を探すようになりました... –

0

市列の値を印刷するには、コードの下に試してみてください。

List<WebElement> rows = driver.findElements(By.xpath("//*[@id='content']/tbody/tr")); 
    for(int row = 0; row < rows.size(); row++){ 
     System.out.println(driver.findElement(By.xpath("//*[@id='content']/table/tbo‌​dy/tr[row]/td[2]")).getText()); 
    } 

はそれが役に立てば幸い!

+0

おかげハリッシュ解決のために。良い一日を過ごしてください:) –

関連する問題