← Назад к вопросам

Как подменить локацию пользователя в браузере

1.0 Junior🔥 291 комментариев
#Веб-тестирование#Инструменты тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Подмена геолокации в браузере для тестирования

Подмена геолокации пользователя в браузере — это важная задача для QA-инженера при тестировании функциональности, зависящей от местоположения. Это позволяет проверять корректность отображения контента, работу геозависимых сервисов (доставка, погода, карты), а также тестировать сценарии с ограничениями по регионам (геоблокировка, локализованные цены). Вот основные подходы, которые я использую в своей практике.

Основные методы подмены локации

  1. Встроенные инструменты разработчика браузера (DevTools) — наиболее простой и популярный способ для ручного тестирования.
  2. Использование прокси и VPN на уровне ОС или браузера — подходит для интеграционного и системного тестирования.
  3. Мокание API геолокации на уровне JavaScript — мощный метод для автотестов (например, в Selenium WebDriver или Playwright).
  4. Специализированные расширения браузера — для быстрого ручного тестирования без глубоких технических манипуляций.

Детальный разбор методов с примерами кода

1. Эмуляция в Chrome/Edge DevTools (сенсоры)

В панели разработчика есть вкладка Sensors, где можно задать координаты вручную или выбрать город из списка, а также симулировать тип устройства (мобильное/десктоп).

  • Как найти: Откройте DevTools (F12) → вкладка More tools (если вкладки скрыты) → Sensors или во вкладке Console нажмите Esc и выберите меню сенсоров.
  • Что можно задать:
    *   **Location:** Выбрать `Custom location...` и ввести широту и долготу.
    *   **Принудительная ошибка:** Выбрать `Location unavailable` для тестирования сценариев без геоданных.

Этот метод переопределяет данные, получаемые через Geolocation API, и влияет на работу navigator.geolocation.getCurrentPosition().

2. Мокание Geolocation API в автотестах

Для сквозного тестирования (E2E) в фреймворках, таких как Playwright или Puppeteer, подмена происходит программно.

Пример на Playwright (Python):

import asyncio
from playwright.async_api import async_playwright

async def run_test_with_mocked_location():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False)
        context = await browser.new_context(
            # Задаем разрешение на доступ к геолокации
            permissions=['geolocation'],
            # Переопределяем геолокацию для всего контекста
            geolocation={'latitude': 55.7558, 'longitude': 37.6173}, # Координаты Москвы
            locale='ru-RU' # Дополнительно задаем локаль для полноты теста
        )
        page = await context.new_page()
        
        # Навигация на сайт, использующий геолокацию
        await page.goto('https://maps.example.com')
        
        # Можно также мокать API более гибко через evaluate
        await page.evaluate("""() => {
            navigator.geolocation.getCurrentPosition = (success) => 
                success({ coords: { latitude: 59.9343, longitude: 30.3351 } }); // Координаты Санкт-Петербурга
        }""")
        
        # Далее выполняем шаги теста...
        await browser.close()

asyncio.run(run_test_with_mocked_location())

Пример на Selenium WebDriver (Java):

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class MockGeolocation {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        
        // Создаем параметр для эмуляции геолокации
        options.addArguments("--disable-geolocation");
        options.addArguments("--lang=ru");
        
        WebDriver driver = new ChromeDriver(options);
        
        // Включаем переопределение геолокации через CDP (Chrome DevTools Protocol)
        Map<String, Object> coordinates = new HashMap<>();
        coordinates.put("latitude", 40.7128); // Нью-Йорк
        coordinates.put("longitude", -74.0060);
        coordinates.put("accuracy", 100);
        
        driver.executeCdpCommand("Emulation.setGeolocationOverride", coordinates);
        
        driver.get("https://weather.example.com");
        // Тестируем...
        driver.quit();
    }
}

3. Использование расширений браузера

Для ручного тестирования можно установить расширения, например, "Location Guard" для Firefox или "Mock Geo Location" для Chrome. Они позволяют быстро переключаться между предустановленными локациями через иконку в тулбаре. Это удобно, но не подходит для автоматизированных сценариев.

4. Прокси и VPN

  • Прокси-серверы с определенным географическим положением. Можно настроить в самом браузере или на уровне операционной системы.
  • VPN-сервисы. Кардинально меняют видимый IP-адрес, что часто используется сервисами для определения региона в упрощенных сценариях.

Важно: Некоторые современные сайты используют комбинированные методы определения локации (IP-адрес, язык браузера, часовой пояс, явное разрешение на Geolocation API). Поэтому для полноценного тестирования часто необходимо применять несколько методов одновременно (например, мокать API и менять язык браузера).

Ключевые сценарии тестирования при подмене локации

  • Позитивные: Корректное определение города, отображение местной валюты и языка, расчет стоимости доставки.
  • Негативные: Поведение при отказе в доступе к геолокации (getCurrentPosition error), при невозможности определить локацию по IP.
  • Пограничные: Проверка мест вблизи границ регионов, временных зон.
  • Безопасность: Убедиться, что чувствительные данные (точные координаты) не передаются в лог-файлы или аналитику без необходимости.

Таким образом, выбор метода подмены локации зависит от конкретной задачи: для быстрой ручной проверки подойдут DevTools или расширения, а для стабильных автотестов — программное переопределение через возможности фреймворка или CDP.

Как подменить локацию пользователя в браузере | PrepBro