web-dev-qa-db-fra.com

Autoriser le contenu Flash dans Chrome 69 en cours d'exécution via chromedriver

Quelqu'un sait-il comment activer le plug-in Flash dans Chrome 69 . J'utilise chromedriver 2.41 avec les liaisons Java Selenium . J'ai déjà essayé avec 

prefs.put("profile.default_content_setting_values.plugins", 1);
prefs.put("profile.content_settings.plugin_whitelist.Adobe-flash-player", 1);
prefs.put("profile.content_settings.exceptions.plugins.*,*.per_resource.Adobe-flash-player", 1);

mais sans chance . J'ai également essayé de comparer les préférences de profil Chrome avec la version Flash interdite/autorisée pour un site donné, puis avec:

            Map<String, Object> site = new HashMap<>();
            Map<String, Object> values = new HashMap<>();
            Map<String, Object> setting = new HashMap<>();
            setting.put("flashPreviouslyChanged", true);
            values.put("last_modified", "13180613213099316");
            values.put("setting", setting);
            site.put("http://my.site,*", values);
            prefs.put("profile.content_settings.exceptions.flash_data", site);

mais ça ne marchera pas aussi bien.

J'ai aussi essayé de courir avec le profil spécifié via

options.addArguments("user-data-dir=" + profileDir);

mais comme ce paramètre de liste blanche devient "éphémère" dans Chrome 69, il ne fonctionnera pas non plus.

Existe-t-il une méthode pour exécuter mon automatisation dans Chrome avec prise en charge flash?

5
doctordrue

Merci à tous pour les réponses.

J'ai enfin trouvé la solution. Pour pouvoir utiliser Flash progressivement depuis Chrome 69, nous devons faire 2 choses:

  1. Désactiver les autorisations Flash éphémères (pour activer la liste des sites autorisés pour Flash) et 
  2. Ajoutez tous les sites à cette liste.

Voir le code suivant sur Java: 

ChromeOptions options = new ChromeOptions();
// disable ephemeral flash permissions flag
options.addArguments("--disable-features=EnableEphemeralFlashPermission");
Map<String, Object> prefs = new HashMap<>();
// Enable flash for all sites for Chrome 69
prefs.put("profile.content_settings.exceptions.plugins.*,*.setting", 1);

options.setExperimentalOption("prefs", prefs);
nestedDriver = new ChromeDriver(options);
3
doctordrue

Suivez ces étapes:

  1. Entrez cette URL dans Chrome: chrome: // flags /
  2. Dans la zone de saisie, chiffre: flash éphémère
  3. Choisissez l'option "désactivé".

Cela ne vous demandera pas d'exécuter Flash Player pour d'autres sessions dans Chrome 69.

3
Rodolpho Silva

Étant donné que l'indicateur --disable-features=EnableEphemeralFlashPermission a été supprimé de Chrome 71, ce qui nuit gravement à l'automatisation des tests Flash, j'aimerais partager notre solution.

public class FlashPolicyHelper {

    private final ChromeDriver driver;

    public FlashPolicyHelper(ChromeDriver driver) {
        this.driver = driver;
    }

    public FlashPolicyHelper addSite(String site) {
        this.driver.get("chrome://settings/content/siteDetails?site=" + site);
        WebElement root1 = driver.findElement(By.tagName("settings-ui"));
        WebElement shadowRoot1 = expandRootElement(root1);
        WebElement root2 = shadowRoot1.findElement(getByIdentifier("id=container"));
        WebElement main = root2.findElement(getByIdentifier("id=main"));
        WebElement shadowRoot3 = expandRootElement(main);
        WebElement shadowRoot4 = shadowRoot3.findElement(getByIdentifier("class=showing-subpage"));
        WebElement shadowRoot5 = expandRootElement(shadowRoot4);
        WebElement shadowRoot6 = shadowRoot5.findElement(getByIdentifier("id=advancedPage"));
        WebElement shadowRoot7 = shadowRoot6.findElement(By.tagName("settings-privacy-page"));
        WebElement shadowRoot8 = expandRootElement(shadowRoot7);
        WebElement shadowRoot9 = shadowRoot8.findElement(getByIdentifier("id=pages"));
        WebElement shadowRoot10 = shadowRoot9.findElement(By.tagName("settings-subpage"));
        WebElement shadowRoot11 = shadowRoot10.findElement(By.tagName("site-details"));
        WebElement shadowRoot12 = expandRootElement(shadowRoot11);
        WebElement shadowRoot13 = shadowRoot12.findElement(By.id("plugins"));
        WebElement shadowRoot14 = expandRootElement(shadowRoot13);
        new Select(shadowRoot14.findElement(By.id("permission"))).selectByValue("allow");
        return this;
    }

