亲爱的聪明人,
我试图让 Selenium 选择一系列 15 个复选框,但是,在需要滚动之前,只有前八个是可见的。
我试图让 Selenium 在嵌入网页的动态生成的 JavaScript 窗口中滚动,但没有运气。问题是内部窗口的滚动条没有任何 html 表示,因为它是嵌入式小程序中的一个对象。
没有scrollIntoView()
类型解决方案有效,因为复选框在滚动发生后动态加载之前不存在。
人类用户滚动内部窗口的方式可以是:
- 将光标聚焦在内部窗口中并向下滚动鼠标滚轮
- 单击并按住嵌入式滚动条中的向下箭头(没有 html 表示)
- 向下拖动嵌入的滚动条(没有 html 表示)
我曾尝试使用JavascriptExecutor
诸如scrollTo
,scrollBy
之类的解决方案scrollTop
,但没有运气。
我尝试过解决方法,例如:
- 一种调用按键的方法,例如
ARROW_DOWN
,PAGE_DOWN
和ENTER
各种组合。在各种机器上取得了部分成功,但没有什么可靠的:
public static void simulateScrolling(Actions action) {
//example code, there were a few variations
action.sendKeys(Keys.ENTER).build().perform();
action.sendKeys(Keys.ENTER).build().perform();
action.sendKeys(Keys.ENTER).build().perform();
//wait for the next button to buffer
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
- 在将光标移动到内部窗口上后,使用Java的
Robot
方法让鼠标滚动,但没有成功:mouseWheel()
Robot rob = new Robot();
rob.mouseMove(driver.findElement(By.id(checkboxId)).getLocation().getX(),driver.findElement(By.id(checkboxId)).getLocation().getY());
rob.delay(750);
rob.mouseWheel(200);
任何帮助将不胜感激。
谢谢!