我想使用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只执行一次。
答案 0 :(得分:0)
如果我们还需要添加密钥发布。下面的代码可能会给你一些想法。
try
{
Robot robot=new Robot();
robot.keyPress(KeyEvent.VK_A);
robot.keyRelease(KeyEvent.VK_A);
robot.mousePress(KeyEvent.BUTTON1_MASK);
robot.mouseRelease(KeyEvent.BUTTON1_MASK);
}
catch(Exception e)
{}
希望这会有所帮助。感谢。
答案 1 :(得分:0)
尝试在keyPress之后添加keyRelease
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
答案 2 :(得分:0)
我的代码工作正常,只需在keyPress之后添加keyRelease即可。我非常感谢你的所有评论,以帮助我解决这个问题。
答案 3 :(得分:0)
这种方法的主要问题是,如果页面内容或布局或屏幕分辨率或浏览器/设备发生变化,那么它很脆弱,这可能会破坏此脚本。
我会这样做:
基本上,您反复向下滚动并搜索元素,直到找到它或者到达页面底部。
脚本
int currentHeight = 1;
int lastHeight = 0;
boolean endOfPage = false;
while (!isElementPresent(locator) && !endOfPage)
{
currentHeight = scrollDown();
endOfPage = currentHeight == lastHeight;
}
if (!endOfPage)
{
// do something with the desired element
}
else
{
// log error that the element was not found before reaching end of page
}
支持功能
public static int scrollDown()
{
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
return (int) (long) js.executeScript("return document.body.scrollHeight;");
}
public static boolean isElementPresent(By locator)
{
return !driver.findElements(locator).isEmpty();
}