2016-05-24 71 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

相关问题