Java Chrome由自动化测试软件控制
我使用Serenity BDD(Selenium)在Chrome中运行自动测试 我不得不下载一个新的ChromeDriver,因为我的测试无法运行->测试将打开ChromeDriver,但无法“以用户身份浏览”。当我在谷歌上搜索这个问题时,他们说我必须更新ChromeDriver 因此,我将ChromeDriver更新为2.28版,并将Chrome版本更新为57.0.2987.98版 但是现在-每次我运行测试时,都会出现一条恼人的文字: Chrome由自动化测试软件控制 它问我是否要保存密码。(我无法添加图片,因为我没有足够的“点数”) 在上一个版本中,我通过以下方式成功阻止了这两件事:Java Chrome由自动化测试软件控制,java,google-chrome,selenium,selenium-chromedriver,serenity-bdd,Java,Google Chrome,Selenium,Selenium Chromedriver,Serenity Bdd,我使用Serenity BDD(Selenium)在Chrome中运行自动测试 我不得不下载一个新的ChromeDriver,因为我的测试无法运行->测试将打开ChromeDriver,但无法“以用户身份浏览”。当我在谷歌上搜索这个问题时,他们说我必须更新ChromeDriver 因此,我将ChromeDriver更新为2.28版,并将Chrome版本更新为57.0.2987.98版 但是现在-每次我运行测试时,都会出现一条恼人的文字: Chrome由自动化测试软件控制 它问我是否要保存密码。(
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;
}
}
我知道有一个(),
但是有太多的答案是行不通的
任何知道如何删除该通知的人?以前,将“禁用信息栏”ChromeOptions传递给WebDriver会阻止Chrome显示该通知。最近,“禁用信息栏”选项已被弃用,不再删除该通知。目前的解决方法是传入一个名为“禁用信息栏”的选项排除开关”,然后排除“启用自动化”开关
将此添加到传递给驱动程序的选项中:
options.addArguments("disable-infobars");
Map prefs=new HashMap();
//关闭多个下载警告的步骤
prefs.put(“profile.default\u content\u settings.popups”,0);
prefs.put(“profile.content\u settings.pattern\u pairs.*.multiple automatic downloads”,1);
//关闭下载提示
prefs.put(“下载.提示下载”,false);
prefs.put(“凭证启用服务”,false);
//要停止保存密码,请执行以下操作
prefs.put(“密码管理器已启用”,false);
ChromeOptions选项=新的ChromeOptions();
options.addArguments(“chrome.switches”,“--禁用扩展”);
//禁用任何浏览器通知的步骤
options.addArguments(“--disable notification”);
//禁用提示信息消息的黄色条带信息栏
options.addArguments(“禁用信息栏”);
选项。设置实验选项(“prefs”,prefs);
System.setProperty(“webdriver.chrome.driver”、“Chromedriver path”);
options.addArguments(“--test type”);
驱动程序=新的色度驱动程序(可选);
Log.info(“Chrome浏览器启动”);
可能有人需要水豚,水应该是这样的:
Capybara.register_driver :chrome do |app|
$driver = Capybara::Selenium::Driver.new(app, {:browser => :chrome, :args => [ "--disable-infobars" ]})
end
driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: { args: ["--disable-infobars"] }
如果有人正在使用Rails 5.1+,这稍微改变了测试结构,现在在该文件中为系统测试配置了Capybara:
application_system_test_case.rb
您可以在由驱动的选项中添加“args”,如下所示:
Capybara.register_driver :chrome do |app|
$driver = Capybara::Selenium::Driver.new(app, {:browser => :chrome, :args => [ "--disable-infobars" ]})
end
driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: { args: ["--disable-infobars"] }
它通过使用addArguments(数组(“禁用信息栏”) 这是针对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);
虽然禁用信息栏路径将起作用,但它可能会在所有情况下(如建议的那样)抑制信息栏,而不仅仅是OP所指的情况。这充其量只是过火了,如果您没有收到一些重要消息,将来可能会导致意外和无法解释的行为 我认为最好是通过在配置/设置区域禁用所提供的开关,而不做任何与禁用inforbars有关的操作。
启用自动化
开关的说明:
通知用户他们的浏览器正在由自动测试控制
对于nightwatch.conf.js
它看起来像这样(对我来说很有用):
这应该只做我们所追求的:摆脱那个特别讨厌的信息
编辑[2017-11-14]:这现在导致了一个更加恼人的
禁用开发模式扩展的警告/警告。我尝试了我能找到的所有相关的查找标志/开关,但没有效果。我已经用Chromium提交了一个错误,所以我们将看到,如果我得到解决方案,我将尝试返回到这里。量角器解决方案:
我来到这里是为了寻找一个量角器解决方案,如果对我找到的任何人都有用的话,可以从上面的答案中得到帮助;使用量角器,您可以在grandor.config文件中的capabilities对象中向chromeOptions对象添加Chrome特定选项,例如使用上面讨论的disable Infobar选项使用以下:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': ['disable-infobars']
}
},
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("useAutomationExtension", false);
chromeOptions.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));
WebDriver driver = new ChromeDriver(chromeOptions);
要使用上面也讨论过的“启用自动化”,请执行以下操作:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'excludeSwitches': ['enable-automation']
}
}
在我的情况下,禁用信息栏是首选。public WebDriver SetupChromeDriver(){
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;
}
//初始化Chrome驱动程序
ChromeOptions选项=新的ChromeOptions();
Map prefs=新的HashMap();
prefs.put(“安全浏览已启用”,“真”);
选项。设置实验选项(“prefs”,prefs);
options.addArguments(“--disable notification”);
options.addArguments(“--start maximized”);
options.addArguments(“禁用信息栏”);
System.setProperty(“webdriver.chrome.driver”,“E:/important Softwares/chrome driver/chromedriver_2.37.exe”);
驱动程序=新的色度驱动程序(可选);
返回驱动器;
}
将上述代码用于最新的Chrome驱动程序。最新的Chrome驱动程序不再支持“禁用信息”开关。(至少76.0)。
@Rajeev的答案有效,我在这里为C#写了对应的答案
你可以用这个
options1.add_argument("--app=https://www.google.com.ph")
“禁用信息栏”标志已被弃用,但您可以通过添加以下内容来避免此消息:
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': ['disable-infobars']
}
},
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("useAutomationExtension", false);
chromeOptions.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));
WebDriver driver = new ChromeDriver(chromeOptions);
我尝试了许多建议的解决方案,但没有一个有效。好的,我的代码是C#,因此不同平台的WebDriver实现可能存在一些差异
不管怎么说,我找到的解决方案是在.NET上运行Chrome时使用以下选项
var options = new ChromeOptions();
options.AddExcludedArguments("enable-automation");
在.NET上,ChromeOptions
类上似乎没有任何setExperimentalOption()
方法。这花了很多功夫,但最终我发现了一个组合标志,它在2021年起作用
var options = new ChromeOptions();
options.AddExcludedArguments("enable-automation");
"C:\Program Files\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --test-type=webdriver --start-fullscreen
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("credentials_enable_service", false);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));
options.setExperimentalOption("prefs", prefs);
WebDriver driver = new ChromeDriver(options)