Объедините DesiredCapabilities с FirefoxOptions в Selenium Webdriver - PullRequest
0 голосов
/ 20 марта 2019

Я использую веб-драйвер Selenium в C # с прокси-сервером вместе с некоторыми дополнительными свойствами, как показано ниже

FirefoxOptions options = new FirefoxOptions();
options.AddArguments("disable-infobars");

String proxyServer= "192.168.1.8:808";
Proxy proxy = new Proxy();

proxy.HttpProxy = proxyServer;
proxy.FtpProxy = proxyServer;
proxy.SslProxy = proxyServer;

DesiredCapabilities cap = new DesiredCapabilities();
cap.SetCapability(CapabilityType.Proxy, proxy);

var firefoxDriverService = FirefoxDriverService.CreateDefaultService();
firefoxDriverService.HideCommandPromptWindow = true;

Экземпляр Webdriver инициализируется как

IWebDriver driver = new FirefoxDriver(firefoxDriverService, options, TimeSpan.FromSeconds(600));

Единственное, что я 'я не могу сделать, это объединить DesiredCapabilities с FirefoxOptions для использования прокси.Поэтому я хочу сделать что-то вроде этого

options.SetCapability(cap);

Есть ли способ обойти?

Ответы [ 3 ]

0 голосов
/ 20 марта 2019

Вместо DesiredCapabilities вы можете добавить Proxy к FirefoxOptiions следующим образом:

FirefoxOptions options = new FirefoxOptions();
options.AddArguments("disable-infobars");

String proxyServer= "192.168.1.8:808";
Proxy proxy = new Proxy();

proxy.HttpProxy = proxyServer;
proxy.FtpProxy = proxyServer;
proxy.SslProxy = proxyServer;

options.Profile.SetProxyPreferences(proxy); //this line is crucial
0 голосов
/ 20 марта 2019

Если все, что вы делаете, использует стандартный тип Proxy для установки параметров прокси для экземпляра экземпляра Firefox, современные версии привязок .NET предоставляют свойство FirefoxOptions.Proxy, которое будет интегрировано в Ваш код выглядит следующим образом:

FirefoxOptions options = new FirefoxOptions();
options.AddArguments("disable-infobars");

String proxyServer= "192.168.1.8:808";
Proxy proxy = new Proxy();

proxy.HttpProxy = proxyServer;
proxy.FtpProxy = proxyServer;
proxy.SslProxy = proxyServer;

options.Proxy = proxy;

var firefoxDriverService = FirefoxDriverService.CreateDefaultService();
firefoxDriverService.HideCommandPromptWindow = true;

WebDriver driver = new FirefoxDriver(firefoxDriverService, options, TimeSpan.FromSeconds(600));

Не нужно устанавливать свойства прокси в профиле пользователя, как в принятом ответе.

0 голосов
/ 20 марта 2019

Вы пробовали options.AddAdditionalCapability(CapabilityType.Proxy, proxy);?

Из источника :

public class FirefoxOptions : DriverOptions
...
        /// <summary>
        /// Provides a means to add additional capabilities not yet added as type safe options
        /// for the Firefox driver.
        /// </summary>
        /// <param name="optionName">The name of the capability to add.</param>
        /// <param name="optionValue">The value of the capability to add.</param>
        /// <exception cref="ArgumentException">
        /// thrown when attempting to add a capability for which there is already a type safe option, or
        /// when <paramref name="optionName"/> is <see langword="null"/> or the empty string.
        /// </exception>
        /// <remarks>Calling <see cref="AddAdditionalFirefoxOption(string, object)"/>
        /// where <paramref name="optionName"/> has already been added will overwrite the
        /// existing value with the new value in <paramref name="optionValue"/>.
        /// Calling this method adds capabilities to the Firefox-specific options object passed to
        /// geckodriver.exe (property name 'moz:firefoxOptions').</remarks>
        public void AddAdditionalFirefoxOption(string optionName, object optionValue)
        {
            this.ValidateCapabilityName(optionName);
            this.additionalFirefoxOptions[optionName] = optionValue;
        }
...
...