Вы наверняка слышали о Selenium WebDriver, широко популярной библиотеке автоматизации браузера? А знаете ли вы, что с помощью Selenium WebDriver можно проверить функцию HTML Geolocation API? Если нет, продолжайте читать, и скоро вы узнаете как!
Рисунок 1: API геолокации запрашивает разрешения
Настройка
В этом кратком руководстве мы будем использовать следующий пример Java-приложения, размещенный на GitHub: Java Selenium Examples
Начните с клонирования проекта и открытия его в Eclipse или Intellij IDEA. Я буду использовать Eclipse для этого урока.
Примечание: Если вы хотите работать с другим Java-приложением, не стесняйтесь.
Настройка переменных среды
Если вы используете Eclipse, выполните следующие шаги, чтобы пути к локальным установкам geekodriver
и firefox.bin
были установлены:
- Перейдите на страницу Run Configurations через
Run
->Run Configurations
. - Выберите конфигурацию
JUnit
, которую вы планируете использовать при выполнении тестов - Перейдите на вкладку
Environment
. - Нажмите на
Add
и введите следующие пары ключ/значение: - Нажмите
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.