2016-05-24 11 views
0

Когда я запускаю следующую программу, почему «0» печатается на консоли? Я ожидал, что «1» будет напечатан, так как я ожидал, что метод findElements() найдет ссылку, используя xpath. Является ли выражение xpath неправильным? Я получил выражение, используя Firefox, Firebug и Firepath, выбрав элемент link и скопировав данный xpath.Почему 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.) – 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 uor xpath не выглядит нормально для меня, выше 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, один немного изменить на веб-сайте и ваш код не будет работать! попытайтесь сделать это более динамичным, найдите ближайший идентификатор или имя тега и продолжите оттуда, можете ли вы поделиться своим источником html?

+0

Спасибо за отзыв Leon Barkan. Существует много html для этой страницы google, поэтому я ее не включил, но я добавил скриншот инструмента Firebug (включая средство Firepath), чтобы показать, где я получаю xpath. – Martin

2

Попробуйте положить следующий как XPath вместо фактического пути: // * [@ ид = "RSO"]/дел [2]/дел [1]/дел/h3/а

1

I Would используйте простой xpath, такой как html/body//h3/a. Вы также можете использовать FirePath расширение FireBug для построения и оценки xpaths.

1

Простейшее я мог XPath придумать для первого звена в поиске Google:

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

Спасибо, Ричард. Я использовал этот сейчас, гораздо приятнее смотреть и использовать! – Martin