C#Selenium – 在不断增长的页面上寻找元素

我试图找到一个更好的方法来做到这一点,而不是使用:

js.ExecuteScript("scroll(0, 1300)"); 

我有一个页面,数据可以改变,使页面高度上下变化。 因此,当我今天点击一个位于1500px的元素时,明天它可能是800px并且找不到元素并且测试用例失败。

那么你们有什么用来在页面上找到尺寸变化的元素?

我不确定这是否有效,但您可以尝试使用以下内容获取页面的最大高度:

 Math.max($(document).height(), $(window).height()) 

然后,您可以使用js.ExecuteScript滚动。

之后我仍然使用findElement来启动点击。

我将进一步采取@ ratsstack的答案,让你更容易实现。 我不确定是否有更清洁的方法来做到这一点。 但是,至少应该有所作为。 您可以提供您认为足以使页面完全加载的估计滚动数。 请注意,您可以提供比您认为的更正确的数字。 它并没有真正伤害或不会导致您的脚本失败。

 public void ScrollPage(int counter) { const string script = @"window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));"; int count = 0; while (count != counter) { IJavaScriptExecutor js = _driver as IJavaScriptExecutor; js.ExecuteScript(script); Thread.Sleep(500); count++; } } 

注意:我正在使用Thread.Sleep()给页面一些时间来完成加载。 但是,从不建议使用硬编码使用。 我不确定您使用的技术,所以实际上无法提供等待页面加载的任何等待机制。 你可以使用一些东西并替换Thread.Sleep()

履行

 ScrollPage(8); 

我开始使用下面似乎工作得很好。 谢谢大家的帮助。

  IWebElement bio = SeleniumDriver.FindElement(By.XPath("path")); Actions actions = new Actions(SeleniumDriver); actions.MoveToElement(bio); actions.Perform();