如何在硒测试中删除信息栏"Microsoft Edge is being controlled by automated test software"

How to remove the infobar "Microsoft Edge is being controlled by automated test software" in selenium test

我们正在使用 selenium 运行 测试 "Chromium based Edge"。 "The Chromium Edge"是从https://www.microsoftedgeinsider.com/en-us/download下载的,版本是80.0.334.2(正式版)dev(64位)。 我们从 https://msedgewebdriverstorage.z22.web.core.windows.net/

得到匹配的驱动程序 msedgedriver.exe

我们将 "C:\Program Files (x86)\Microsoft\Edge Dev\Application" 添加到环境 "PATH" 中,以便在测试期间找到可执行文件 "msedge.exe"。 使用选项-Dwebdriver.edge.driver="pathTo\msedgedriver.exe"启动selenium服务器后,我们可以在"Chromium Edge"中得到测试运行,如下所示:

但是有一个信息栏"Microsoft Edge is being controlled by automated test software",就像我们运行用chrome浏览器测试一样。使用 chrome,我们可以通过将以下 ExperimentalOption 设置为 ChromeOptions

来删除该信息栏
  1. useAutomationExtension=false
  2. excludeSwitches=[启用自动化]
  3. prefs={credentials_enable_service=false, 配置文件={password_manager_enabled=false}}

我尝试设置相同的选项,但我启动了一个没有信息栏的浏览器,但它是一个 chrome 浏览器,而不是 "Chromium Edge"。

你没看错。

根据文章 Microsoft’s Edge Chromium browser will launch on January 15th with a new logo Microsoft is planning to release its Edge Chromium browser on January 15th 2020 with availability for Windows 10, Windows 7, Windows 8, and macOS. This came just after Microsoft released the beta version of Edge

现在,这个 Beta 也意味着 Microsoft 正在接近其 Chromium 浏览器的发布阶段。微软首先发布了 Canary and Developer builds of Edge back in April,该公司在过去四个月中一直与 Google 合作,为 Windows 改进 Chromium。这项工作还涉及 Microsoft 习惯于交付 Chromium 浏览器的节奏。

因此添加 ExperimentalOption 您会看到 Microsoft 的 Edge Chromium 浏览器 几乎就像 Chromium / Chrome 浏览器.

