2016-05-24 1 views
0

Lorsque j'exécute le programme suivant, pourquoi '0' est-il imprimé sur la console? Je m'attendais à ce que '1' soit imprimé car je m'attendais à ce que la méthode findElements() trouve un lien utilisant le chemin xpath. L'expression xpath est-elle incorrecte? J'ai obtenu l'expression en utilisant Firefox, Firebug, et Firepath, en sélectionnant l'élément link et en copiant le xpath donné.Pourquoi Selenium ne trouve-t-il pas d'élément par 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

Ce qui est censé être retourné par le XPath? –

+0

Je souhaite que XPath renvoie l'élément Web du premier lien de résultats de recherche google. (Je voudrais alors développer le programme pour cliquer sur l'élément web.) – Martin

+1

utiliser 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 ce xpath uor xpath ne me semble pas correct, ci-dessus xpath est également donné par firebug –

Répondre

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") 

Ce travail est mauvais avec XPath, un peu de changement sur le site Web et votre code ne fonctionnerait pas! essayer de le faire plus dynamique trouver l'ID ou le nom de tag le plus proche et continuer à partir de là, pouvez-vous partager votre source html?

+0

Merci pour le conseil Leon Barkan. Il y a beaucoup de html pour cette page google donc je ne l'ai pas inclus, mais j'ai ajouté une capture d'écran de l'outil Firebug (y compris l'outil Firepath) pour montrer où je reçois le xpath. – Martin

2

Essayez de mettre les éléments suivants comme XPath au lieu du chemin réel: // * [@ id = "RSO"]/div [2]/div [1]/div/h3/a

1

Je voudrais utiliser un simple xpath comme html/body//h3/a. Vous pouvez également utiliser l'extension FirePath de FireBug pour créer et évaluer des xpaths.

1

Simplest XPath Je pourrais venir avec pour le premier lien à la recherche google:

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

Merci Richard - J'ai utilisé celui-ci maintenant, tellement plus agréable à regarder et à utiliser! – Martin