t.me/atinfo_chat Telegram группа по автоматизации тестирования

Java+Selenide+Chrome, отключение геолокации

Теги: #<Tag:0x00007f07fe2bf248> #<Tag:0x00007f07fe2bf0e0> #<Tag:0x00007f07fe2beff0> #<Tag:0x00007f07fe2bed48> #<Tag:0x00007f07fe2bda60> #<Tag:0x00007f07fe2bd740>

Вопрос из разряда “Помогите зеленому новичку, который ничего в этом не понимает”.

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

Были попытки задать запрет на геолокацию через:

Configuration.browserCapabilities new DesiredCapabilities();
Configuration.browserCapabilities.setCapability("locationContextEnabled", false);

Так же создавался отдельный профиль в хроме с отключенной локацией:

ChromeOptions profile = new ChromeOptions();
profile.addArguments("/workspace/project/chrome-profile/WithoutGeo");

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

Исходный тест (без запрета локации) выглядит так:

import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.junit.TextReport;
import org.junit.*;
import org.junit.rules.TestRule;
import org.openqa.selenium.By;
import utils.ConfigProperties;
import static com.codeborne.selenide.Selenide.*;
import static com.codeborne.selenide.Condition.*;
import static com.codeborne.selenide.WebDriverRunner.closeWebDriver;

public class AuthorizationValidTest {

    @Before
    public void setUp() throws Exception {
        Configuration.browser = ConfigProperties.getTestProperty("browser");
        Configuration.browserSize = ConfigProperties.getTestProperty("browserSize");
        Configuration.timeout = 10000;
        Configuration.collectionsTimeout = 10000;
    }

    @Rule
    public TestRule report = new TextReport()
            .onFailedTest(true)
            .onSucceededTest(true);

    @Test
    public void Test() throws Exception {

        //открыть сайт, с авторизацией
        open(ConfigProperties.getTestProperty("url"));
}

Собственно, и что с этим со всем делать?

В сетапе вам надо создать новый драйвер и передать ему капабилити или профиль что вы выше сами и привели для примера. Правда, в последних версиях уже отказываются от применения капабилити, вам надо профиль добавлять через опции. Что-то типа:
WebDriverRunner.setWebDriver(new ChromeDriver(options));

Либо, чтобы не создавать самому новый драйвер, надо использовать
static org.openqa.selenium.remote.DesiredCapabilities - http://selenide.org/javadoc/current/com/codeborne/selenide/Configuration.html#browserCapabilities

@Shax это известное ишью https://github.com/codeborne/selenide/issues/676

@BabyRoot, @osipov_boris
Спасибо, буду раскуривать.

Добавьте это в setUp метод:

browser = “firefox”; //менять браузер на желаемый
if (browser == “firefox”) {
WebDriverManager.firefoxdriver().setup();
Configuration.browser = “firefox”;
System.setProperty(“firefoxprofile.dom.webnotifications.serviceworker.enabled”, “false”);
System.setProperty(“firefoxprofile.dom.webnotifications.enabled”, “false”);
System.setProperty(“firefoxprofile.geo.enabled”, “false”);
} else if (browser == “chrome”) {
WebDriverManager.chromedriver().setup();
Configuration.browser = “chrome”;
ChromeOptions options = new ChromeOptions();
options.addArguments("–disable-notifications");
}

Кстати, тот известный ишшуе был закрыт в Selenide 5.12.0. Обновляйтесь, должно подчиниться.