【问题标题】:How to choose an address from the auto suggestion of google map using Selenium and Java如何使用 Selenium 和 Java 从谷歌地图的自动建议中选择地址
【发布时间】:2020-05-03 17:36:22
【问题描述】:

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

这是我的 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");

【问题讨论】:

  • edit您的问题并包含相关的HTML。

标签: java selenium xpath css-selectors webdriverwait


【解决方案1】:

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

driver.findElements(By.cssSelector(".pac-item")).get(0).click();

【讨论】:

  • 我试过这个选项,但首先有一个错误:它不是 ("...")[0] 而是 ("...").get(0) 因为结果是一个数组而不是列表:)
【解决方案2】:

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

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

实际上,当您键入所需的文本时,如果选项只有一个,您可以告诉机器人按下箭头以选择选项。正如您在我的示例中看到的那样,文本还没有准备好。它是“Indian Drive, Keysborough VIC”,而不是“Indian Drive, Keysborough VIC, Australia”,因为我想看到这个建议。因此,要得出结论,如果您将输入文本并且结果只有一个(唯一),此代码将始终通过按下箭头按钮 (sendKeys(Keys.ARROW_DOWN)) 从列表中选择选项。

如果您需要进一步升级,here 是此建议生成器的官方 Google 页面。

【讨论】:

    【解决方案3】:

    pac-matchedauto suggestion 上的click() 需要为elementToBeClickable() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

    • cssSelector:

      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();
      
    • 浏览器快照:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-22
      • 2019-12-30
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2014-08-28
      • 2021-04-12
      • 2011-05-09
      相关资源
      最近更新 更多