Всем привет,
столкнулся с такой проблемой: нужно сделать эмуляцию входа пользователя с определенно точки на карте. после общения с гуглом нашел простое решение
@Test
public void getLocation() throws InterruptedException {
driver.get("https://www.google.com/maps");
Thread.sleep(10000);
FirefoxProfile profile = new FirefoxProfile();
profile.setEnableNativeEvents(false);
profile.setPreference("geo.wifi.uri", "file://D:/trash/location.json");
driver = new FirefoxDriver(profile);
}
Все что нужно - переопределить возвращаемые значения в window.navigator.geolocation.getCurrentPosition().
Если конкретно по вашей проблеме, не все так просто, припоминаю что там еще пару флагов было, в стиле geo.***.testing.
Почему не подходит жс? Просто вызываете в executejs (или как там он у вас называется?) js код, который переназначает все координаты. По сути вы просто мОчите вызовы браузера. Вообще в многих фреймворках, которые я видел это уже реализовано, т.к. метод давно доступен по JsonWireProtocol ( GitHub - SeleniumHQ/selenium-google-code-issue-archive: Archive, please see main selenium repo ). Но у каждого метода есть нюансы. С антивными методами не получится симулировать отсутствие геолокации, с мОканием жс-а нужно запускать браузер с “always ask geolocation”, в хроме это
У меня в данный момент написан огромный тестовый метод не просто для изменения, но и для отслеживания изменения, изменения скорости, accuracy и тд и тп
Если рассматривать чуть более сложный вариант чем я кидал выше, то это выглядит примерно так. Аттачишь жс к своей странице (я добавляю ее на этапе запуска сервера, можно просто жс-ку добавить перманентно) и работаешь с ними. Мок основных функций примерно вот такой:
Можно заменить значения координат плейсхолдерами и менять их “на лету”, или жсом через window.setPosition(), в примере как раз реализованны оба варианта сразу.
это я вижу, но когда вызываю его из java кода то мне выдает ошибку, ошибка логичная, ибо оно не видит либ с жс…либо я чегото неправвильно понимаю либо чтото неправильно делаю
Тебе не нужен describe() из первого примера по ссылке. Этот пример чисто для mocha, жс-ного тестового фреймворка.
Все что тебе надо - замОкать несколько нативных функций в жс-е (выше в моем примере с кодом). Вызови этот код в контексте страницы, в которой выполняется тест. Ты все правильно сделал в предыдущем комменте, но вызвал только тебе нужен не только setPosition (который по сути не делает ничего), тебе нужно еще и переназначить clearWatch, watchPosition и getCurrentPosition (последняя по сути самая главная, которая и отвечает за нахождение в данный момент).
да уж, то что есть работает только с сайтом bestvpn.org
на msn и картах гугл не работает…бред бредовый, теперь бы узнать заработает ли это с нашим внутренним апи которое пишеться (
Карты гугла используют свои мОки встроенного апи, поэтому там есть воркэраунды. Чтобы не париться что и как надо переназначать, уже есть готовое решение (проверял, работает):
пробовал и такой вариант, те. сначала делаю “driver.get…” а потом запускаю скрипт…результат тот же
Исправлено
проблема была в том что я вызывал независимо скрипт, после вызова с под вебдрайвера все заработало.