2016-12-24 4 views
2

Szenario: Gehen Sie zu Yahoo.com, suchen Sie nach Hotmail und klicken Sie nacheinander auf alle Suchseiten.Klicken Sie auf alle Ergebnislinks

Mein Code: Es druckt nur den Link der Ergebnisseiten. Gibt es eine Möglichkeit, Seiten 2,3,4 zu klicken, während keine Seite mehr übrig ist?

public class QAJob { 

    @Test 
    public void jobSearch(){ 
     WebDriver driver= new FirefoxDriver(); 
     driver.get("https://yahoo.com"); 
     driver.findElement(By.id("uh-search-box")).sendKeys("hotmail"); 
     driver.findElement(By.id("uh-search-button")).click(); 
     driver.manage().window().maximize(); 
     driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 

     //scroll down 
     JavascriptExecutor jse = (JavascriptExecutor) driver; 
     jse.executeScript("window.scrollBy(0,1000)", ""); 

     List<WebElement> result_pages=driver.findElements(By.xpath("//div[contains(@class,'pagination')]//a[contains(@title,'')]")); 

     for (WebElement e: result_pages){ 

      Actions action= new Actions(driver); 

      WebElement search_results=driver.findElement(By.xpath("//div[contains(@class,'pagination')]//a[contains(@title,'')]")); 
      System.out.println(e.getAttribute("outerHTML"));  
     } 
    } 
} 
+1

Was meinst du 'alle Suchseiten einzeln '? Mehrere Klicks gleichzeitig? – Andersson

+0

Ich verstehe Ihr Problem nicht gut, was ich verstanden habe, dass Sie nicht auf den Link klicken können? Verwenden Sie einfach diesen Code-Link innerhalb Ihrer for-Schleife: e.click() –

+0

Ich kann den XPath von Seite 2,3,4 finden und hart Code es, lieber möchte ich auf Seite 2 klicken, dann Seite 3, dann die nächste Seite, damit ich den xpath nicht mehrfach codieren muss, mehrere Klicks gleichzeitig. –

Antwort

0

In Selenium Sie die Klassennamen, das Element zu finden, in Ihrem Fall verwenden können, muss der next Link, um die Klasse next, so müssen Sie so etwas wie:

driver.findElement(By.className("next").click(); 

zum nächsten zu erhalten Seite.

Fox Beispiel dieses Skript (bis Seite MAX_PAGES) alle Links drucken:

int MAX_PAGES = 3; 
    driver.get("https://yahoo.com"); 
    driver.findElement(By.id("uh-search-box")).sendKeys("hotmail"); 
    driver.findElement(By.id("uh-search-button")).click(); 
    driver.manage().window().maximize(); 
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); 

    for (int i = 0; i < MAX_PAGES; i++) { 
     for (WebElement link : driver.findElements(By.cssSelector("h3.title > a"))) { 
      System.out.println("Title: " + link.getText() + " link" + link.getAttribute("href")); 
     } 
     driver.findElement(By.className("next")).click(); 
    } 

Sie können die MAX_PAGES Variable ändern, weiter zu gehen, oder wenn Sie alle Seiten bekommen möchten, können Sie die NotSuchElementException fangen dass Selen wird werfen, wenn wir die letzte Seite erreichen.

+0

Vielen Dank für Ihre Erklärung, ich war in der Lage, Ihre Lösung zu verwenden, zwicken Sie es ein bisschen und verwenden Sie es. –