【问题标题】:Chrome is being controlled by automated test softwareChrome 由自动化测试软件控制
【发布时间】:2017-08-25 20:42:59
【问题描述】:

我正在使用 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), 但是有太多的答案不起作用。

有谁知道如何删除它?

【问题讨论】:

  • 关于弹出的“由自动化控制”文本:是否存在问题?前几天我在搞乱 chrome 驱动程序,它没有显示屏幕截图等,也没有引起任何元素交互问题。
  • 不,不是真的,我在该弹出窗口下有一些组件在单击时不会显示在屏幕截图中。这就是为什么:)
  • 这可以导航 URL 和交互元素吗?
  • @BobbyB 您是否尝试截取屏幕截图并查看它们是否被覆盖?就像我说的那样,我在前几天拍摄的屏幕截图中没有看到弹出窗口。

标签: java google-chrome selenium selenium-chromedriver serenity-bdd


【解决方案1】:

以前,将“disable-infobars”ChromeOption 传递给 WebDriver 会阻止 Chrome 显示此通知。最近,“disable-infobars”选项已被弃用,不再删除通知。当前的解决方法是通过在一个名为“excludeSwitches”的选项中,然后排除“enable_automation”开关。

ChromeOptions options = new ChromeOptions(); 
options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"}); 
WebDriver driver = new ChromeDriver(options); 

【讨论】:

  • 此解决方案在 Java 中使用时不会停止显示通知。只有options.addArguments("disable-infobars"); 工作正常
  • 要禁用通知,请添加:options.addArguments("--disable-notifications");
  • 虽然我同意在几乎所有情况下它都不会影响您的测试,但在我的情况下它确实影响了您的测试。我试图自动化的应用程序没有在显示信息栏时将屏幕绘图调整为缩小的空间,因此我需要确认为可点击的关键元素不是因为它们被其他元素遮挡。这显然是开发人员的编程/设计问题,但禁用信息栏解决了我的问题,当它们消失时屏幕正确显示。
  • disable-infobars 不再支持最新的驱动程序 (76.0)。检查@Rajeev 对 java 的回答和我对 C# 的回答。
  • @BillHileman 我已经用最新的工作代码修改了答案
【解决方案2】:

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

options.addArguments("disable-infobars");

【讨论】:

  • 这个答案来自 3 年前。 Chrome 可能已经改变了这个论点。 This might help
【解决方案3】:
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");

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      如果有人在使用 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"] }
      

      【讨论】:

        【解决方案6】:

        使用 addArguments(array("disable-infobars"))

        对我有用

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

        【讨论】:

          【解决方案7】:

          虽然disable-infobars 路由会起作用,但它可能会在所有情况下抑制信息栏(如建议的here),而不仅仅是OP 所指的情况。这充其量是矫枉过正,如果您没有收到一些重要信息,将来可能会导致意外和莫名其妙的行为。

          我认为最好通过在配置/设置的excludeSwitches 区域中禁用它来利用提供的enable-automation 开关,而对@ 不做任何事情987654327@。 enable-automation 开关的描述:

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

          对于nightwatch.conf.js,它看起来像这样(并且对我有用):

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

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

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

          【讨论】:

            【解决方案8】:

            量角器解决方案:

            我来到这里是为了寻找一个 Protractor 解决方案,如果对我发现的任何人有用的话,在上述答案的帮助下;使用 Protractor,您可以在 protractor.config 文件的功能对象中将 Chrome 特定选项添加到 chromeOptions 对象,例如使用上面讨论的 disable-infobars 选项,使用以下内容:

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

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

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

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

            【讨论】:

              【解决方案9】:
              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;
              }
              

              【讨论】:

                【解决方案10】:
                ChromeOptions options = new ChromeOptions();
                options.setExperimentalOption("useAutomationExtension", false);
                options.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));    
                WebDriver driver = new ChromeDriver(options);
                

                使用上述代码获取最新的 Chrome 驱动程序。

                【讨论】:

                  【解决方案11】:

                  最新的 chromedrivers 不再支持“disable-info”开关。 (至少 76.0)。
                  @Rajeev 的回答有效,在这里我为 C# 编写对应的。

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

                  【讨论】:

                  • 这对我来说是醒的
                  • 嗨@David Piao,我在 ChromeOptions 类上没有任何 AddAdditionalOption 方法,我是不是遗漏了什么?
                  • 您确定您使用的是 C#/Selenium?
                  • 如果没有AddAdditionalOption,请检查AddAdditionalCapability
                  • 感谢您的回答!非常不满意Chrome功能没有全面的资源...
                  【解决方案12】:

                  你可以用这个

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

                  【讨论】:

                    【解决方案13】:

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

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

                    【讨论】:

                      【解决方案14】:

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

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

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

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

                      【讨论】:

                        【解决方案15】:

                        花了很多时间,但最终我找到了一个在 2021 年有效的标志组合!

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

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

                        【讨论】:

                          【解决方案16】:

                          它对我有用,使用此代码我可以禁用 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)
                          

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 2021-10-26
                            • 1970-01-01
                            • 2021-06-03
                            • 2018-04-26
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2019-12-13
                            相关资源
                            最近更新 更多