C# Selenium-如果IWebDriver属性是继承的,为什么IWebDriver属性与RemoteWebDriver属性不同?

C# Selenium-如果IWebDriver属性是继承的,为什么IWebDriver属性与RemoteWebDriver属性不同?,c#,gridview,selenium,C#,Gridview,Selenium,在一个网页中,我有一个包含十列的gridView。六个对用户可见,四个不在页面上。要查看其他四个,用户需要水平滚动 在selenium中,我有一个将所有列标题元素放入集合的通用方法 public IWebElement[] GetColumnHeaders() { IWebElement[] columnHeaders = mainResult.FindElements(By.ClassName("dxgvHeader")).ToArray(); retu

在一个网页中,我有一个包含十列的gridView。六个对用户可见,四个不在页面上。要查看其他四个,用户需要水平滚动

在selenium中,我有一个将所有列标题元素放入集合的通用方法

public IWebElement[] GetColumnHeaders()
    {
        IWebElement[] columnHeaders = mainResult.FindElements(By.ClassName("dxgvHeader")).ToArray();
        return columnHeaders;
    }
此集合包含预期的十个元素。但只有前六个包含文本

因此,如果我得到集合中每个元素的文本,我得到

标题1的文本 标题2的文本 标题3的文本 标题4的文本 标题5的文本 标题6的文本 空的 空的 空的 空的

每个columnHeader都是一个IWebElement,似乎来自对象RemoteWebElement

在调试器中,我可以看到columnHeader[7]的属性,如下所示

[OpenQA.Selenium.Remote.RemoteWebElement]
Displayed = false
Enabled = true
...
Text = ""
当我展开[OpenQA.Selenium.Remote.RemoteWebElement]并查看其基本属性时,我看到

Coordinates = {OpenQA.Selenium.Remote.RemoteCoordinates}
Displayed = true
Enabled = true
...
Text = "text for header 7"
因此IWebElement.Text属性为空。 但其RemoteWebElement base.Text属性不是空的

它们只是没有完全初始化吗

一些问题: 为什么IWebElement不获取文本或显示,而基本RemoteWebElement获取文本并显示? 如何获取这些元素的文本


gridView为用户正确显示,没有任何问题。如果我查看页面,我会看到元素ID。

我将此作为一个答案发布,但它不是最好的答案

通过以下方式强制驾驶员导航到元素:

var dummy = (element as OpenQA.Selenium.Remote.RemoteWebElement).LocationOnScreenOnceScrolledIntoView;
这会导致ChromeDriver自动将网页滚动到该对象,这也会更改预期的属性

Displayed=true
Text="something"

什么浏览器?另外,顺便说一句,你不需要做。ToArray和passing数组就在附近。使用它返回的列表。我使用的是Chrome webDriver。我可以通过“最大化窗口”或“更改缩放级别”来避免这个问题。但这只是一个临时修复,并不能真正解决问题。将所有元素放入一个列表会显示相同的效果。听起来这些元素不可见,这是驱动程序可能返回空字符串的原因之一。遍历每个元素并检查其显示属性,或者先过滤它们。mainResult.FindElementsBy.ClassNamedxgvHeader.where=>e.displated…结果是什么?