我需要在滚动网页之前检查该元素是否不可见。该元素实际上存在于网页上,但在屏幕上不可见。滚动网页后,该元素对用户可见。
如何自动化上述场景?
我需要在滚动网页之前检查该元素是否不可见。该元素实际上存在于网页上,但在屏幕上不可见。滚动网页后,该元素对用户可见。
如何自动化上述场景?
我找到了一种检查元素是否可见的方法。
思路是获取页面的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
and innerWidth
on window
, document
, 或者可能是document.body
DOM 元素。如果您不想将滚动条计入视口,请使用clientWidth
and clientHeight
。
此链接为 IE 提供了一些高级建议,因为 IE 的工作方式显然不同。
试一试,看看效果如何。