官术网_书友最值得收藏!

Understanding frozen preferences

Now, let's go back to the big list of frozen preferences that user.js contains, which we saw earlier. The Firefox Driver thinks that a test-script developer doesn't have to deal with them and doesn't allow those values to be changed. Let's pick one frozen preference and try to change its values in our code. Let's consider the browser.shell.checkDefaultBrowser preference, whose value FirefoxDriver implementers thought should be set to false so that the Firefox browser does not ask you whether to make Firefox your default browser, if it is not already, when you are busy executing your test cases. Ultimately, you don't have to deal with the pop-up itself in your test scripts. Apart from setting the preference value to false, the implementers of FirefoxDriver also thought of freezing this value so that users don't alter these values. That is the reason these preferences are called frozen preferences. Now, what happens if you try to modify these values in your test scripts? Let's see a code example:

public class FirefoxFrozenPreferences {
public static void main(String... args) {

System.setProperty("webdriver.gecko.driver",
"./src/test/resources/drivers/geckodriver 2");

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.shell.checkDefaultBrowser", true);

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setProfile(profile);

FirefoxDriver driver = new FirefoxDriver(firefoxOptions);
driver.get("http://facebook.com");
}
}

Now when you execute your code, you will immediately see an exception saying you're not allowed to override these values. The following is the exception stack trace you will see:

Exception in thread "main" java.lang.IllegalArgumentException: Preference browser.shell.checkDefaultBrowser may not be overridden: frozen value=false, requested value=true

This is how FirefoxDriver mandates a few preferences that are not to be touched. However, there are a few preferences of the frozen list that FirefoxDriver allows to alter through code. For that, it explicitly exposes methods in the FirefoxProfile class. Those exempted preferences are for dealing with SSL certificates and native events. Here, we will see how we can override the SSL certificates' preferences.

Let's use a code example that tries to override the default Firefox behavior to handle SSL certificates. The FirefoxProfile class has two methods to handle the SSL certificates; the first one is as follows:

public void setAcceptUntrustedCertificates(boolean acceptUntrustedSsl)

This lets Firefox know whether to accept SSL certificates that are untrusted. By default, it is set to true, that is, Firefox accepts SSL certificates that are untrusted. The second method is as follows:

public void setAssumeUntrustedCertificateIssuer(boolean untrustedIssuer)

This lets Firefox assume that the untrusted certificates are issued by untrusted or self-signed certification agents. Firefox, by default, assumes the issuer to be untrusted. That assumption is particularly useful when you test an application in the test environment while using the certificate from the production environment.

The preferences, webdriver_accept_untrusted_certs and webdriver_assume_ untrusted_issuer, are the ones related to the SSL certificates. Now, let's create a Java code to modify the values for these two values. By default, the values are set to true, as seen in the user.js file. Let's mark them as false with the following code:

public static void main(String... args) {

System.setProperty("webdriver.gecko.driver",
"./src/test/resources/drivers/geckodriver 2");

FirefoxProfile profile = new FirefoxProfile();

profile.setAssumeUntrustedCertificateIssuer(false);
profile.setAcceptUntrustedCertificates(false)
;

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setProfile(profile);

FirefoxDriver driver = new FirefoxDriver(firefoxOptions);
driver.get("http://facebook.com");
}

Here, we have set the values to false, and now if we open the user.js file in the profile directory of this instance of Firefox, you will see the values set to false, as follows:

user_pref("webdriver_accept_untrusted_certs", false);
user_pref("webdriver_assume_untrusted_issuer", false);

主站蜘蛛池模板: 澄城县| 荥阳市| 宜君县| 梁山县| 福清市| 建始县| 周宁县| 九江市| 绥棱县| 赣榆县| 彰武县| 巨鹿县| 准格尔旗| 镇赉县| 西畴县| 达州市| 平顶山市| 东莞市| 闽清县| 新邵县| 汾西县| 英德市| 黄陵县| 科尔| 金坛市| 昭苏县| 屯昌县| 康保县| 中牟县| 平南县| 安岳县| 保亭| 阳曲县| 多伦县| 新宾| 柯坪县| 晋城| 喀喇沁旗| 盐山县| 张北县| 彝良县|