1

I'm encountering the below error while trying to set Request headers using browsermobproxy for selenium tests.

Exception in thread "main" org.openqa.selenium.WebDriverException: : Failed to read the 'localStorage' property from 'Window': Access is denied for this document.

Build info: version: '3.13.0', revision: '2f0d292', time: '2018-06-25T15:24:21.231Z' System info: host: 'G9HQBVT2E', ip: '10.62.6.122', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_271' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 87.0.4280.141, chrome: {chromedriverVersion: 87.0.4280.20 (c99e81631faa0..., userDataDir: C:\Users\abc\AppData\...}, goog:chromeOptions: {debuggerAddress: localhost:64062}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(manual, http=G9HQBVT2..., setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true} Session ID: 73d6ecf19b420b0bc368f2bc3d5f78b1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122) at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548) at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:485) at com.sample.test.DataReader.main(DataReader.java:79) 

Driver program

public static void main(String[] args) throws Exception { System.setProperty("webdriver.chrome.driver", "C:\\Try\\drivers\\chromedriver.exe"); //PropertyReader.getProperty("chromedriverpath") // start the proxy BrowserMobProxy proxy = new BrowserMobProxyServer(); proxy.setTrustAllServers(true); proxy.start(0); // get the Selenium proxy object Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy); String chromeProfilePath = "C:\\Users\\AppData\\Local\\Google\\Chrome\\User Data\\Default"; //capabilities ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-web-security"); options.addArguments("--ignore-certificate-errors"); options.addArguments("--user-data-dir="+chromeProfilePath); // configure it as a desired capability DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.PROXY, seleniumProxy); capabilities.setCapability(ChromeOptions.CAPABILITY, options); //capabilities.setCapability("disable-web-security", true); // start the browser up WebDriver driver = new ChromeDriver(capabilities); // enable more detailed HAR capture, if desired (see CaptureType for the complete list) proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT); // driver.get("chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/_generated_background_page.html"); String jsScript = "localStorage.setItem('profiles', JSON.stringify([{ title: 'Selenium', hideComment: true, appendMode: '', \n" + " headers: [ \n" + " {enabled: true, name: 'token-1', value: '{\"abc\": 1234, \"type\": \"def\"}', comment: ''}\n" + " ], \n" + " respHeaders: [],\n" + " filters: []\n" + " }]));"; ((JavascriptExecutor)driver).executeScript(jsScript); // create a new HAR with the label "yahoo.com" proxy.newHar("localhost:4200"); // open app driver.get("http://localhost:4200/app/"); 

It would be great if anyone can help me on this. Thank you.

    1 Answer 1

    1

    This is because your browser privacy settings disallow javascript on the page to set up cookies (third-party cookies). You need to change them using properties.

    The list of relevant properties you can find here: https://stackoverflow.com/a/48670137/8343843

    How to set the property with web driver you can find here: https://stackoverflow.com/a/25090103/8343843

    1
    • 1
      Thanks for the quick response. But no luck, still getting same error. //capabilities ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-web-security"); options.addArguments("--ignore-certificate-errors"); options.addArguments("--user-data-dir="+chromeProfilePath); Map<String, Object> prefs = new LinkedHashMap(); prefs.put("profile.default_content_setting_values.cookies", 1); prefs.put("profile.block_third_party_cookies", Boolean.valueOf(false)); options.setExperimentalOption("prefs", prefs);CommentedJan 27, 2021 at 11:35

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.