gpt4 book ai didi

c# - BrowserStack:意外错误。需要授权

转载 作者:可可西里 更新时间:2023-11-01 08:41:51 25 4
gpt4 key购买 nike

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

因为我正在使用 DriverOptions(而不是 DesiredCapabilities),所以我使用了 AddAdditionalCapability(...) 将这些功能添加到驱动程序.

Edge 测试正常,但 Chrome 测试甚至在测试开始之前就失败了;

OpenQA.Selenium.WebDriverException: Unexpected error. Authorization required

在我将我的 Selenium 驱动程序升级到 v3.14(其中 DesiredCapabalities 已被弃用)之前,这些测试之前使用 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);
}
}

我安装了以下软件包:

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

最佳答案

这似乎是一个特定于 selenium 语言绑定(bind)如何生成有效负载以及 browserstack 在其末端如何解析它的问题。

根据您分享的错误消息,很可能在解析请求负载时,browserstack 无法找到您的用户名和访问 key

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

  • 更改行 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)

  • 观察您正在使用的 selenium 客户端绑定(bind)生成的请求负载(您提到的 v3.14)。例如,我的基于 java 的 selenium 客户端在仅传递浏览器时生成它是 desiredcapabitlies {"desiredCapabilities":{"browserName":"Chrome"},"capabilities":{"firstMatch":[{"browserName":"Chrome"}]}}

  • 现在将您的 selenium 绑定(bind)降级(到它可以工作的版本)并观察它生成的有效载荷。

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

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

  • 提出有关 selenium C# 绑定(bind)的问题,以取消对您的案例的严格检查
  • 联系Browserstack,请他们提供通过严格检查的能力

关于c# - BrowserStack:意外错误。需要授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52207093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com