Получить идентификатор сеанса для 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.
второй подход особенно запутан. Это защищенное свойство, но если я могу получить к нему доступ только из производного класса, то оно практически бесполезно для того, что мне нужно.
любая помощь приветствуется.
для того, чтобы это сработало, я должен был создайте класс, производный от 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");