【发布时间】:2018-01-07 04:29:15
【问题描述】:
我想使用 Java 的 Selenium WebDriver 中的 Robot 类向下滚动。我发现为了访问网页中所需的元素,我必须按 PgDn 按钮 28 次。因此,我想使用 Robot 类按 PgDn 按钮 28 次。我为此编写的代码如下:
try {
Robot robot = new Robot();
for(int i=0; i<29; i++) {
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
}
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
我使用了一个 for 循环来执行此操作,但它不起作用。 PgDn KeyEvent 只执行一次。
【问题讨论】:
-
你的方法效率不高,而且很脆弱。只需抓住所需的元素并滚动到它。
-
是的,杰夫。这肯定是另一个有利可图的解决方案。我以前不知道这个程序。我感谢您的支持。不过,我还有一个问题要问你。您能否告诉我,为什么您认为使用 for 循环的过程很脆弱或效率低下?我的意思是与您建议的程序相比有哪些缺点?
-
@JeffC - 不幸的是,您建议的解决方案不起作用,因为驱动程序无法使用 driver.findElement() 找到所需的元素因此, jse.executeScript("arguments[0].scrollIntoView( true);", element) 不起作用。首先,需要向下滚动到所需元素所在的页面所需部分。然后只有 WebElement element = driver.findElement(..) 可以工作。在这种情况下,我会看到以下异常:无法找到元素:{“method”:“xpath”,“selector”:“//*[@id='news-feed']/section[28]/article /section/a/div/h1"}
-
for循环很脆弱,因为如果页面布局发生变化并且所需元素在 28 时不再可用怎么办?屏幕分辨率、其他设备,甚至其他浏览器也可能不一样。