BrowserStack:意外错误.需要授权

Mar*_*per 12 c# selenium browserstack remotewebdriver desiredcapabilities

我有使用两个简单的测试RemoteWebDriverChromeOptionsEdgeOptions.这两个测试都使用通用代码来设置功能,包括功能browserstack.userbrowserstack.key功能.

因为我使用DriverOptions(而不是DesiredCapabilities)我曾经使用AddAdditionalCapability(...)过这些功能添加到驱动程序.

边缘测试正在运行,但Chrome测试在测试开始之前就失败了;

OpenQA.Selenium.WebDriverException:意外错误.需要授权

DesiredCapabalities在将我的Selenium驱动程序升级到v3.14(DesiredCapabalities已经被删除)之前,这些测试以前一直在使用.


更新

我降级到Selenium.WebDriver v3.4.

传递(EdgeOptions)和失败(使用ChromeOptions)的代码示例:

[TestClass]
public class Simple_GridTest_Chrome
{
    private static IWebDriver driver;

    private string _bsUsername = "<username>";
    private string _bsAccessKey = "<myaccesskey>";

    private string _bsProjectName = "TestProject";
    private string _bsBuildName = "Build-0.0.1";

    private void SetOptions(bool useEdge = false)
    {
        DriverOptions options;

        if (useEdge)
        {
            options = new EdgeOptions(); // this works OK
        } else
        {
            options = new ChromeOptions(); // this fails with OpenQA.Selenium.WebDriverException: Unexpected error. Authorization required
        }

        // the account that is running the test
        options.AddAdditionalCapability("browserstack.user", _bsUsername);
        options.AddAdditionalCapability("browserstack.key", _bsAccessKey);

        options.AddAdditionalCapability("project", _bsProjectName);
        options.AddAdditionalCapability("build", _bsBuildName);

        // gather additional data during the test run (screen shots etc)
        options.AddAdditionalCapability("browserstack.debug", "true");

        driver = new RemoteWebDriver(
          new Uri("https://hub-cloud.browserstack.com/wd/hub/"), options
        );

        //driver = new RemoteWebDriver(
        //  new Uri($"https://{_bsUsername}:{_bsAccessKey}@hub-cloud.browserstack.com/wd/hub/"), options
        //);
    }

    [ClassInitialize()]
    public static void MyClassInitialise(TestContext context)
    {
    }

    [TestMethod]
    [TestCategory("grid.BrowserStack.Google")]
    public void NavigateToGoogle_Windows7_Chrome()
    {
        SetOptions(false); // use Chrome
        GoogleTest(driver);
    }

    [TestMethod]
    [TestCategory("grid.BrowserStack.Google")]
    public void NavigateToGoogle_Windows10_Edge()
    {
        SetOptions(true); // use Edge
        GoogleTest(driver);
    }

    private void GoogleTest(IWebDriver driver)
    {
        driver.Navigate().GoToUrl("https://www.google.com/?q=test");
        Console.WriteLine(driver.Title);

        driver.WaitForWebElement(By.XPath("//*[@name=\"btnK\"]")).Click();
        Console.WriteLine(driver.Title);
    }
}
Run Code Online (Sandbox Code Playgroud)

我安装了以下软件包:

<packages>
  <package id="Selenium.Firefox.WebDriver" version="0.21.0" targetFramework="net45" />
  <package id="Selenium.Support" version="3.4.0" targetFramework="net45" />
  <package id="Selenium.WebDriver" version="3.4.0" targetFramework="net45" />
  <package id="Selenium.WebDriver.ChromeDriver" version="2.41.0" targetFramework="net45" />
  <package id="Selenium.WebDriver.IEDriver" version="3.14.0" targetFramework="net45" />
</packages>
Run Code Online (Sandbox Code Playgroud)

Bou*_*ter 5

这似乎是特定于硒语言绑定如何生成有效负载以及浏览器堆栈如何在其末尾解析它的问题。

根据您共享的错误消息,很有可能在解析请求有效负载时,浏览器堆栈无法找到您的用户名和访问密钥

您可以按照下面提到的步骤进行调试:

  • 将行更改driver = new RemoteWebDriver(new Uri("https://hub-cloud.browserstack.com/wd/hub/"), options);driver = new RemoteWebDriver( new Uri("http://localhost:4444/wd/hub/"), options );。您不需要在本地启动selenium-standalone jar。

  • 启动一个代理,该代理读取localhost:4444上的流量。(如果需要,您可以将基于节点的实现用于相同的实现。这是一个这样的实现:https : //gist.github.com/hanikhan/f817bd64b063129cb78dc7ed0b66fdb7

  • 观察由您正在使用的硒客户端绑定生成的请求有效负载(如上所述,v3.14)。例如,当仅需要通过浏览器时,我的基于Java的Selenium客户端会生成此消息{"desiredCapabilities":{"browserName":"Chrome"},"capabilities":{"firstMatch":[{"browserName":"Chrome"}]}}

  • 现在,将您的硒绑定降级(降级至工作所在的版本),并观察其生成的有效负载。

检查客户端绑定是否使用严格的检查,因为某些必需的功能在您的末端被丢弃。

如果是这样,那么您将需要执行以下操作之一:

  • 提出与硒C#绑定有关的问题,以删除针对您的情况的严格检查
  • 联系Browserstack并要求他们提供通过严格检查的功能


Kir*_*raj 4

您可以使用 EdgeOptions 和 ChromeOptions 为 Edge 和 Chrome 传递以下功能,以在 BrowserStack 上启动会话。这是在Java中。将您的测试相应地移植到其他语言。

对于边缘

EdgeOptions options = new EdgeOptions();

 options.setCapability("browserstack.user","<userName>");
 options.setCapability("browserstack.key","<accessKey>");
 options.setCapability("os_version", "10"); //desired os_version
 options.setCapability("browser", "chrome"); //desired browser

 driver = new RemoteWebDriver(new URL("https://hub-cloud.browserstack.com/wd/hub"), options);
Run Code Online (Sandbox Code Playgroud)

对于铬

 ChromeOptions options = new ChromeOptions();

    options.setCapability("browserstack.user","<userName>");
    options.setCapability("browserstack.key","<accessKey>");
    options.setCapability("os_version", "10");
    options.setCapability("browser", "chrome");

    driver = new RemoteWebDriver(new URL("https://hub-cloud.browserstack.com/wd/hub"), options);
Run Code Online (Sandbox Code Playgroud)

  • 是的,我可以重现同样的错误。ChromeOptions 类似乎存在问题。我将尝试进一步调试。但是,由于您收到授权错误,您可以尝试以下方式: var Capability = new ChromeOptions(); driver = new RemoteWebDriver( new Uri("http://&lt;用户名&gt;:&lt;accessKey&gt;@hub-cloud.browserstack.com/wd/hub/"), 能力 ); (2认同)