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();
- 如何在Visual Studio 2010和Windows 7中使用FIPSvalidation的加密算法?
- Unity 5.3 – 输入字段在按下时不会检测到第一个“返回”键
- 可以在不执行Marshal.Copy的情况下将IntPtr强制转换为字节数组吗?
- 在Saucelabs中使用Selenium远程Firefox webdriver安装扩展程序
- 使用Visual Studio在代码中查找等待的方法
- 我如何加入一个字符串数组,但首先删除数组中的空元素?
- 如何列出本地计算机上安装的SQL Server实例? (仅限本地)
- SignalR Typenamehandling
- 我可以简单地“读取”正在使用的文件吗?