new Actions(data).moveToElement(element,x,y).perform();
此代码适用于:硒3.8.1,Chrome 63,chromedriver 2.3.8
最终升级到:Selenium 3.14,Chrome 75,chromedriver 75.0.3770.9
我遇到错误:
org.openqa.selenium.interactions.MoveTargetOutOfBoundsException
有人建议我这样做
在版本75中将Chromedriver切换为符合w3c标准后,您现在 必须先滚动任何元素到视图中,然后才能对其执行操作
所以我添加了这段代码(isVisibleInViewport来自here)
private boolean isVisibleInViewport(WebElement element) {
return (boolean)((JavascriptExecutor)data).executeScript(
"var elem = arguments[0], " +
" box = elem.getBoundingClientRect(), " +
" cx = box.left + box.width / 2, " +
" cy = box.top + box.height / 2, " +
" e = document.elementFromPoint(cx, cy); " +
"for (; e; e = e.parentElement) { " +
" if (e === elem) " +
" return true; " +
"} " +
"return false; "
, element);
}
public void moveToElement(WebElement element, int x,int y){
if (!isVisibleInViewport(element)) ((JavascriptExecutor) data).executeScript("arguments[0].scrollIntoView();", element);
new Actions(data).moveToElement(element,x,y).perform();
}
但是我仍然遇到相同的错误:
org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: move target out of bounds
(Session info: chrome=75.0.3770.100)
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'TEST_VIRTUAL_114', ip: '192.168.215.2', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_181'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 75.0.3770.100, chrome: {chromedriverVersion: 75.0.3770.90 (a6dcaf7e3ec6f..., userDataDir: C:\Users\TestVirtualPC\AppData\Lo...}, goog:chromeOptions: {debuggerAddress: localhost:63560}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
那是什么问题呢?
答案 0 :(得分:0)
我不确定您是否遇到相同的问题,但是当我将chromedriver更新到version75时,我遇到了类似的问题。
在我使用左上角的偏移量之前,它对于以前版本的chromedriver正常运行。
但是从现在开始(版本75),我必须使用距Web元素中心的偏移量。
从网络元素的中心计算坐标解决了我的问题。
答案 1 :(得分:0)
以下内容对我有用。
WebElement element = driver.findElement(locator);
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
最初在这里发布:
https://github.com/mozilla/geckodriver/issues/776#issuecomment-353595601