使用selenium Webdriver如何检查webelement是否在屏幕的可见区域之外?

时间:2012-05-02 15:27:27

标签: selenium webdriver selenium-webdriver

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

如何自动执行上述方案?

3 个答案:

答案 0 :(得分:3)

我找到了检查元素是否可见的方法。

想法是获得页面的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)

答案 1 :(得分:0)

我不建议您使用任何测试自动化工具自动执行这些类型的测试,因为此测试不可靠,并且由于以下主要原因而无法持续通过。

  1. 您如何确保在不同浏览器中看不到特定元素?

  2. 如何在不同的屏幕分辨率下运行相同的测试?

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

答案 2 :(得分:0)

@haroonzone说的是什么。它无法可靠地完成。

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

driver.manage().window(). getSize()结合。

或许有些玩JavaScript window。即windowdocumentdocument.body或{{1}} DOM元素上的innerHeightinnerWidth。如果您不希望将滚动条计入视口,请使用clientWidthclientHeight

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

试一试,看看它是怎么回事。