1

I have a Flash-based app that I need to test using Cucumber. As flash is not enabled by default I need to enable it before each test and whitelist the url I believe. If I pause the test in it's background phase I can manually set these options.

flash option

How can I automate this approach though, I have looked into adding options and preferences, but still cannot seem to get to work.

So this is my standard setup in an env.rb file

Capybara.register_driver :chrome do |app|
  chrome_binary = '/Applications/Google Chrome.app'
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => { "binary" => chrome_binary + '/Contents/MacOS/Google Chrome' })
  Capybara::Selenium::Driver.new(app, :browser => :chrome, :desired_capabilities => capabilities, :options => options)
end

Further reading has highlighted options such as

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('arg-here')
prefs = {"enable flash here ? "}
options.add_experimental_option("prefs", prefs)

The add_experimental_option throws undefined method add_experimental_option for #<Selenium::WebDriver::Chrome::Options:0x007fca30c10988>

Has anyone automated this process?

halfer
  • 19,824
  • 17
  • 99
  • 186
Richlewis
  • 15,070
  • 37
  • 122
  • 283

2 Answers2

2

To enable Flash before each test and WhiteList the url you can use the following code block to configure the WebDriver instance to allow Flash:

ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
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);
prefs.put("PluginsAllowedForUrls", "https://your_url.com");
options.setExperimentalOption("prefs", prefs);
WebDriver driver = new ChromeDriver(options);

Here you can find a detailed discussion on Manage Flash in Chrome and on PluginsAllowedForUrls

Update :

You haven't mentioned in your comment through which client you are not able to find setExperimentalOption or set_experimental_option. Here is the snapshot from my IDE which have no errors/warnings :

flash

And here is the JavaDoc :

setExperimentalOption

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
0

This is what worked for me in the end

Capybara.register_driver :chrome do |app|
  chrome_binary = '/Applications/Google Chrome.app'
  prefs = {"profile.default_content_setting_values.plugins" => 1,
           "profile.content_settings.plugin_whitelist.adobe-flash-player" => 1,
           "profile.content_settings.exceptions.plugins.*,*.per_resource.adobe-flash-player" => 1,
           "PluginsAllowedForUrls" => "hendricks-as3.localhost.bbc.co.uk"
          }

  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => { "binary" => chrome_binary + '/Contents/MacOS/Google Chrome', "prefs" => prefs })
  Capybara::Selenium::Driver.new(app, :browser => :chrome, :desired_capabilities => capabilities)
end

Reading this documentation helped me realise what to do. (also DebanjanB answer helped me with the specific profile options but as in Java no good to my specific needs, thanks though :-) )

https://sites.google.com/a/chromium.org/chromedriver/capabilities

Richlewis
  • 15,070
  • 37
  • 122
  • 283