java - 如何在 selenium webdriver for java 中通过索引查找元素

标签 java selenium selenium-webdriver

我正在尝试自动化 Google 图片页面:

https://www.google.com/search?q=pluralsight&biw=1416&bih=685&source=lnms&tbm=isch&sa=X&ei=qGd6VN6bEZTooAT7q4C4BQ&sqi=2&ved=0CAgQ_AUoAw

所有图像都有相同的类但没有 id,结果不断变化。所以我希望能够根据索引点击图片。

我知道如何在 C# 中执行...但我不知道如何在 Java 中指定索引。当我尝试选择一个超过 0 的索引时,出现 IndexOutOfBounds 错误,但我不知道为什么

WebElement image = chromeDriver.findElement(By.className("rg_di"));
WebElement imageLink = image.findElements(By.tagName("a")).get(1);
imageLink.click();

这是我使用的整个代码...任何帮助将不胜感激:

    System.setProperty("webdriver.chrome.driver", "/Users/user/chromedriver");
    WebDriver chromeDriver = new ChromeDriver();
    chromeDriver.get("http://www.google.com");

    WebElement searchBox = chromeDriver.findElement(By.id("gbqfq"));
    searchBox.sendKeys("pluralsight");
    searchBox.sendKeys(Keys.RETURN);

    chromeDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    WebElement imagesLink = chromeDriver.findElement(By.linkText("Images"));
    imagesLink.click();

    WebElement image = chromeDriver.findElement(By.className("rg_di"));
    WebElement imageLink = image.findElements(By.tagName("a")).get(1);
    imageLink.click();

任何帮助将不胜感激

最佳答案

在您的代码中:

WebElement image = chromeDriver.findElement(By.className("rg_di"));

将返回在页面上找到的第一个类为“rg_di”的元素。

那个元素只有一个<a href=... /a>标签在里面。

您收到 IndexOutOfBounds 异常,因为您要求第二个(基于零的索引)。如果您将最终 WebElement 更改为:

WebElement imageLink = image.findElements(By.tagName("a")).get(0);

只要稍作改动,代码就可以正常工作。

这是我的快速版本(注意缺少存储元素,我只需要用 WebElements 做一件事):

public static void main(String[] args) {
    // I don't have Chrome installed >.<
    WebDriver driver = new FirefoxDriver();

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

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

    WebElement searchBox = driver.findElement(By.id("gbqfq"));
    searchBox.sendKeys("pluralsight");
    searchBox.sendKeys(Keys.RETURN);

    driver.findElement(By.linkText("Images")).click();

    WebElement image = driver.findElement(By.className("rg_di"));
    image.findElements(By.tagName("a")).get(0).click();

    // super-shortened version:
    // driver.findElement(By.className("rg_di")).findElements(By.tagName("a")).get(0).click();
}

关于java - 如何在 selenium webdriver for java 中通过索引查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208872/

相关文章:

python - 如何使用 selenium 和 python 从下拉列表中获取值列表

Java 在 Windows 资源管理器中选择文件?

java - 我的 JRadioButton 在我运行时不显示,但当我单击该区域时它会显示

java - 无法将 64 位二进制数解析为长

java - J单元。并行运行。但是所有的测试方法都处理单例实例。怎么解决?

java - 在 eclipse Mars IDE 上通过 selenium webdriver 启动 Firefox 时,Firebug 不显示。

java - Selenium WebDriver - 无法使用 AutoIT 上传文件

java - 如何在 Ext JS4 中按行在桌面上排列图标

angularjs - webdriver-manager 启动完成时运行 Protractor

java - 如何使用 Selenium 修复 Edge 浏览器中的 ElementNotVisibleException?