2016-05-24 12 views
0

次のプログラムを実行すると、コンソールに '0'が表示されるのはなぜですか?私はfindElements()メソッドがxpathを使ってリンクを見つけることを期待していたので、 '1'が出力されると思いました。 xpath式が正しくありませんか? Firefox、Firebug、Firepathを使って、リンク要素を選択し、与えられたxpathをコピーすることで表現を得ました。 XPathのと間違って仕事だなぜセレンはxpathで要素を見つけることができませんか?

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.By; 
import java.util.List; 

public class SeleniumSearch { 
    static WebDriver driver = new FirefoxDriver(); 

    public static void main(String[] args) { 

     try { 
      driver.get("http://www.google.co.uk/"); 
      submitSearch("selenium"); 
      getHit(); 
     } 
     finally { 
      driver.close(); 
     } 
    } 

    static void submitSearch(String search) { 
     WebElement searchBox = driver.findElement(By.name("q")); 
     searchBox.sendKeys(search); 
     searchBox.submit(); 
    } 

    static void getHit() { 
     List<WebElement> hits = driver.findElements(By.xpath("html/body/div[5]/div[4]/div[9]/div[1]/div[3]/div/div[3]/div[2]/div/div/div/div[2]/div[1]/div/h3/a")); 
     System.out.println(hits.size()); 
    } 
} 

Screen shot of the xpath given by Firepath

+1

は何は、XPathによって返されることになっていますか? –

+0

私はXPathに最初のGoogle検索結果リンクのWeb要素を返すようにしたいと思います。 (div要素をクリックするようにプログラムを展開します) – Martin

+1

html/body/div [1]/div [5]/div [4]/div [7]/div [1]/div [3]/div/div [1]/div/div/div [3]/div [2]/div/div/div/div [2]/div/h3/aこのxpath uor xpathは私にはうまく見えません。 firebug –

答えて

1
xpath("html/body/div[5]/div[4]/div[9]/div[1]/div[3]/div/div[3]/div[2]/div/div/div/div[2]/div[1]/div/h3/a") 

は、一つの小さなウェブサイト上の変化とあなたのコードは動作しないでしょう!それをもっと動的にしようとすると、最も近いIDやタグ名を見つけてそこから続けると、あなたのhtmlソースを共有できますか?

+0

チップLeon Barkanをありがとう。私はそれを含めていないので、そのGoogleページのhtmlがたくさんありますが、私はxpathを取得する場所を示すFirebugツール(Firepathツールを含む)のスクリーンショットを追加しました。 – Martin

2

代わりに実際のパスのXPathのを次のように入れてみてください: // * [ID @ = "RSO"]/DIV [2]/DIV [1]/DIV/H3/

1

私は希望html/body//h3/aのような簡単なxpathを使用してください。 FirePathのFirePath拡張機能を使用して、xpathをビルドして評価することもできます。

1

私はGoogle検索の最初のリンクのために出てくる可能性が最も簡単なのxpath:

(//h3/a)[1] 
+0

リチャードに感謝 - 私はこの1つを使ったので、見て使用するのがずっとうれしいです! – Martin

関連する問題