2016-12-19 4 views
0

я объявляю мое Селен WebDriver ссылка как это:Селен - Как изменить «CommandTimeout» После того, как WebDriver будет Заявленный

var driver = new FirefoxDriver(service, 
    new FirefoxOptions { 
     BrowserExecutableLocation = "XXXX", 
     Profile = firefoxProfile, 
     UseLegacyImplementation = true }, 
    new TimeSpan(0, 1, 30)); 

Он отлично работает 99% времени, однако есть определенные случаи, когда я хочу изменить значение по умолчанию «commandTimeout» на что-то, кроме 90 секунд. Как мне это сделать без переопределения драйвера?

Я исследовал все методы/свойства следующий класс и не кажется, изменение любого из них имеет никакого эффекта:

driver.Manage().Timeouts() 

Там также this post, но это не связано с «CommandTimeout ». Там this, который на самом деле не покрывает ПОСЛЕ создания драйвера. Большинство сообщений о тайм-аутах Selenium связаны с неявным ожиданием или различными другими таймаутами, а не значением таймаута, указанным в объявлении драйвера.

ответ

0

Зачем вам нужно установить commandTimeout? На самом деле это только резервная копия, когда драйвер больше не отвечает. Это не имеет никакого отношения к тому, чтобы управлять браузерами.

Глядя в selenium source code, вы можете увидеть параметр commandTimeout передается в RemoteWebdriver.ICommandExecutor поле, которое private. Это означает, что после инициализации больше невозможно получить доступ или изменить тайм-аут команды.

Очень хакерское и, конечно же, не рекомендуемое «решение» для этого может заключаться в использовании отражения для доступа к собственности. Это, конечно же, не рекомендуется, так как оно сильно зависит от используемого вами драйвера и поэтому может прерываться в любой момент.

Если вам нужны чрезмерные таймауты изредка, часто бывает лучше установить commandTimeout на высокое значение и управлять таймаутом с помощью ImplicitWait & co.