繁体   English   中英

如何使用Java在Selenium WebDriver中多次按下Page Down键?

[英]How to keyPress Page Down multiple times in selenium WebDriver using java?

我想使用Java在Selenium WebDriver中使用Robot类向下滚动。 我发现要访问网页中的必需元素,我必须按PgDn按钮28次。 因此,我想使用Robot类按下28次PgDn按钮。 我为执行此操作而编写的代码如下:

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仅执行一次。

如果我们还需要添加密钥发布。 下面的代码可能会给您一些想法。

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)
{}

希望这可以帮助。 谢谢。

尝试在keyPress之后添加一个keyRelease

robot.keyRelease(KeyEvent.VK_PAGE_DOWN);

只需在keyPress之后添加keyRelease,我的代码就可以正常工作。 感谢您提出的所有意见,以帮助我解决此问题。

我使用这种方法的主要问题是它很脆弱,如果页面内容或布局或屏幕分辨率或浏览器/设备发生更改,则可能会破坏此脚本。

我会这样处理:

  1. 载入页面
  2. 搜索元素
  3. 向下滚动并转到2

基本上,您会反复向下滚动并搜索该元素,直到找到该元素或到达页面底部为止。

剧本

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM