2016-05-24 94 views
0

當我運行以下程序時,爲什麼'0'輸出到控制檯?我期望'1'被打印,因爲我期望findElements()方法使用xpath來查找鏈接。 xpath表達式是否不正確?通過選擇鏈接元素並複製給定的xpath,我得到了使用Firefox,Firebug和Firepath的表達式。爲什麼Selenium不能通過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元素。 (我會然後展開程序點擊web元素。) – Martin

+1

使用html/body/div [1]/div [5]/div [4]/div [7]/div [1]/div [3]/div/div [3]/div [2]/div/div/div/div [2]/div [1]/div/h3/a此xpath u或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") 

這是使用XPath錯誤的工作,在網站上一個小小的變化,你的代碼是行不通的!儘量做到更動態找到最接近的ID或標籤名稱,並繼續從那裏,你可以分享你的HTML源?

+0

感謝提示Leon Barkan。該頁面有很多html,所以我沒有包含它,但我添加了Firebug工具(包括Firepath工具)的屏幕截圖,以顯示我在哪裏獲取xpath。 – Martin

2

嘗試把以下作爲xpath的而不是實際的路徑: // * [@ ID = 「RSO」]/DIV [2]/DIV [1]/DIV/H3 /一個

1

我會使用簡單的xpath,如html/body//h3/a。 您還可以使用FireBug的FirePath擴展來構建和評估xpath。

1

最簡單的XPath我能想出在谷歌搜索第一個鏈接:

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

感謝理查德 - 我現在已經使用了這個,非常好看,並使用! – Martin

相關問題