如何使用Selenium和Java从google地图的自动建议中选择地址

如何使用Selenium和Java从google地图的自动建议中选择地址,java,selenium,xpath,css-selectors,webdriverwait,Java,Selenium,Xpath,Css Selectors,Webdriverwait,我正在自动注册用户信息的网页。该页面要求在输入框中输入地址,然后谷歌地图将列出正确的地址。我必须选择谷歌地图地址。如何在硒中做到这一点。这是函数的图像 这是我用Selenium-Java编写的代码 public void signup() throws InterruptedException { driver.get("https://app.getjarvis.com.au/sign-up"); driver.manage().window().setSiz

我正在自动注册用户信息的网页。该页面要求在输入框中输入地址,然后谷歌地图将列出正确的地址。我必须选择谷歌地图地址。如何在硒中做到这一点。这是函数的图像

这是我用Selenium-Java编写的代码

public void signup() throws InterruptedException {
        driver.get("https://app.getjarvis.com.au/sign-up");
        driver.manage().window().setSize(new Dimension(801, 721));
        driver.findElement(By.id("addressInput")).click();
        driver.findElement(By.id("addressInput")).click();
        driver.findElement(By.id("addressInput")).sendKeys("Indian Drive, Keysborough VIC, Australia");
        Thread.sleep(3000);

        Select drpdwn = new Select(driver.findElement(By.id("addressInput")));
        drpdwn.selectByVisibleText("Indian Drive, Keysborough VIC, Australia");

我尝试了一些只有在您给出的文本是唯一的情况下才有效的方法:

import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.Select;
import java.lang.*;
import org.openqa.selenium.WebElement;
import java.util.*;


class Main {


    public static void main(String args[]) {

            System.setProperty("webdriver.gecko.driver", "/home/avionerman/Documents/Java/geckodriver");
            WebDriver driver = new FirefoxDriver();

            driver.get("https://app.getjarvis.com.au/sign-up");
            driver.manage().window().maximize();
            driver.findElement(By.id("addressInput")).click();
            driver.findElement(By.id("addressInput")).sendKeys("Indian Drive, Keysborough VIC, ");
            driver.findElement(By.id("addressInput")).click();

            try {
                Thread.sleep(3000);
                driver.findElement(By.id("addressInput")).sendKeys(Keys.ARROW_DOWN);
            } catch (InterruptedException e) {
                System.out.println("Error: " + e);
            }
    }
}
在Try/Catch功能中,我有以下几行:

driver.findElement(By.id("addressInput")).sendKeys(Keys.ARROW_DOWN);
实际上,当您键入所需的文本时,如果该选项只有一个,您可以对机器人说,按下箭头以选择该选项。正如你在我的例子中看到的,文本还没有准备好。这是“印第安路,凯斯伯勒维克”,而不是“印第安路,凯斯伯勒维克,澳大利亚”,因为我想看看这个建议。因此,为了确定您是否要输入文本,并且结果只有一个(唯一),此代码将始终通过按向下箭头按钮(sendKeys(Keys.arrow_down))从列表中选择选项


如果您需要进一步升级,请访问此建议生成器的官方谷歌页面

如果您知道地址下拉列表中的第一个选项是您想要的,您可以在执行发送键后执行此操作:

driver.findElements(By.cssSelector(".pac-item")).get(0).click();
单击匹配的pac上的()
,您需要对
元素进行归纳,使其可伸缩()
,您可以使用以下任一选项:

  • css选择器

    driver.get("https://app.getjarvis.com.au/sign-up");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#addressInput"))).sendKeys("Indian Drive, Keysborough VIC, Australia");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("span.pac-item-query>span.pac-matched"))).click();
    
  • xpath

    driver.get("https://app.getjarvis.com.au/sign-up");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='addressInput']"))).sendKeys("Indian Drive, Keysborough VIC, Australia");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='pac-item-query']/span[@class='pac-matched']"))).click();
    
  • 浏览器快照:


我尝试了此选项,但首先出现了一个错误:它不是(“…”[0],而是(“…”)。获取(0),因为结果是数组而不是列表:)请回答您的问题并包含相关的HTML。