Получить идентификатор сеанса для Selenium RemoteWebDriver в C#

Я пытаюсь получить идентификатор сеанса для теста, запускаемого в облаке SauceLabs, но я не могу получить к нему доступ.

Я пробовал следующие подходы:

//Returns null
var sessionId = (string)((RemoteWebDriver)driver).Capabilities.GetCapability("webdriver.remote.sessionid");

//Will not compile
sessionId = ((RemoteWebDriver)driver).SessionId; //This is protected. 

второй подход особенно запутан. Это защищенное свойство, но если я могу получить к нему доступ только из производного класса, то оно практически бесполезно для того, что мне нужно.

Session ID

любая помощь приветствуется.

для того, чтобы это сработало, я должен был создайте класс, производный от RemoteWebDriver а затем определите метод геттера. Например:

class  CustomeRemoteDriver : RemoteWebDriver
{

    public CustomeRemoteDriver(ICapabilities desiredCapabilities):base(desiredCapabilities)
    {
    }

    public CustomeRemoteDriver(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities):base(commandExecutor, desiredCapabilities)
    {
    }

    public CustomeRemoteDriver(Uri remoteAddress, ICapabilities desiredCapabilities):base(remoteAddress, desiredCapabilities)
    {
    }

    public CustomeRemoteDriver(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout):base(remoteAddress, desiredCapabilities, commandTimeout)
    {
    }

    public string GetSessionId()
    {
        return base.SessionId.ToString();
    }
} 

4 ответов


пример того, что вы могли бы сделать

class  CustomeRemoteDriver : RemoteWebDriver
{    
    public CustomRemoteDriver(Uri uri, DesiredCapabilities capabilities) 
    : base(uri, capabilities)
    { 
    } 

    public SessionId getExecutionID() 
   { 
      return ((CustomRemoteDriver)Driver.Browser.driver).SessionId; 
   } 
}

также может достигать при использовании отражения.

            var sessionIdProperty = typeof(RemoteWebDriver).GetProperty("SessionId", BindingFlags.Instance | BindingFlags.NonPublic);
            if (sessionIdProperty != null)
            {
                SessionId sessionId = sessionIdProperty.GetValue(driver, null) as SessionId;
                if (sessionId == null)
                {
                    Trace.TraceWarning("Could not obtain SessionId.");
                }
                else
                {
                    Trace.TraceInformation("SessionId is " + sessionId.ToString());
                }
            }

просто получить sessionId: по этой

String sessionId = ((RemoteWebDriver)webDriver).getSessionId().toString();

здесь

WebDriver webDriver = null; 

уже объявлен.


Я использую selenium-dotnet-2.48.0 и это работает просто отлично:

string sessionId = ((RemoteWebDriver)driver).Capabilities.GetCapability("webdriver.remote.sessionid").ToString(); 

убедитесь, что вы установили видео в true:

DesiredCapabilities capability = DesiredCapabilities.Firefox();
...
capability.SetCapability("video", "True");