代码之家  ›  专栏  ›  技术社区  ›  Naruto Lee

为什么我使用该类型。GetField()aways返回null?[副本]

  •  0
  • Naruto Lee  · 技术社区  · 8 年前

    我使用GetField()获取selenium PID,但当我尝试获取“ProcessId”时,它总是返回null,可以看到img,ProcessId字段不是空的。 这是我的代码:

    public void tes(ChromeDriver driver) {
                var flag = System.Reflection.BindingFlags.NonPublic
                              | System.Reflection.BindingFlags.Instance;
                var executorField = typeof(OpenQA.Selenium.Remote.RemoteWebDriver)
                    .GetField("executor",
                              System.Reflection.BindingFlags.NonPublic
                              | System.Reflection.BindingFlags.Instance);
                object executor = executorField.GetValue(driver);
                var Service = executor.GetType().GetField("service", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                object remoteServerPidField = Service.GetValue(executor);
                var pid = remoteServerPidField.GetType().GetField("ProcessId", BindingFlags.Instance | BindingFlags.Static);
            }
    

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  2
  •   user9539019 user9539019    8 年前

    ProcessId 不是字段,而是属性。您应该使用 .GetProperty 相反

    也就是说,该属性是公共的,并且您已经有了一个服务实例,所以我不确定您为什么需要在这里进行反射--

    var service = executor.GetType()
                    .GetField("service", BindingFlags.NonPublic | BindingFlags.Instance)
                    .GetValue(executor) as ... ; // whatever type the 'service' is
    
    var pid = service?.ProcessId;