您可以参考以下代码(C#代码)来设置chrome选项和移除信息栏。

        var edgechromiumService = ChromeDriverService.CreateDefaultService(@"E:\edgedriver_win64", "msedgedriver.exe");
        // user need to pass the driver path here....
        ChromeOptions edgechromeOptions = new ChromeOptions
        {
            BinaryLocation = @"C:\Program Files (x86)\Microsoft\Edge Dev\Application\msedge.exe",
        };

        edgechromeOptions.AddAdditionalCapability("useAutomationExtension", false);
        edgechromeOptions.AddExcludedArgument("enable-automation"); 

        using (IWebDriver driver = new ChromeDriver(edgechromiumService, edgechromeOptions))
        {
            driver.Navigate().GoToUrl("https://www.bing.com/");
            Console.WriteLine(driver.Title.ToString());

            //driver.Close();
            Console.ReadKey();
        }

结果是这样的:

Java个应用,请尝试使用以下代码:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions; 
import org.openqa.selenium.edge.EdgeOptions;    
import java.util.*;  
public class Edgeauto {
    public static void main(String[] args) { 
        System.setProperty("webdriver.chrome.driver", "your\path\to\edge\webdriver\msedgedriver.exe");
        ChromeOptionschromeOptions = new ChromeOptions();
        chromeOptions.setBinary("C:\Program Files (x86)\Microsoft\Edge Dev\Application\msedge.exe");

        chromeOptions.setExperimentalOption("useAutomationExtension", false);
        chromeOptions.setExperimentalOption("excludeSwitches",Collections.singletonList("enable-automation"));

        EdgeOptions edgeOptions = new EdgeOptions().merge(chromeOptions);
        WebDriver driver = new ChromeDriver(edgeOptions);
        driver.get("https://www.google.com/");
     }
}

@Zhi Lv - MSFT

您启动的浏览器是什么? Chrome 还是 Chromium-Edge?我正在使用 selenium java 代码,如果我 运行 类似下面的 java 代码,它将失败并出现错误 驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统设置 属性;

System.setProperty("webdriver.edge.driver", "C:\SeleniumPlus\extra\msedgedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("C:\Program Files (x86)\Microsoft\Edge Dev\Application\msedge.exe");
chromeOptions.setExperimentalOption("useAutomationExtension", false);
chromeOptions.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("http://www.google.com");

如果我创建边缘功能并将 Chrome 选项合并到其中,我可以看到 "Chromium-Edge" 在没有 "infobar" 的情况下启动,但它只是卡在那里并失败有错误 未知错误:无法识别 Chrome 版本:Edg/80.0.361.5

System.setProperty("webdriver.edge.driver", "C:\SeleniumPlus\extra\msedgedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("C:\Program Files (x86)\Microsoft\Edge Dev\Application\msedge.exe");
chromeOptions.setExperimentalOption("useAutomationExtension", false);
chromeOptions.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
DesiredCapabilities m_capability = DesiredCapabilities.edge();
m_capability.merge(chromeOptions);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), m_capability);
driver.get("http://www.google.com");

从 "selenium server" 控制台,我可以看到,"browserName" 是 "chrome",我想这就是为什么 chrome 的选项正在工作的原因摆脱 "infobar"

15:37:55.502 INFO [ActiveSessionFactory.apply] - Capabilities are: {
  "browserName": "chrome",
  "goog:chromeOptions": {
    "args": [
    ],
    "binary": "C:\Program Files (x86)\Microsoft\Edge Dev\Application\msedge.exe",
    "excludeSwitches": [
      "enable-automation"
    ],
    "extensions": [
    ],
    "useAutomationExtension": false
  },
  "platform": "WINDOWS",
  "version": ""
}

如果我在合并 chrome 的选项后将 "browserName" 设置为 "MicrosoftEdge",它可以启动 "Chromium-Edge",但是 chrome 的选项不再起作用,这意味着 "infobar" 仍然存在。

m_capability.merge(chromeOptions);
m_capability.setCapability(CapabilityType.BROWSER_NAME, BrowserType.EDGE);

我想我可以解释所有的困惑(也许是为了我自己)。在下面linkMicrosoft Chromium Edge

我们可以找到如下内容: 如果您之前通过 使用 ChromeDriver 和 ChromeOptions 自动化或测试 Microsoft Edge (Chromium),您的 WebDriver 代码将不会 运行 成功针对 Microsoft Edge 80 或更高版本 这是一项重大更改,Microsoft Edge (Chromium) 不再接受这些命令。您必须更改测试以使用 EdgeOptions 和 Microsoft Edge Driver。

因此我们可以将 Chromium-Edge(版本小于 80)完全作为 chrome 浏览器

System.setProperty("webdriver.chrome.driver", "C:\SeleniumPlus\extra\msedgedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("C:\Program Files (x86)\Microsoft\Edge Dev\Application\msedge.exe");
chromeOptions.setExperimentalOption("useAutomationExtension", false);
chromeOptions.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
ChromeDriver driver = new ChromeDriver(chromeOptions);
driver.get("http://www.google.com");
driver.close();

对于Chromium-Edge(80以上版本),我们应该把它当作一个Edge浏览器,代码如下:

问题是 EdgeOptions 没有提供足够的 API(setBinarysetExperimentalOption)作为 ChromeOptions ☹。

我在 github 查看了 selenium 的源代码,发现 EdgeOptions 已经支持这些方法作为 ChromeOptions。所以我下载了最新的官方版本 3.141.59,它于 2018 年 12 月 20 日发布,我发现它不包含最新的源代码☹。 所以我得到了 alpha release 4.0.0-alpha-4,它确实包含最新的源代码。

System.setProperty("webdriver.edge.driver", "C:\SeleniumPlus\extra\msedgedriver.exe");
EdgeOptions edgeOptions = new EdgeOptions();
edgeOptions.setBinary("C:\Program Files (x86)\Microsoft\Edge Dev\Application\msedge.exe");
edgeOptions.setExperimentalOption("useAutomationExtension", false);
edgeOptions.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
EdgeDriver driver = new EdgeDriver(edgeOptions);
driver.get("http://www.google.com");
driver.close();

最后要感谢我的战友Carl战友,他帮我找到了窍门