有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用selenium Java在谷歌搜索页面之间导航

我如何在谷歌上搜索内容,点击链接,然后返回搜索并点击下面的链接(不重复已经点击的链接),在页面完成链接后,导航到第2页并依次重复相同的步骤

到目前为止,我可以转到第一个链接,转到页面,然后返回仅搜索的链接列表

    package Search;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class GoogleSearch {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub


             System.setProperty("webdriver.ie.driver", "C:/Users/paulo.roberto/Documents/eclipse/Selenium/IEDriverServer.exe");
              DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
              caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
              WebDriver driver = new InternetExplorerDriver(caps);          
                driver.manage().window().maximize();
                driver.manage().deleteAllCookies();

            driver.get("https://www.google.com.br");

            driver.findElement(By.name("q")).sendKeys("test");
            driver.findElement(By.name("btnG")).click();

            WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("resultStats"))); 


            // find the number of pages
            int size = driver.findElements(By.cssSelector("[valign='top'] > td")).size();
            for(int j = 1 ; j < size ; j++) {
                if (j > 1) {// we don't need to navigate to the first page
                    driver.findElement(By.cssSelector("[aria-label='Page " + j + "']")).click(); // navigate to page number j
                }

                String pagesearch = driver.getCurrentUrl();

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

                for(int i=0;i<findElements.size();i++){
                    findElements= driver.findElements(By.xpath("//*[@id='rso']//h3/a"));                
                    findElements.get(i).click(); 

                    driver.navigate().to(pagesearch);
                    // or driver.navigate().back();
                }
            }



    }

}

控制台上的消息:

Started InternetExplorerDriver server (32-bit)
2.48.0.0
Listening on port 37101
10
10
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 0
  at java.util.ArrayList.rangeCheck(Unknown Source)
  at java.util.ArrayList.get(Unknown Source)
  at Search.GoogleSearch.main(GoogleSearch.java:48)

共 (1) 个答案

  1. # 1 楼答案

    可以使用嵌套循环。一个用于在结果页面之间导航,另一个用于单击结果

    // find the number of pages
    int size = driver.findElements(By.cssSelector("[valign='top'] > td")).size();
    for(int j = 1 ; j < size ; j++) {
        if (j > 1) {// we don't need to navigate to the first page
            driver.findElement(By.cssSelector("[aria-label='Page " + j + "']")).click(); // navigate to page number j
        }
    
        String pagesearch = driver.getCurrentUrl();
    
        List<WebElement> findElements = driver.findElements(By.xpath("//*[@id='rso']//h3/a"));
        System.out.println(findElements.size());
    
        for(int i=0;i<findElements.size();i++){
            findElements= driver.findElements(By.xpath("//*[@id='rso']//h3/a"));                
            findElements.get(i).click(); 
    
            driver.navigate().to(pagesearch);
            // or driver.navigate().back();
        }
    }