webentwicklung-frage-antwort-db.com.de

Lassen Sie Flash-Inhalte in Chrome 69 über einen Chromtreiber laufen

Weiß jemand, wie man das Flash-Plugin in Chrome 69 ... aktiviert. Ich verwende Chromedriver 2.41 mit Java-Selenium-Bindungen 

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);

aber ohne Glück . Ich habe auch versucht, die Chrom-Profil-Einstellungen mit nicht zulässigem/zulässigem Flash für eine bestimmte Website zu vergleichen und dann mit:

            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);

aber es funktioniert nicht so gut.

Ich habe auch versucht, mit dem angegebenen Profil über zu laufen

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

da diese Whitelist-Einstellung in Chrome 69 "flüchtig" wird, funktioniert sie auch nicht.

Gibt es eine Methode, um meine Automatisierung in Chrome mit Flash-Unterstützung auszuführen?

5
doctordrue

Danke an alle für die Antworten.

Ich habe endlich die Lösung gefunden. Um Flash seit Chrome 69 programmatisch zu ermöglichen, müssen wir zwei Dinge tun:

  1. Deaktivieren Sie flüchtige Flash-Berechtigungen (um die Liste der für Flash-Sites zulässigen Websites zu aktivieren) und 
  2. Fügen Sie alle Sites zu dieser Liste hinzu.

Siehe den folgenden Code auf 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

Folge diesen Schritten:

  1. Geben Sie diese URL in Chrome ein: chrome: // flags /
  2. Bei der Sucheingabebox Ziffer: flüchtiges Blinken
  3. Wählen Sie die Option "Deaktiviert".

Dadurch werden Sie nicht aufgefordert, Flash Player für weitere Sitzungen in Chrome 69 auszuführen.

3
Rodolpho Silva

In Chrome 71 wurde das Flag --disable-features=EnableEphemeralFlashPermission entfernt, wodurch die Flash-Testautomatisierung stark beeinträchtigt wird.

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);
    }
}

Der Helfer sollte nach der Instantiierung des ChromeDrivers aufgerufen werden.

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

Chrome 69 kürzlich veröffentlicht lässt nicht zu, dass Websites (URLs) über chrome://settings/content/flash dauerhaft hinzugefügt (aktiviert) werden, wie dies in früheren Versionen von Flash Player der Fall war. Eine URL kann jedoch für die aktuelle Version temporär aktiviert werden, indem Sie auf das Sperrsymbol links neben der Adressleiste klicken, dann Site Settings wählen und dann Flash Player aktivieren.

Diese Richtlinie zwingt Benutzer von Flash Player, ihre Berechtigungseinstellungen für jede Sitzung neu zu konfigurieren, was die Verwendung von Flash Player weniger bequem macht. Das ist anscheinend beabsichtigt. 

Glücklicherweise verfügt der Microsoft Edge - Browser über nicht über diese Richtlinie. Wie Chrome führt Edge den Flash Player aus. Im Gegensatz zu Chrome bleiben die Berechtigungseinstellungen jedoch erhalten und der Benutzer wird durch nicht belästigt.

1
CQ Bear

Ich bin damit umgegangen, indem ich in die Einstellungen für die Website gegangen bin, bevor ich meinen Test durchführte und Selenium-Aktionen wie folgt durchführte:

     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

Meine Lösung für 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

Für den Fall, dass jemand anderes es benötigt, können Sie in einer Protractor-Konfiguration dasselbe tun:

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
陈俊高

Antwort von @RodolphoSilva mit Links verwenden:

1 - Eingabelink: chrome: // flags/# enable-ephemeral-flash-permission

2 - Wechseln Sie zu "Disabled"

3 - Klicken Sie auf die Schaltfläche "RELAUNCH NOW"

4 - Eingabe-Link: chrome: // Einstellungen/Inhalt/Flash? Suche = Flash

5 - Jetzt können Sie Sites hinzufügen oder blockieren, um Flash zu verwenden

@ RodolphoSilva - Vielen Dank für Ihre großartige Antwort!

0
Jorge Augusto