使用硒C#确定元素在计算机屏幕上是否可见

时间:2018-08-13 21:23:22

标签: c# selenium scroll element

我的主要目标是使程序滚动到网页上的特定元素之外。我尝试使用显示或可见功能,但是它们不起作用。这是因为显示决定了元素是否显示在网页上。我想要一种确定元素是否显示在实际计算机屏幕上的方法。标识元素没有问题(在示例中使用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个像素。

1 个答案:

答案 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)");

我希望这会有所帮助。

相关问题