I am running automated tests in Chrome with Serenity BDD (Selenium).
I had to download a new ChromeDriver, because my tests could not run -> The test would open ChromeDriver but could not "Browse as user". When I googled the issue, they said I had to update ChromeDriver.
So I updated ChromeDriver to version 2.28 and I also updated the Chrome version to Version 57.0.2987.98.
But now - EVERY TIME I run my tests this annoying text comes up:
Chrome is being controlled by automated test software
And it asks me if I want to save password. (I can't add pictures because I don't have enough "points")
In the previous version, I had managed to block these 2 things by:
public class CustomChromeDriver implements DriverSource {
@Override
public WebDriver newDriver() {
try {
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
Proxy proxy = new Proxy();
String proxyServer = String.format("AProxyIDontWantToDisplay", System.getenv("proxy.username"), System.getenv("proxy.password"));
proxy.setHttpProxy(proxyServer);
capabilities.setCapability("proxy", proxy);
ChromeOptions options = new ChromeOptions();
options.addArguments(Arrays.asList("--no-sandbox","--ignore-certificate-errors","--homepage=about:blank","--no-first-run"));
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
return driver;
} catch (Exception e) {
throw new Error(e);
}
}
@Override
public boolean takesScreenshots() {
return true;
}
}
I know there is this one (A link to same issue), but there are too many answers that don't work.
Anybody that knows how to remove that?
Add this to the options you pass to the driver:
options.addArguments("disable-infobars");
About the "Chrome is being controlled by automated test software" text pop up : It won't affect your testing. And to handle other things(e.g: save password) you can add below lines to your code.
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("profile.default_content_settings.popups", 0);
options.addArguments("disable-extensions");
prefs.put("credentials_enable_service", false);
prefs.put("password_manager_enabled", false);
options.setExperimentalOption("prefs", prefs);
options.addArguments("chrome.switches","--disable-extensions");
options.addArguments("--test-type");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, options);
cap.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);
System.setProperty("webdriver.chrome.driver",*path of chromedriver.exe*);
wb = new ChromeDriver(cap);
Hope it would work.
May someone needs this for Capybara, Watir should be like this:
Capybara.register_driver :chrome do |app|
$driver = Capybara::Selenium::Driver.new(app, {:browser => :chrome, :args => [ "--disable-infobars" ]})
end
While the disable-infobars
route will work, it will likely suppress the infobar in all cases (as suggested here), not just the case that the OP is referring to. This is overkill at best, and could lead to unexpected and inexplicable behavior in the future if you are not getting some important message.
I think it's better to leverage the provided enable-automation
switch by disabling it in the excludeSwitches
area of your config/setup while doing nothing with regards to disable-inforbars
. The enable-automation
switch's description:
Inform users that their browser is being controlled by an automated test.
For nightwatch.conf.js
it would look something like this (and worked for me):
desiredCapabilities: {
...
chromeOptions: {
excludeSwitches: ['enable-automation'],
...
}
}
This should only do what we are after: getting rid of that specific pesky message!
Edit [2017-11-14]: This is now causing an even more annoying Disable Developer Mode Extensions
alert/warning. I've tried every relevant-looking flag/switch I could find that might help, but to no avail. I've filed a bug with Chromium, so we'll see and I'll try to swing back through here if I get a resolution.
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
options.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));
WebDriver driver = new ChromeDriver(options);
Use the above codes for latest Chrome drivers.
Map<String, Object> prefs = new HashMap<String, Object>();
//To Turns off multiple download warning
prefs.put("profile.default_content_settings.popups", 0);
prefs.put( "profile.content_settings.pattern_pairs.*.multiple-automatic-downloads", 1 );
//Turns off download prompt
prefs.put("download.prompt_for_download", false);
prefs.put("credentials_enable_service", false);
//To Stop Save password propmts
prefs.put("password_manager_enabled", false);
ChromeOptions options = new ChromeOptions();
options.addArguments("chrome.switches","--disable-extensions");
//To Disable any browser notifications
options.addArguments("--disable-notifications");
//To disable yellow strip info bar which prompts info messages
options.addArguments("disable-infobars");
options.setExperimentalOption("prefs", prefs);
System.setProperty("webdriver.chrome.driver", "Chromedriver path");
options.addArguments("--test-type");
driver = new ChromeDriver(options);
Log.info("Chrome browser started");
If anyone is using Rails 5.1+, which changed the testing structure a bit and Capybara is configured in this file now for system tests:
application_system_test_case.rb
You can add "args" in the options for driven_by like this:
driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: { args: ["--disable-infobars"] }
Protractor solution:
I arrived here searching for a Protractor solution, if useful for anyone I found, with help from the above answers; with Protractor you can add Chrome specific options to the chromeOptions object, within the capabilities object in the protractor.config file, for example to use the disable-infobars option discussed above use the following:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': ['disable-infobars']
}
},
To use the enable-automation also discussed above:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'excludeSwitches': ['enable-automation']
}
}
disable-infobars is preferred in my circumstances.
public WebDriver SetupChromeDriver(){
//Initialize Chrome Driver
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("safebrowsing.enabled", "true");
options.setExperimentalOption("prefs", prefs);
options.addArguments("--disable-notifications");
options.addArguments("--start-maximized");
options.addArguments("disable-infobars");
System.setProperty("webdriver.chrome.driver", "E:/Importent Softwares/Chrome Driver/chromedriver_2.37.exe");
driver = new ChromeDriver(options);
return driver;
}
It works for me by using addArguments(array("disable-infobars"))
This is for facebook/php-webdriver
$options = new ChromeOptions();
$options->addArguments(array("disable-infobars"));
$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
$this->driver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
"disable-info" switch is not supported anymore for the latest chromedrivers. (at least 76.0).
@Rajeev's answer works and here I write the counterpart for C#.
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddAdditionalOption("useAutomationExtension", false);
chromeOptions.AddExcludedArgument("enable-automation");
Driver = new ChromeDriver(chromeOptions);
You may use this
options1.add_argument("--app=https://www.google.com.ph")
来源:https://stackoverflow.com/questions/43143014/chrome-is-being-controlled-by-automated-test-software