web-dev-qa-db-fra.com

Sélénium webdriver cliquez sur google recherche

Je cherche le texte "Cheese!" sur la page d'accueil de google et je ne sais pas comment puis-je cliquer sur les liens recherchés après avoir appuyé sur le bouton de recherche. Par exemple, je voulais cliquer sur le troisième lien en partant du haut de la page de recherche. Comment puis-je trouver le lien et cliquer dessus. Mon code jusqu'ici:

package mypackage;

import org.openqa.Selenium.By; 

import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.WebElement; 
import org.openqa.Selenium.support.ui.ExpectedCondition;
import org.openqa.Selenium.chrome.ChromeDriver; 
import org.openqa.Selenium.support.ui.WebDriverWait;

public class myclass {

    public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", "C:\\Selenium-Java-2.35.0\\chromedriver_win32_2.2\\chromedriver.exe");

         WebDriver driver = new ChromeDriver(); 
         driver.get("http://www.google.com"); 
         WebElement element = driver.findElement(By.name("q"));
         element.sendKeys("Cheese!");
         element.submit();

         //driver.close();
    }



}
13
min2bro

Google réduit leurs classes css, etc., il n'est donc pas facile de tout identifier.

Aussi vous avez le problème que vous devez "attendre" jusqu'à ce que le site montre le résultat . Je le ferais comme ceci:

public static void main(String[] args) {

    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.google.com");
    WebElement element = driver.findElement(By.name("q"));
    element.sendKeys("Cheese!\n"); // send also a "\n"
    element.submit();

    // wait until the google page shows the result
    WebElement myDynamicElement = (new WebDriverWait(driver, 10))
              .until(ExpectedConditions.presenceOfElementLocated(By.id("resultStats")));

    List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a"));

    // this are all the links you like to visit
    for (WebElement webElement : findElements)
    {
        System.out.println(webElement.getAttribute("href"));
    }
}

Cela vous imprimera:

24
d0x

Il y aurait plusieurs façons de trouver un élément (dans votre cas, le troisième résultat de recherche Google).

L’un des moyens serait d’utiliser Xpath

#For the 3rd Link
driver.findElement(By.xpath(".//*[@id='rso']/li[3]/div/h3/a")).click();
#For the 1st Link
driver.findElement(By.xpath(".//*[@id='rso']/li[2]/div/h3/a")).click();
#For the 2nd Link
driver.findElement(By.xpath(".//*[@id='rso']/li[1]/div/h3/a")).click();

Les autres options sont 

By.ByClassName 
By.ByCssSelector 
By.ById
By.ByLinkText
By.ByName
By.ByPartialLinkText 
By.ByTagName 

Pour mieux comprendre chacun d’entre eux, vous devriez apprendre le sélénium sur quelque chose de plus simple que la page de résultats de recherche Google.

Exemple - http://www.google.com/intl/gu/contact/

Pour interagir avec le champ de saisie de texte avec l’espace réservé "Comment pouvons-nous vous aider? Demandez ici." Vous pourriez le faire de cette façon - 

# By.ByClassName 
driver.findElement(By.ClassName("searchbox")).sendKeys("Hey!");
# By.ByCssSelector 
driver.findElement(By.CssSelector(".searchbox")).sendKeys("Hey!");
# By.ById
driver.findElement(By.Id("query")).sendKeys("Hey!");
# By.ByName
driver.findElement(By.Name("query")).sendKeys("Hey!");
# By.ByXpath
driver.findElement(By.xpath(".//*[@id='query']")).sendKeys("Hey!");
2
Amey

D'après une inspection rapide de Google Web, il s'agirait d'un chemin CSS vers les liens dans la liste de pages. 

ol[id="rso"] h3[class="r"] a

Donc, vous devriez faire quelque chose comme

String path = "ol[id='rso'] h3[class='r'] a";
driver.findElements(By.cssSelector(path)).get(2).click();

Cependant, vous pouvez également utiliser xpath, ce qui n'est pas vraiment recommandé, ainsi que les localisateurs JQuery, mais je ne suis pas sûr de pouvoir les utiliser ailleurs sauf dans Arquillian Graphene

1
Petr Mensik
@Test
public void google_Search()
{
    WebDriver driver;
    driver = new FirefoxDriver();
    driver.get("http://www.google.com");
    driver.manage().window().maximize();

    WebElement element = driver.findElement(By.name("q"));
    element.sendKeys("Cheese!\n");
    element.submit();

    //Wait until the google page shows the result
    WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("resultStats")));

    List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a"));

    //Get the url of third link and navigate to it
    String third_link = findElements.get(2).getAttribute("href");
    driver.navigate().to(third_link);
}
1
Mahesh Sutar
public class GoogleSearch {

    public static void main(String[] args) {

        WebDriver driver=new FirefoxDriver();
        driver.get("http://www.google.com");
        driver.findElement(By.xpath("//input[@type='text']")).sendKeys("Cheese");   
        driver.findElement(By.xpath("//button[@name='btnG']")).click();
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); 
        driver.findElement(By.xpath("(//h3[@class='r']/a)[3]")).click();
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); 
    }
}
0
Anand

La plupart des réponses sur cette page sont obsolètes.
Voici une version mise à jour de python pour rechercher google et obtenir tous les résultats href:

import urllib.parse
import re
from Selenium import webdriver
driver.get("https://google.com/")
q = driver.find_element_by_name('q')
q.send_keys("always look on the bright side of life monty python")
q.submit();
sleep(1)
links= driver.find_elements_by_xpath("//h3[@class='r']//a")
for link in links:
    url = urllib.parse.unquote(webElement.get_attribute("href")) # decode the url
    url = re.sub("^.*?(?:url\?q=)(.*?)&sa.*", r"\1", url, 0, re.IGNORECASE) # get the clean url

Veuillez noter que l'élément id/name/class (@class='r') ** changera en fonction de l'agent utilisateur **.
Le code ci-dessus utilisé PhantomJS agent d'utilisateur par défaut. 

0
Pedro Lobito

Xpath simple pour localiser le champ de recherche Google est: Xpath = // span [text () = 'Recherche Google']

0
Anand