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?
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:
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);
Suivez ces étapes:
Cela ne vous demandera pas d'exécuter Flash Player pour d'autres sessions dans Chrome 69.
É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");
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();
}
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();
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,
}
},
}
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");
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!