Chrome由自动化测试软件控制

时间:2017-03-31 14:20:26

标签: 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;
    }
}

我知道有这个(A link to same issue), 但有太多的答案不起作用。

有谁知道如何删除它?

16 个答案:

答案 0 :(得分:27)

将此添加到您传递给驱动程序的选项中:

options.addArguments("disable-infobars");

答案 1 :(得分:6)

关于" Chrome由自动化测试软件控制"文本弹出:它不会影响您的测试。要处理其他事情(例如:保存密码),您可以在代码中添加以下行。

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);

希望它能奏效。

答案 2 :(得分:4)

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
options.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));    
WebDriver driver = new ChromeDriver(options);

将上述代码用于最新的Chrome驱动程序。

答案 3 :(得分:3)

可能有人需要这个用于Capybara,Watir应该是这样的:

Capybara.register_driver :chrome do |app|
  $driver = Capybara::Selenium::Driver.new(app, {:browser => :chrome, :args => [ "--disable-infobars" ]})
end

答案 4 :(得分:2)

最新的chromedrivers不再支持

“ disable-info”开关。 (至少76.0)。
@Rajeev的答案有效,在这里我写了C#的对应语言。

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddAdditionalOption("useAutomationExtension", false);
chromeOptions.AddExcludedArgument("enable-automation");
Driver = new ChromeDriver(chromeOptions);

答案 5 :(得分:2)

尝试了许多这些建议的解决方案,但没有一个奏效。好吧,我的代码是用 C# 写的,所以不同平台的 WebDriver 实现可能会有一些差异。

无论如何,我得到的解决方案是在 .NET 上运行时对 Chrome 使用以下选项。

var options = new ChromeOptions();
options.AddExcludedArguments("enable-automation");

在 .NET 上,setExperimentalOption() 类上似乎没有任何 ChromeOptions 方法。

答案 6 :(得分:1)

虽然disable-infobars路线可行,但在所有情况下都可能会抑制信息量(如建议here),而不仅仅是OP所指的情况。如果你没有得到一些重要的信息,那么这种情况最多也会过度,并且可能导致将来发生意外和无法解释的行为。

我认为最好在配置的enable-automation区域中通过 禁用 来提供excludeSwitches切换功能。关于disable-inforbars而无所事事地进行设置。 enable-automation开关的说明:

  

通知用户他们的浏览器正在通过自动化测试进行控制。

对于nightwatch.conf.js,它看起来像这样(并为我工作):

desiredCapabilities: {
  ...
  chromeOptions: {
    excludeSwitches: ['enable-automation'],
    ...
  }
}

这应该只做我们所追求的:摆脱那个特定的讨厌的消息!

修改[2017-11-14] :现在这会导致更加恼人的Disable Developer Mode Extensions警告/警告。我已经尝试了所有可能有用的相关外观标志/开关,但无济于事。我已经向Chromium提交了一个错误,所以我们会看到,如果我得到解决方案,我会尝试回到这里。

答案 7 :(得分:0)

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");

答案 8 :(得分:0)

如果有人正在使用 Rails 5.1 + ,这会稍微改变测试结构,并且现在在此文件中配置Capybara用于系统测试:

application_system_test_case.rb

您可以在 driven_by 的选项中添加“args”,如下所示:

driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: { args: ["--disable-infobars"] }

答案 9 :(得分:0)

它适用于我使用 addArguments(数组(&#34;禁用信息栏&#34;))

这适用于 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);

答案 10 :(得分:0)

量角器解决方案:

我来到这里寻找量角器解决方案,如果对我找到的任何人有用,请在上述答案的帮助下;使用Protractor,您可以在protractor.config文件的capabilities对象中向chromeOptions对象添加Chrome特定选项,例如使用上面讨论的disable-infobars选项使用以下内容:

capabilities: {
  'browserName': 'chrome',
  'chromeOptions': {
    'args': ['disable-infobars']
  }
},

使用上面讨论的启用自动化:

capabilities: {
  'browserName': 'chrome',
  'chromeOptions': {
    'excludeSwitches': ['enable-automation']
  }
}

在我的情况下,首选禁用信息栏。

答案 11 :(得分:0)

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;
}

答案 12 :(得分:0)

您可以使用

options1.add_argument("--app=https://www.google.com.ph")

答案 13 :(得分:0)

“ disable-infobars”标志已被弃用,但可以通过添加以下内容来避免出现此消息:

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("useAutomationExtension", false);
chromeOptions.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));    
WebDriver driver = new ChromeDriver(chromeOptions);

答案 14 :(得分:0)

它对我有用,使用此代码我可以禁用Chrome 由自动化测试软件控制以及保存密码弹出窗口`

    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)

答案 15 :(得分:-1)

费了很多功夫,但最终我找到了在 2021 年有效的标志组合!

这会告诉 Chrome 忽略所有 SSL 错误,禁用“Chrome 正在由自动化测试软件控制”消息并以全屏模式启动。 将其添加到快捷方式的目标字段:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --test-type=webdriver --start-fullscreen