如何在 C# 中将 selenium 测试与 sauce labs 集成?
How can I integrate selenium tests with sauce labs in c#?
在 saucelabs 网站上,他们提供了这样的代码片段:
WebDriver webDriver = new WebDriver();
webDriver.set(new RemoteWebDriver(
new URL("https://UrlHEREagwgwgqwg4894+4+91gwgq")
))
当我将它添加到我的测试中时,在 WebDriver 下它说找不到类型或命名空间 'WebDriver'。它即将用于命名空间。对于我的 Selenium 测试,我使用的是 IWebDriver。我试图将 WebDriver 更改为 IWebDriver,但这没有用。我在 URL 下也遇到同样的错误,说找不到命名空间。对于那个,它确实显示了使用 System.Security.Policy 的名称空间;如果我添加它,那么我会在
下收到错误消息
new URL("https://UrlHEREagwgwgqwg4894+4+91gwgq")
参数 1:无法从 'System.Security.Policy.Url' 转换为 'OpenQA.Selenium.DriverOptions'
这就是我尝试使用它的方式。我在 selenium 测试中使用 ChromeDriver,但将该部分注释掉以使用 saucelabs 在其他浏览器上进行测试。这是我第一次与 selenium/saucelabs 一起工作,所以我正在做的事情完全没有意义,我很感激任何建议。
[Fact]
public static void ClickDownloadButton()
{
WebDriver driver = new WebDriver();
driver.set(new RemoteWebDriver(
new Url("https://UrlHEREagwgwgqwg4894+4+91gwgq")
));
//using IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl(BaseUrl.downloadsUrl);
var login = new Login(driver);
login.EnterEmail();
login.EnterPassword();
login.HitSubmit();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
var downloadButton = wait.Until((d) => d.FindElements(By.LinkText("Download File")));
foreach (var button in downloadButton)
{
IWebElement element = wait.Until((d) => d.FindElement(By.LinkText("Download File")));
element.Click();
}
driver.Quit();
}
以下是使用语句:
using Xunit;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;
using System.IO;
using System.Security.Policy;
using OpenQA.Selenium.Remote;
查看我们的 demo C# repository 示例。
这是一个您可以使用的工作示例 file:
using System;
using NUnit.Framework;
using NUnit.Framework.Interfaces;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Remote;
namespace Selenium3.Nunit.Scripts.SimpleExamples
{
[TestFixture]
[Category("SimpleTest")]
public class SimpleSauceTest
{
IWebDriver _driver;
[Test]
public void SimpleTest()
{
//TODO please supply your Sauce Labs user name in an environment variable
var sauceUserName = Environment.GetEnvironmentVariable(
"SAUCE_USERNAME", EnvironmentVariableTarget.User);
//TODO please supply your own Sauce Labs access Key in an environment variable
var sauceAccessKey = Environment.GetEnvironmentVariable(
"SAUCE_ACCESS_KEY", EnvironmentVariableTarget.User);
ChromeOptions options = new ChromeOptions();
options.AddAdditionalCapability(CapabilityType.Version, "latest", true);
options.AddAdditionalCapability(CapabilityType.Platform, "Windows 10", true);
options.AddAdditionalCapability("username", sauceUserName, true);
options.AddAdditionalCapability("accessKey", sauceAccessKey, true);
options.AddAdditionalCapability("name", TestContext.CurrentContext.Test.Name, true);
options.AddAdditionalCapability("build", "ShwabTeamName:" + DateTime.Now, true);
_driver = new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"), options.ToCapabilities(),
TimeSpan.FromSeconds(600));
_driver.Navigate().GoToUrl("https://www.google.com");
Assert.Pass();
}
[TearDown]
public void CleanUpAfterEveryTestMethod()
{
var passed = TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Passed;
((IJavaScriptExecutor)_driver).ExecuteScript("sauce:job-result=" + (passed ? "passed" : "failed"));
_driver?.Quit();
}
}
}
不要忘记安装正确的 Nuget 包,以便您拥有相应的资源。这是您需要的最低限度:
<package id="Selenium.Support" />
<package id="Selenium.WebDriver" />
旁注:
不要使用 static
方法,因为它会使您无法并行化。
在 saucelabs 网站上,他们提供了这样的代码片段:
WebDriver webDriver = new WebDriver();
webDriver.set(new RemoteWebDriver(
new URL("https://UrlHEREagwgwgqwg4894+4+91gwgq")
))
当我将它添加到我的测试中时,在 WebDriver 下它说找不到类型或命名空间 'WebDriver'。它即将用于命名空间。对于我的 Selenium 测试,我使用的是 IWebDriver。我试图将 WebDriver 更改为 IWebDriver,但这没有用。我在 URL 下也遇到同样的错误,说找不到命名空间。对于那个,它确实显示了使用 System.Security.Policy 的名称空间;如果我添加它,那么我会在
下收到错误消息 new URL("https://UrlHEREagwgwgqwg4894+4+91gwgq")
参数 1:无法从 'System.Security.Policy.Url' 转换为 'OpenQA.Selenium.DriverOptions'
这就是我尝试使用它的方式。我在 selenium 测试中使用 ChromeDriver,但将该部分注释掉以使用 saucelabs 在其他浏览器上进行测试。这是我第一次与 selenium/saucelabs 一起工作,所以我正在做的事情完全没有意义,我很感激任何建议。
[Fact]
public static void ClickDownloadButton()
{
WebDriver driver = new WebDriver();
driver.set(new RemoteWebDriver(
new Url("https://UrlHEREagwgwgqwg4894+4+91gwgq")
));
//using IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl(BaseUrl.downloadsUrl);
var login = new Login(driver);
login.EnterEmail();
login.EnterPassword();
login.HitSubmit();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
var downloadButton = wait.Until((d) => d.FindElements(By.LinkText("Download File")));
foreach (var button in downloadButton)
{
IWebElement element = wait.Until((d) => d.FindElement(By.LinkText("Download File")));
element.Click();
}
driver.Quit();
}
以下是使用语句:
using Xunit;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;
using System.IO;
using System.Security.Policy;
using OpenQA.Selenium.Remote;
查看我们的 demo C# repository 示例。
这是一个您可以使用的工作示例 file:
using System;
using NUnit.Framework;
using NUnit.Framework.Interfaces;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Remote;
namespace Selenium3.Nunit.Scripts.SimpleExamples
{
[TestFixture]
[Category("SimpleTest")]
public class SimpleSauceTest
{
IWebDriver _driver;
[Test]
public void SimpleTest()
{
//TODO please supply your Sauce Labs user name in an environment variable
var sauceUserName = Environment.GetEnvironmentVariable(
"SAUCE_USERNAME", EnvironmentVariableTarget.User);
//TODO please supply your own Sauce Labs access Key in an environment variable
var sauceAccessKey = Environment.GetEnvironmentVariable(
"SAUCE_ACCESS_KEY", EnvironmentVariableTarget.User);
ChromeOptions options = new ChromeOptions();
options.AddAdditionalCapability(CapabilityType.Version, "latest", true);
options.AddAdditionalCapability(CapabilityType.Platform, "Windows 10", true);
options.AddAdditionalCapability("username", sauceUserName, true);
options.AddAdditionalCapability("accessKey", sauceAccessKey, true);
options.AddAdditionalCapability("name", TestContext.CurrentContext.Test.Name, true);
options.AddAdditionalCapability("build", "ShwabTeamName:" + DateTime.Now, true);
_driver = new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"), options.ToCapabilities(),
TimeSpan.FromSeconds(600));
_driver.Navigate().GoToUrl("https://www.google.com");
Assert.Pass();
}
[TearDown]
public void CleanUpAfterEveryTestMethod()
{
var passed = TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Passed;
((IJavaScriptExecutor)_driver).ExecuteScript("sauce:job-result=" + (passed ? "passed" : "failed"));
_driver?.Quit();
}
}
}
不要忘记安装正确的 Nuget 包,以便您拥有相应的资源。这是您需要的最低限度:
<package id="Selenium.Support" />
<package id="Selenium.WebDriver" />
旁注:
不要使用 static
方法,因为它会使您无法并行化。