Selenium - 如果继承了IWebDriver属性,为什么它们与RemoteWebDriver属性不同?

时间:2014-10-21 22:44:02

标签: c# gridview selenium

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

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

public IWebElement[] GetColumnHeaders()
    {
        IWebElement[] columnHeaders = mainResult.FindElements(By.ClassName("dxgvHeader")).ToArray();
        return columnHeaders;
    }

此集合包含预期的十个元素。但只有前六个包含Text。

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

  • 标题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基础.Text属性不是为空。

    他们刚刚完全没有初始化吗?

    一些问题:

  • 为什么IWebElement未获得TextDisplayed,但基本RemoteWebElement获得TextDisplayed
  • 如何获取这些元素的文本?

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

  • 1 个答案:

    答案 0 :(得分:0)

    我发布这个作为答案,但它不是最好的。

    强制驱动程序通过

    导航到Element
    var dummy = (element as OpenQA.Selenium.Remote.RemoteWebElement).LocationOnScreenOnceScrolledIntoView;
    

    这会导致ChromeDriver自动将网页滚动到该对象,这也会改变预期的属性

    Displayed=true
    Text="something"