    private By getByIdentifier(String identifier) {
        String[] identifiers = identifier.split("=");

        return identifiers[0].equals("id") ? By.id(identifiers[1]) :
                By.className(identifiers[1]);
    }

    private WebElement expandRootElement(WebElement element) {
        return (WebElement) driver.executeScript("return arguments[0].shadowRoot",element);
    }
}

L'assistant doit être appelé après l'instanciation de ChromeDriver.

 driver = new ChromeDriver(options);
 new FlashPolicyHelper(driver).addSite("https://your.site").addSite("https://another.site");
1
Johno Crawford

J'ai géré cela en allant dans les paramètres du site Web avant d'exécuter mon test et en effectuant des actions Selenium telles que celles décrites ci-dessous:

     public void SetFlashForURL (string yourWebsiteURL) {
 driver.Navigate().GoToUrl(string.Format("chrome://settings/content/siteDetails?site={0}", yourWebsiteURL));
                    Thread.Sleep(1000);
                    Actions actions = new Actions(driver);
                    if (yourWebsiteURL.Contains("https"))
                    {
                        actions.SendKeys(OpenQA.Selenium.Keys.Tab);
                        actions.SendKeys(OpenQA.Selenium.Keys.Tab);
                        actions.SendKeys(OpenQA.Selenium.Keys.Tab);
                        actions.SendKeys(OpenQA.Selenium.Keys.Tab);
                    }
                    actions.SendKeys(OpenQA.Selenium.Keys.Tab);
                    actions.SendKeys(OpenQA.Selenium.Keys.Tab);
                    actions.SendKeys(OpenQA.Selenium.Keys.Tab);
                    actions.SendKeys(OpenQA.Selenium.Keys.Down);
                    actions.Build().Perform(); 
    }
0
JeffH

Ma solution pour C #

var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("--disable-features=EnableEphemeralFlashPermission");
chromeOptions.AddUserProfilePreference(
          "profile.content_settings.exceptions.plugins.*,*.per_resource.Adobe-flash-player", 1);
var capability = (DesiredCapabilities)chromeOptions.ToCapabilities();
0
Philipp Moskalev

Au cas où quelqu'un en aurait besoin, voici comment faire la même chose dans une configuration de rapporteur:

capabilities: {
  browserName: 'chrome',
  chromeOptions: {
    args: ['--disable-features=EnableEphemeralFlashPermission'],
    prefs: {
      "profile.content_settings.exceptions.plugins.*,*.per_resource.Adobe-flash-player": 1,
    }
  },
}
0
Nathan Friedly
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-features=EnableEphemeralFlashPermission");
    Map<String, Object> prefs = new HashMap<>();
    prefs.put("profile.content_settings.exceptions.plugins.*,*.per_resource.Adobe-flash-player",1);
    options.setExperimentalOption("prefs", prefs);
    WebDriver driver = new ChromeDriver(options);
    driver.get("some url");
0
陈俊高

En utilisant @RodolphoSilva, répondez avec des liens:

1 - Lien d’entrée: chrome: // flags/# enable-ephemeral-flash-permission

2 - Changer en " Désactivé "

3 - Cliquez sur le bouton " RELAUNCH NOW "

4 - Lien d’entrée: chrome: // paramètres/contenu/flash? Recherche = flash

5 - Vous pouvez maintenant ajouter ou bloquer des sites pour utiliser Flash

@RodolphoSilva - Merci beaucoup pour votre excellente réponse!

0
Jorge Augusto