单击所有结果链接

时间:2016-12-24 22:00:37

标签: java selenium

场景:访问Yahoo.com搜索hotmail,然后一次点击所有搜索页面。

我的代码:它只打印结果页面的链接。有没有办法点击页面2,3,4而没有页面?

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 个答案:

答案 0 :(得分:0)

在Selenium中,您可以使用类名来查找元素,在您的情况下,next链接包含类next,因此您需要以下内容:

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

转到下一页。

Fox示例此脚本打印所有链接(截至页面MAX_PAGES):

    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();
    }

您可以更改MAX_PAGES变量以进一步更改,或者如果您希望获取所有页面,则可以在我们到达最后一页时捕获硒将会抛出的NotSuchElementException