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

C# 使用selenium c确定元素在计算机屏幕上是否可见#,c#,selenium,scroll,element,C#,Selenium,Scroll,Element,我的主要目标是让程序从网页上的特定元素滚动开。我尝试过使用显示或可见功能,但它们不起作用。这是因为“显示”决定元素是否显示在网页上。我想要一种方法来确定元素是否显示在实际的计算机屏幕上。标识元素(在示例中使用XPath)没有什么错。我的代码: IJavaScriptExecutor js = (IJavaScriptExecutor)driver; IWebElement scroll = driver.FindElement(By.XPath("(//*[@class='_3ccb']/di

我的主要目标是让程序从网页上的特定元素滚动开。我尝试过使用显示或可见功能,但它们不起作用。这是因为“显示”决定元素是否显示在网页上。我想要一种方法来确定元素是否显示在实际的计算机屏幕上。标识元素(在示例中使用
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)");

}
IJavaScriptExecutor js=(IJavaScriptExecutor)驱动程序;
IWebElement scroll=driver.FindElement(By.XPath((/*[@class='''u3ccb']]/div[3])[1]);
对于(int p=1;p<1000;p++)
{
如果(scroll.displated==true)
js.ExecuteScript(“window.scrollBy(0,-1)”;
}

我希望程序看到元素并向上滚动,直到元素脱离实际的计算机屏幕,但它只向上滚动1000像素。

您可以使用元素Y坐标来代替scrollTo功能,只需记住包含元素高度:

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

我希望这有帮助。

您是否尝试过增加for循环中的值?对于(int p=1;p<10000;p++)来说,可能类似于此
。或者更好,使用while循环是的,我可以使用while循环,但问题不是for循环中的值。当元素不在屏幕上时,代码不会停止,它只会上升1000像素,因此使用10000只会使程序滚动10000像素,而不会在需要时停止。