【问题标题】:Using selenium Webdriver how to check if the webelement is outside the visible area of the screen?使用 selenium Webdriver 如何检查 webelement 是否在屏幕的可见区域之外?
【发布时间】:2012-05-12 02:37:51
【问题描述】:

我需要在滚动网页之前检查该元素是否不可见。该元素实际上存在于网页上,但在屏幕上不可见。滚动网页后,该元素对用户可见。

如何实现上述场景的自动化?

【问题讨论】:

    标签: selenium webdriver selenium-webdriver


    【解决方案1】:

    我找到了一种方法来检查元素是否可见。

    思路是获取页面的1.滚动位置; 2. 浏览器可见区域的高度,以及 3. 元素的 y 位置。

        scroll_position_script = """
            var pageY;
            if (typeof(window.pageYOffset) == 'number') {
                pageY = window.pageYOffset;
            } else {
                pageY = document.documentElement.scrollTop;
            }
            return pageY;
        """
    
        yOffset = self.browser.execute_script(scroll_position_script)
    
        js_client_height = "return document.documentElement.clientHeight;"
        browser_height = self.browser.execute_script(js_client_height)
    
        elem_yloc = int(element.location['y'])
        self.assertTrue(elem_yloc>=yOffset and elem_yloc<=yOffset+browser_height)
    

    【讨论】:

    • 这是一个特定于 python 的代码。 self.browser 指的是 webdriver 实例。在 Java 等中会有对 execute_script 的等效调用。最后一行确保元素的 y 位置在屏幕顶部 (yOffset) 和底部 (yOffset+browser_height) 之间
    【解决方案2】:

    @haroonzone 说了什么。它不能可靠地完成。

    也就是说,我会尝试使用 WebElement 上的 getLocation() 和 getSize() 方法。

    与driver.manage().window().getSize()猜想。

    或者也许玩 JavaScript window。即innerHeight 和innerWidth 位于window、document 或document.body DOM 元素上。如果您不想将滚动条计入视口,请使用clientWidth 和clientHeight。

    This link 为 IE 提供了一些高级建议,因为 IE 的工作方式显然不同。

    试试看效果如何。

    【讨论】:

      【解决方案3】:

      我不建议您使用任何测试自动化工具来自动化这些类型的测试,因为此测试不可靠并且不会始终如一地通过,主要原因如下。

      1. 如何确保特定元素在不同浏览器中不可见?

      2. 在不同的屏幕分辨率上运行相同的测试怎么样?

      3. 在不同尺寸的显示器上运行相同的测试?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-08
        • 1970-01-01
        • 2014-12-15
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-14
        相关资源
        最近更新 更多