Below is the settings I use for ChromeDriver
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
// Add the WebDriver proxy capability.
Proxy proxy = new Proxy();
proxy.setHttpProxy("127.0.0.1:3128");
proxy.setSslProxy("127.0.0.1:3128");
capabilities.setCapability("proxy", proxy);
// Add ChromeDriver-specific capabilities through
// ChromeOptions.
ChromeOptions options = new ChromeOptions();
options.addArguments("--incognito");
options.addArguments("--disable-bundled-ppapi-flash");
options.addArguments("--disable-extensions");
options.addArguments("--profile-directory=Default");
options.addArguments("--disable-plugins-discovery");
options.addArguments("--start-maximized");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(capabilities);
But I also want to add mobile emulation. Based on what I read in the docs, Below is what I need
Map<String, String> mobileEmulation = new HashMap<String, String>();
mobileEmulation.put("deviceName", "Google Nexus 5");
Map<String, Object> chromeOptions = new HashMap<String, Object>();
chromeOptions.put("mobileEmulation", mobileEmulation);
and then I would set it to capabilities like below
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
Then pass it to ChromeDriver. But if I set it to DesiredCapabilities , then my proxy and other options would no longer be applied to DesiredCapabilities.
How can I emulate a mobile while preserving my proxy and options settings?
You can pass in arguments into chromeOptions via key args and a List<String> arguments:
Combined with the mobileEmulation setting, this should preserve all your options settings.
Map<String, String> mobileEmulation = new HashMap<String, String>();
mobileEmulation.put("deviceName", "Google Nexus 5");
Map<String, Object> chromeOptions = new HashMap<String, Object>();
chromeOptions.put("mobileEmulation", mobileEmulation);
// add this
chromeOptions.put("args", Arrays.asList("incognito", "disable-bundled-ppapi-flash",
"disable-extensions", "profile-directory=Default", "disable-plugins-discovery",
"start-maximized"));
Also your proxy settings should not be affected, you are calling setCapability on ChromeOptions.CAPABILITY, your "proxy" settings remain unchanged.
Related
My problem is that the download popup window is displaying, while i want download file by chrome, using selenium and java. BUT. On other PC this problem doesn't occur - files are downloading to path i get in code.
My question is: what can be a problem with one PC. The version of chrome and chromedriver are the same on both PC's.
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
chromePrefs.put("safebrowsing.enabled", "false");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
options.setExperimentalOption("prefs", chromePrefs);
options.addArguments("--disable-extensions");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(cap);
Add this preference
chromePrefs.put("download.prompt_for_download", false);
chromePrefs.put("directory_upgrade", true);
Add this preference to see if this works.
chromePrefs.put("plugins.always_open_pdf_externally", true);
I resolved problem.
There was two scenarios, for two different pages:
On 1st I just click on button to download, this code working pretty good:
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
chromePrefs.put("download.prompt_for_download", false);
chromePrefs.put("safebrowsing.enabled", "false"); // to disable security check eg. Keep or cancel button
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
options.setExperimentalOption("prefs", chromePrefs);
options.addArguments("test-type");
options.addArguments("disable-popup-blocking");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(cap);
On second, i trigger JS functions, which was responsible for triggering download file:
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
chromePrefs.put("download.prompt_for_download", false);
chromePrefs.put("directory_upgrade", true);
chromePrefs.put("safebrowsing.enabled", "false"); // to disable security check eg. Keep or cancel button
chromePrefs.put("profile.content_settings.exceptions.automatic_downloads.*.setting", 1);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
options.setExperimentalOption("prefs", chromePrefs);
options.addArguments("test-type");
options.addArguments("disable-popup-blocking");
options.addArguments("--disable-extensions");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(cap);
There is a spreadsheet to download using java+selenium in headless mode.
The thing is I'm using to execute this test cases a Linux server(CI/CD). The code is working 100% correct, When I'm using my local computer(Windows) to execute this code.
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--disable-infobars");
chromeOptions.addArguments("--browser.helperApps.neverAsk.saveToDisk",
"application/vnd.ms-excel,
vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/excel");
chromeOptions.addArguments("--test-type");
chromeOptions.addArguments("--disable-extensions");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("--no-zygote");
chromeOptions.addArguments("--disable-dev-shm-usage");
Map<String, Object> chromePrefs = new HashMap<>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.prompt_for_download", "false");
chromePrefs.put("cmd", "Page.setDownloadBehavior");
if (OS.startsWith("windows")) {
chromePrefs.put("download.default_directory", path+WIN_RESOURCES_PATH);
System.setProperty("webdriver.chrome.driver", ".\\src\\main\\resources\\driver\\chromedriver.exe");
if (Parameters.instance().getHeadless().toLowerCase().equals("true")) {
chromeOptions.addArguments("--headless");
}
} else if (OS.startsWith("linux")) {
chromePrefs.put("download.default_directory", path+LIN_RESOURCES_PATH);
System.setProperty("webdriver.chrome.driver", Parameters.instance().getChromeDriver());
if (Parameters.instance().getHeadless().toLowerCase().equals("true")) {
chromeOptions.addArguments("--headless");
}
}
chromeOptions.setExperimentalOption("prefs", chromePrefs);
chromeOptions.addArguments("window-size=1920,1080");
driver = new ChromeDriver(chromeOptions);
driver.get(getUrl());
driver.findElement(locator).click;
driver.switchTo().alert().accept();
My code is something like this. When Selenium test clicks the download button, opening another tab in browser and also a popup window, asking where to "Save" the file.
"I'm running these tests in headless chrome"
For me the following code works for pdf download (Windows)
With these option no promot and it will download your predefined path.
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
Path download_folder = Paths.get(System.getProperty("user.home") + "/Downloads", new String[0]);
HashMap<String, Object> prefs = new HashMap();
prefs.put("download.default_directory", download_folder.toAbsolutePath());
prefs.put("download.prompt_for_download", Boolean.valueOf(false));
prefs.put("download.directory_upgrade", Boolean.valueOf(true));
prefs.put("plugins.plugins_disabled", new String[] { "Chrome PDF Viewer" });
HashMap<String, Object> options = new HashMap();
options.put("prefs", prefs);
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chromeOptions", options);
driver = new ChromeDriver(capabilities);
When I run the scripts, webpage opened in Turkey language. I want to convert in English language,tried below piece of code using chrome options but it is setting browser language to English not webpage language.please help
static DesiredCapabilities setChromeCapabilities()
{
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("profile.default_content_settings.popups", 1);
prefs.put("download.default_directory", "C:\\dev\\tmpReport");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", prefs);
options.addArguments("chrome.switches","--disable-extensions");
options.addArguments("--start-maximized");
options.addArguments("--lang=en"); **//tried adding this line of code**
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY,options);
return capabilities;
}
I am trying to set multiple desired capability,for an instance of a chrome driver object in selenium.
I would like the browser to first
set the download location of files, then to disable the pdf viewer plugin in Chrome browser. Can anyone assist?
Code snippet for disabling PDF viewer plugin:
DesiredCapabilities caps = DesiredCapabilities.chrome();
Map<String, Object> preferences = new HashMap<String, Object>();
preferences.put("plugins.plugins_disabled", new String[] { "Chrome PDF Viewer" });
ChromeOptions options1 = new ChromeOptions();
options1.setExperimentalOption("prefs", preferences);
caps.setCapability(ChromeOptions.CAPABILITY, options1);
Code snippet for setting the download location:
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("download.default_directory", "C:\\Users\\user\\Downloads\\");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", prefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);
Don't create two separate ChromeOptions just because you want multiple capabilities. That's why they take maps. Just put both key value pairs in a single map and then add that to the options object ... eg:
DesiredCapabilities caps = DesiredCapabilities.chrome();
Map<String, Object> preferences = new HashMap<>();
preferences.put("plugins.plugins_disabled", new String[] { "Chrome PDF Viewer" });
preferences.put("download.default_directory", "C:\\Users\\user\\Downloads\\");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", preferences);
caps.setCapability(ChromeOptions.CAPABILITY, options);
I'm using this code to add own extension, but before load the page it automaticly disabels. How can I enable it?
ChromeOptions options = new ChromeOptions();
options.addArguments("load-extension=...");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
To add an extension and disable the plugins with Chrome:
ChromeOptions options = new ChromeOptions();
Map<String, Object> preferences = new Hashtable<String, Object>();
options.setExperimentalOption("prefs", preferences);
// add an extension
options.addExtensions(new File("C:\\extension.crx"));
// disable flash and the PDF viewer
preferences.put("plugins.plugins_disabled", new String[]{
"Adobe Flash Player", "Chrome PDF Viewer"});
ChromeDriver driver = new ChromeDriver(options);
driver.get("https://www.google.co.uk");