nostradamus
nostradamus

Reputation: 722

Selenium: boolean setting in about:config of Firefox webdriver

For a test suite, I'm running a python script controlling a Firefox instance using selenium webdriver. I want to change the setting dom.disable_open_during_load in about:config to true. Although this is the default setting in my default Firefox profile, selenium changes it to false (user-defined) whenever I'm starting a webdriver instance. It seems to use an anonymous, slightly changed profile?! I can then manually change it back, but I was struggling to do it with code: neither using a new profile nor using a pre-set profile configured with Firefox' profile manager solves the problem.

from selenium import webdriver

FFprofile = webdriver.FirefoxProfile()
FFprofile.set_preference('dom.disable_open_during_load', 'true')  # I also tried True, 1 - with and without quotes
# FFprofile = webdriver.FirefoxProfile('C:/Users/ExampleUser/AppData/Local/Mozilla/Firefox/Profiles/owieroiuysd.testprofile')


FFdriver = webdriver.Firefox(firefox_profile=FFprofile)
FFdriver.get('http://www.google.com')

I can change various settings this way, but it doesn't work for this one. Where does the changed value false "user-defined" come from? Is it an automatic setting of selenium somewhere? I'm using:

Edit: I just found this question on SO, dealing with the same problem in java.

If this turns out to be impossible, probably there is a nice work-around? Any ideas?

Upvotes: 5

Views: 8602

Answers (3)

user175257
user175257

Reputation: 96

fp = webdriver.FirefoxProfile()
fp.DEFAULT_PREFERENCES['frozen']["dom.disable_open_during_load"] = True

Don't use profile.set_preference('dom.disable_open_during_load', True) as profile.default_preference will be overrided by frozen's.

Upvotes: 8

nostradamus
nostradamus

Reputation: 722

This particular setting seems to be difficult for some reason...

Although I wasn't able to find a solution, I got inspired by this webpage and found a decent work-around using Firefox' developer toolbar:

    ActionChains(self.FFdriver).key_down(Keys.SHIFT).send_keys(Keys.F2).key_up(Keys.SHIFT).perform()
    time.sleep(0.1)       // this seems to be necessary
    ActionChains(self.FFdriver).send_keys('pref set dom.disable_open_during_load true').perform()
    ActionChains(self.FFdriver).send_keys(Keys.ENTER).perform()
    ActionChains(self.FFdriver).key_down(Keys.SHIFT).send_keys(Keys.F2).key_up(Keys.SHIFT).perform()

If anyone should know or find a better way, please comment!

Upvotes: 0

Gaurang Shah
Gaurang Shah

Reputation: 12970

profile.set_preference('dom.disable_open_during_load', True)

is the correct way to do it, but it won't work for this particular property as it's not allowed to change by user according to the following article. The same thing would work for other parameters.

i.e.

profile.set_preference('browser.download.manager.showWhenStarting', False)

https://www.stigviewer.com/stig/mozilla_firefox/2015-06-30/finding/V-19743

Solution:

create a new profile and directly modify this setting in JS file. and then provide path of this local profile. I have not tested this solution so not sure if it will work or not.

Upvotes: 1

Related Questions