C# Selenium-如果IWebDriver属性是继承的,为什么IWebDriver属性与RemoteWebDriver属性不同?
在一个网页中,我有一个包含十列的gridView。六个对用户可见,四个不在页面上。要查看其他四个,用户需要水平滚动 在selenium中,我有一个将所有列标题元素放入集合的通用方法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
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…结果是什么?