【发布时间】:2012-05-12 02:37:51
【问题描述】:
我需要在滚动网页之前检查该元素是否不可见。该元素实际上存在于网页上,但在屏幕上不可见。滚动网页后,该元素对用户可见。
如何实现上述场景的自动化?
【问题讨论】:
标签: selenium webdriver selenium-webdriver
我需要在滚动网页之前检查该元素是否不可见。该元素实际上存在于网页上,但在屏幕上不可见。滚动网页后,该元素对用户可见。
如何实现上述场景的自动化?
【问题讨论】:
标签: selenium webdriver selenium-webdriver
我找到了一种方法来检查元素是否可见。
思路是获取页面的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)
【讨论】:
@haroonzone 说了什么。它不能可靠地完成。
也就是说,我会尝试使用 WebElement 上的 getLocation() 和 getSize() 方法。
与driver.manage().window().getSize()猜想。
或者也许玩 JavaScript window。即innerHeight 和innerWidth 位于window、document 或document.body DOM 元素上。如果您不想将滚动条计入视口,请使用clientWidth 和clientHeight。
This link 为 IE 提供了一些高级建议,因为 IE 的工作方式显然不同。
试试看效果如何。
【讨论】:
我不建议您使用任何测试自动化工具来自动化这些类型的测试,因为此测试不可靠并且不会始终如一地通过,主要原因如下。
如何确保特定元素在不同浏览器中不可见?
在不同的屏幕分辨率上运行相同的测试怎么样?
在不同尺寸的显示器上运行相同的测试?
【讨论】: