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像素,而不会在需要时停止。