Как проверить HTML Geolocation API с помощью Selenium WebDriver для Java

Вы наверняка слышали о Selenium WebDriver, широко популярной библиотеке автоматизации браузера? А знаете ли вы, что с помощью Selenium WebDriver можно проверить функцию HTML Geolocation API? Если нет, продолжайте читать, и скоро вы узнаете как!

Рисунок 1: API геолокации запрашивает разрешения

Настройка

В этом кратком руководстве мы будем использовать следующий пример Java-приложения, размещенный на GitHub: Java Selenium Examples

Начните с клонирования проекта и открытия его в Eclipse или Intellij IDEA. Я буду использовать Eclipse для этого урока.

Примечание: Если вы хотите работать с другим Java-приложением, не стесняйтесь.

Настройка переменных среды

Если вы используете Eclipse, выполните следующие шаги, чтобы пути к локальным установкам geekodriver и firefox.bin были установлены:

  1. Перейдите на страницу Run Configurations через Run -> Run Configurations.
  2. Выберите конфигурацию JUnit, которую вы планируете использовать при выполнении тестов
  3. Перейдите на вкладку Environment.
  4. Нажмите на Add и введите следующие пары ключ/значение:
  5. Нажмите Apply, чтобы сохранить изменения.

Тестирование

Перейдем к классу src.com.codinginformer.test.SeleniumGeolocation и пройдемся по его методам, начиная с метода @Before:

    @Before
    public void initFirefox() {
        Properties properties = new Properties();
        System.setProperty("webdriver.gecko.driver", System.getenv("GEEKODRIVER_PATH"));
        System.setProperty("webdriver.firefox.bin", System.getenv("FIREFOX_PATH"));
        WebDriver driver = new FirefoxDriver();
    }
Вход в полноэкранный режим Выход из полноэкранного режима

Приведенный выше метод устанавливает свойства для geckodriver. Ему нужен локальный путь к исполняемому файлу geckodriver, установленный в свойстве webdriver.gecko.driver, а также исполняемый файл firefox, установленный там, где находится ваш локальный исполняемый файл firefox.
Наконец, мы инстанцируем класс FirefoxDriver() в переменную driver.

Далее рассмотрим метод checkGeolocation():

    @Test
    public void checkGeolocation() {
        String baseUrl = "https://selenium-testing-website.herokuapp.com/geolocation";

        FirefoxProfile geoDisabled = new FirefoxProfile();
        geoDisabled.setPreference("geo.enabled", true);
        geoDisabled.setPreference("geo.provider.use_corelocation", true);
        geoDisabled.setPreference("geo.prompt.testing", true);
        geoDisabled.setPreference("geo.prompt.testing.allow", true);
        DesiredCapabilities capabilities = DesiredCapabilities.firefox();
        capabilities.setCapability(FirefoxDriver.PROFILE, geoDisabled);

        @SuppressWarnings("deprecation")
        WebDriver driver = new FirefoxDriver(capabilities);

        driver.get(baseUrl);

        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

        driver.findElement(By.id("get-geolocation")).click();

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

        Assert.assertNotNull(driver.findElement(By.id("lat-value")).getText());
        Assert.assertNotNull(driver.findElement(By.id("long-value")).getText());
    }
Вход в полноэкранный режим Выход из полноэкранного режима

Вот пояснение к приведенному выше тесту:

  • FirefoxProfile geoDisabled = new FirefoxProfile();: Класс FirefoxProfile представляет собой коллекцию настроек, кастомизаций, дополнений и других параметров персонализации, которые могут быть сделаны в браузере Firefox. Для наших целей тестирования HTML Geolocation API нам необходимо включить следующие настройки:

    • geo.enabled
    • geo.provider.use_corelocation
    • geo.prompt.testing
    • geo.prompt.testing.allow
  • Затем мы должны добавить экземпляр FirefoxProfile к экземпляру класса DesiredCapabilities, который представляет собой класс, используемый для установки свойств браузеров с целью проведения тестирования веб-приложений (подробнее о DesiredCapabilities в этой замечательной статье блога).

  • Поскольку выражение new FirefoxDriver(capabilities) теперь устарело, мы можем добавить декоратор @SuppressWarnings("deprecation"), чтобы заглушить это предупреждение

  • driver.get(baseUrl);: Метод get() используется для запуска новой сессии браузера по указанному URL. Этот URL специально выбран, поскольку он содержит раздел Geolocation, который предлагает пользователю модальное окно подтверждения для отслеживания местоположения пользователя

  • driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS): Первый метод implicitlyWait() мы используем для указания Selenium WebDriver подождать 2 секунды перед продолжением выполнения. Это делается для того, чтобы дать достаточно времени для загрузки страницы

  • driver.findElement(By.id("get-geolocation")).click();: Здесь мы определяем кнопку Geolocation с помощью метода By.id(). Затем мы нажимаем на кнопку с помощью метода click().

  • Assert.assertNotNull(driver.findElement(By.id("lat-value")).getText());: Подождав 2 секунды, мы используем By.id для определения двух элементов <p>, которые содержат значения долготы и широты текущего местоположения пользователя.

Теперь просто щелкните правой кнопкой мыши на файле SeleniumGeolocation.java и выберите Run As -> JUnit Test, чтобы запустить наш тест.

Рисунок 2: Начальная страница


Рисунок 3: Показаны координаты геолокации

Рисунок 4: Наш тест JUnit проходит

Таким образом, мы смогли проверить API геолокации с помощью Selenium WebDriver!

Поздравляем, если вам удалось заставить эту функциональность работать. Если нет, оставьте комментарий в разделе комментариев, и я свяжусь с вами, если найду время.

Заключение

Спасибо, что прочитали эту статью!

Если у вас возникли вопросы или проблемы, пожалуйста, оставьте комментарий в этой статье, и я обязательно вам отвечу, когда найду время.

Если вы нашли эту статью полезной, пожалуйста, поделитесь ею и не забудьте следить за мной в Twitter и GitHub, связаться со мной в LinkedIn и подписаться на мой канал YouTube.

Оцените статью
devanswers.ru
Добавить комментарий