Как я могу интегрировать тесты на селен с лабораториями соуса в 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

Вот как я пытаюсь это использовать. Я использовал ChromeDriver для своих тестов на селен, но прокомментировал эту часть для тестирования в других браузерах с помощью 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;

person dev_in_training    schedule 11.03.2021    source источник


Ответы (1)


Ознакомьтесь с нашим демонстрационным репозиторием C # с множеством примеров.

Вот рабочий пример, который вы можете использовать из следующего файл:

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 методы, так как это сделает невозможным распараллеливание.

person Nikolay Advolodkin    schedule 11.03.2021
comment
Спасибо за пример. Если я хочу протестировать несколько браузеров, как бы я это сделал? Похоже, этот пример предназначен только для хрома. Также у меня есть тесты на селен с использованием x-unit. Можно ли использовать лаборатории соусов с x-unit или это должно быть nunit? - person dev_in_training; 11.03.2021
comment
Перекрестный браузер, как это github.com/saucelabs-training/demo-csharp/blob/. Да, Sauce поддерживает все библиотеки тестирования. Однако вам нужно выяснить, как реплицировать код, которым я поделился с Xunit. Xunit не очень популярная библиотека, поэтому мы не пишем для нее примеры. Если вы решите использовать более популярные библиотеки, такие как Nunit или MsTest, все примеры, которые вам когда-либо понадобятся, существуют здесь github.com/saucelabs-training/demo-csharp - person Nikolay Advolodkin; 12.03.2021
comment
@dev_in_training, если мой ответ решил вашу проблему, не забудьте отметить его как ответ и проголосовать, чтобы помочь другим - person Nikolay Advolodkin; 12.03.2021