Как получить «Внутренний UUID» Firefox Web Extension из сценария Selenium? - PullRequest
1 голос
/ 24 мая 2019

Мне нужно открыть страницу moz-extension://internal-uuid после запуска моего скрипта Selenium, чтобы иметь доступ к расширению storage API, чтобы установить там некоторые префы, которые это расширение будет читать позже и использовать для выполнения некоторых действий.Но когда я использую selenium.webdriver.Firefox.add_addon(...), он возвращает Extension ID, который отличается и не может быть использован для открытия страницы moz-extension://.Есть ли способ получить это Internal UUID из моего кода (не проверяя вручную about:debugging#addons).Или может быть какой-то способ передать нужные мне данные из Selenium в веб-расширение?

1 Ответ

2 голосов
/ 24 мая 2019

Этот код работает для меня в Linux и Mac:

    public static void main(String[] args) throws IOException {


    FirefoxOptions options = new FirefoxOptions();

    FirefoxDriver driver = new FirefoxDriver(options);

    String userPrefsFileContent = readFile(driver.getCapabilities().getCapability("moz:profile") + "/prefs.js");

    String extensionUuid = getExtensionUuid(userPrefsFileContent);

    driver.quit();

}

private static String getExtensionUuid(String userPrefsFileContent) {

    String uuid = null;

    String[] usersPrefsList = userPrefsFileContent.split(";");

    for (String currentPref : usersPrefsList) {

        if (currentPref.contains("extensions.webextensions.uuids")) {
            uuid = currentPref.split(":")[1].replaceAll("\"", "").replace("}", "")
                    .replace(")", "").replace("\\", "");
        }

    }

    if(uuid.contains(",")) {
        uuid = uuid.split(",")[0];
    }

    return uuid;

}

private static String readFile(String pathname) throws IOException {

    File file = new File(pathname);
    StringBuilder fileContents = new StringBuilder((int) file.length());
    String lineSeparator = System.getProperty("line.separator");

    try (Scanner scanner = new Scanner(file)) {
        while (scanner.hasNextLine()) {
            fileContents.append(scanner.nextLine()).append(lineSeparator);
        }
    }
    return fileContents.toString();
}
...