Saucelabs Selenium не использует данные прокси для RemoteWebDriver (C#) - PullRequest
0 голосов
/ 17 апреля 2020

Я использую реализацию Saucelabs Selenium для автоматизации моего тестирования на нескольких устройствах и платформах.

Использование демонстрационного кода из SauceLabs (ниже) не работает за прокси.

Я пытался добавить детали прокси в DesiredCapabilities, но, похоже, это ничего не делает

[TestMethod]
public void TestSauceLabs()
{
    DesiredCapabilities caps = new DesiredCapabilities();
    caps.SetCapability("browserName", "Safari");
    caps.SetCapability("platform", "macOS 10.13");
    caps.SetCapability("version", "11.1");
    caps.SetCapability("username", _sauceUserName);
    caps.SetCapability("accessKey", _sauceAccessKey);
    caps.SetCapability("name", _name);

    var tags = new List<string> {"demoTest", "sauceDemo"};
    caps.SetCapability("tags", tags);
    caps.SetCapability("maxDuration", 3600);
    caps.SetCapability("commandTimeout", 600);
    caps.SetCapability("idleTimeout", 1000);
    caps.SetCapability("build", "SauceDemo");

    /****************************************
     * Edited demo code here
     * Added proxy config to DesiredCapabilities **
     */
    var proxy = new Proxy
    {
        IsAutoDetect = false,
        HttpProxy = $"{_proxyScheme}://{_proxyHost}:{_proxyPort}",
        SslProxy = $"{_proxyScheme}://{_proxyHost}:{_proxyPort}",
        FtpProxy = $"{_proxyScheme}://{_proxyHost}:{_proxyPort}"
    };
    caps.SetCapability(CapabilityType.Proxy, proxy);
    /*
     *****************************************/

    var uri = new Uri("https://ondemand.eu-central-1.saucelabs.com/wd/hub");
    _driver = new RemoteWebDriver(uri,
        caps, TimeSpan.FromSeconds(600));

    _javascriptExecutor = ((IJavaScriptExecutor) _driver);

    _javascriptExecutor.ExecuteScript("sauce:context=Open SauceDemo.com");
    _driver.Navigate().GoToUrl(_url);

    _javascriptExecutor.ExecuteScript("sauce:context=Sleep for 10000ms");
    Thread.Sleep(10000);
    Assert.IsTrue(true);

    var passed = true;
    _javascriptExecutor.ExecuteScript("sauce:job-result=" + (passed ? "passed" : "failed"));
    _driver?.Quit();
}

1 Ответ

0 голосов
/ 17 апреля 2020

Обнаружено, что решением было использование HttpCommandExecutor при использовании RemoteWebDriver за прокси-сервером.

Вот мой пример кода:


[TestMethod]
public void TestSauceLabs_Chrome()
{
    var remoteOptions = new Dictionary<string, object>
    {
        { "username", _sauceUserName },
        { "accessKey", _sauceAccessKey },
        { "name", _name },
        { "maxDuration", 3600 },
        { "commandTimeout", 600 },
        { "idleTimeout", 1000 }
    };

    var options = new ChromeOptions()
    {
        PlatformName = "Windows 10",
        BrowserVersion = "latest"
    };

    //Remote options need to be global
    options.AddAdditionalCapability("sauce:options", remoteOptions, true);

    var caps = options.ToCapabilities();

    /*
     Using the HttpCommandExecutor persists the proxy details 
     and allows you to pass in credentials if required
     */
    var executor = new HttpCommandExecutor(
        new Uri("https://ondemand.eu-central-1.saucelabs.com/wd/hub"), 
        TimeSpan.FromSeconds(600))
    {
        Proxy = GenerateProxy()
    };

    _driver = new RemoteWebDriver(executor, caps);

    _javascriptExecutor = ((IJavaScriptExecutor)_driver);

    _javascriptExecutor.ExecuteScript($"sauce:context=Open {_url}");
    _driver.Navigate().GoToUrl(_url);

    _javascriptExecutor.ExecuteScript("sauce:context=Sleep for 10000ms");
    Thread.Sleep(10000);
    Assert.IsTrue(true);

    var passed = true;
    _javascriptExecutor.ExecuteScript("sauce:job-result=" + (passed ? "passed" : "failed"));
    _driver?.Quit();
}


public WebProxy GenerateProxy()
{
    var proxy = new WebProxy
    {
        Address = new Uri($"{_proxyScheme}://{_proxyHost}:{_proxyPort}"),
        BypassProxyOnLocal = false,
        UseDefaultCredentials = _networkCredential != null,
        Credentials = _networkCredential
    };

    return proxy;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...