我正在尝试找到一种比使用更好的方法:
js.ExecuteScript("scroll(0, 1300)");
我有一个页面,数据可以更改,使页面高度变化大小。因此,当我今天点击位于1500px
的元素时,明天它可能是800px
,并且找不到该元素,并且测试用例失败。
那么你们用什么来定位尺寸变化的页面上的元素?
答案 0 :(得分:1)
我不确定这是否有用,但您可以尝试使用以下内容获取页面的最大高度:
Math.max($(document).height(), $(window).height())
然后您可以使用js.ExecuteScript滚动。
之后我仍然使用findElement来启动点击。
答案 1 :(得分:1)
我将进一步采取@ 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);
答案 2 :(得分:0)
我开始使用下面似乎工作得很好。谢谢大家的帮助。
IWebElement bio = SeleniumDriver.FindElement(By.XPath("path"));
Actions actions = new Actions(SeleniumDriver);
actions.MoveToElement(bio);
actions.Perform();