【问题标题】:Get Session ID for a Selenium RemoteWebDriver in C#在 C# 中获取 Selenium RemoteWebDriver 的会话 ID
【发布时间】:2013-03-23 22:07:24
【问题描述】:

我正在尝试获取在 SauceLabs 云上运行的测试的会话 ID,但我似乎无法访问它。

我尝试了以下方法:

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

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

第二种方法特别令人困惑。它是一个受保护的属性,但如果我只能从派生类访问它,那么它对于我需要的东西基本上是无用的。

感谢任何帮助。

为了让它工作,我必须创建一个从RemoteWebDriver 派生的类,然后定义一个getter 方法。例如:

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();
    }
} 

【问题讨论】:

  • 它看起来几乎像 Casting 问题你能发布什么实际错误是很难看到你发布的小图片
  • 这里有一个在线指南,可以帮助您..您还可以展示这个类是如何定义的吗?我可以为您提供一个想法,但需要查看该类以及它是如何定义的为您的 RemoteWebDriver 定义..您如何继承此 testingbot.com/support/getting-started/csharp.html
  • 那么,我是否应该创建一个派生类来将我的 RemoteWebDriver 转换为然后使用 getter 方法访问会话 ID?
  • 类似public CustomRemoteDriver(Uri uri, DesiredCapabilities capabilities) : base(uri, capabilities) { } public SessionId getExecutionID() { return ((CustomRemoteDriver)Driver.Browser.driver).SessionId; } }
  • 是的,我就是这么做的。它有效,但它是不必要的迂回。继续添加答案,我会给你投票。

标签: c# unit-testing selenium-webdriver saucelabs


【解决方案1】:

使用反射也可以达到。

            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());
                }
            }

【讨论】:

    【解决方案2】:

    你可以做的一个例子

    class  CustomeRemoteDriver : RemoteWebDriver
    {    
        public CustomRemoteDriver(Uri uri, DesiredCapabilities capabilities) 
        : base(uri, capabilities)
        { 
        } 
    
        public SessionId getExecutionID() 
       { 
          return ((CustomRemoteDriver)Driver.Browser.driver).SessionId; 
       } 
    }
    

    【讨论】:

      【解决方案3】:

      只需获取 sessionId: 以此

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

      这里

      WebDriver webDriver = null; 
      

      已经声明了。

      【讨论】:

      • 这不起作用,因为 RemoteWebDriver 没有公开这个方法
      【解决方案4】:

      我正在使用selenium-dotnet-2.48.0,它工作得很好:

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

      确保将视频设置为 True:

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

      【讨论】:

        【解决方案5】:

        使用 Selenium.WebDriver Version="3.141.0",这是有效的:

        string sessionId = ((RemoteWebDriver)Driver).SessionId.ToString();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-04
          • 2017-10-21
          • 1970-01-01
          • 1970-01-01
          • 2021-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多