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

本文关键字:属性 RemoteWebDriver 继承 如果 IWebDriver Selenium- 为什么 | 更新日期: 2023-09-27 18:27:19

在一个网页中,我有一个包含十列的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为用户正确显示,没有任何问题。如果我查看页面,就会看到elementID。

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

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

    通过强制驾驶员导航到元素

    var dummy = (element as OpenQA.Selenium.Remote.RemoteWebElement).LocationOnScreenOnceScrolledIntoView;
    

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

    Displayed=true
    Text="something"