我的主要目标是使程序滚动到网页上的特定元素之外。我尝试使用显示或可见功能,但是它们不起作用。这是因为显示决定了元素是否显示在网页上。我想要一种确定元素是否显示在实际计算机屏幕上的方法。标识元素没有问题(在示例中使用XPath
)。我的代码:
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
IWebElement scroll = driver.FindElement(By.XPath("(//*[@class='_3ccb']/div[3])[1]"));
for (int p = 1; p < 1000; p++)
{
if(scroll.Displayed == true)
js.ExecuteScript("window.scrollBy(0,-1)");
}
我希望程序看到该元素并向上滚动,直到该元素离开实际的计算机屏幕为止,但是它只是向上滚动1000个像素。
答案 0 :(得分:1)
您可以在scrollTo函数中使用元素Y坐标,只需记住将元素高度包括在内即可。
var js = (IJavaScriptExecutor)driver;
var element= driver.FindElement(By.XPath("(//*[@class='_3ccb']/div[3])[1]"));
int yCoord = element.Location.Y;
int elementHeight = element.Size.Height;
int scrollAmount = yCoord + elementHeight;
js.ExecuteScript("window.scrollTo(0,"+ scrollAmount + ")");
这将滚动到元素上方。
如果您希望它位于元素的折叠之下,则需要从元素的Y位置减去浏览器的视口高度。您可以这样获得视口高度:
var viewPortHeight = jse.ExecuteScript("return Math.max(document.documentElement.clientHeight, window.innerHeight || 0)");
我希望这会有所帮助。