JavaScript webdriver-selenium`mouseMove`在Chromium上不准确?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript webdriver-selenium`mouseMove`在Chromium上不准确?相关的知识,希望对你有一定的参考价值。
通过NodeJs运行Chromedriver - protractor
和selenium-webdriver
- 针对Windows 10上的嵌入式Chromium。
似乎使用getLocation
返回准确的位置,但是当我尝试让WebDriver将鼠标移动到那些位置时,鼠标不会到达那里 - 除非我将位置乘以大约1.45。
当然那不可能是对的吗?
这是我多年来第一次使用Selenium,但我确信我之前没有这么做过。
下面是代码的缩写,带有一些webdriver日志:1。将鼠标移动到一个元素,1。按下鼠标按钮,1。稍等片刻,系统下测试反应,1。移动鼠标稍微为被测系统,1。稍等一下,1。移动到目标元素1.释放鼠标按钮。
如果我什么都不做改变,代码就可以工作,只能垂直移动。
如果我垂直移动,我认为没有效果。
如果我在一个Chromium窗口中运行代码两次,在每次运行开始时加载测试文档,则第二次运行会挂起文档加载。
var destLocation,
fromEl = $('elementA'),
destEl = $('elementB');
destEl.getLocation()
.then(() => {
browser.driver.actions()
.mouseMove( fromEl, {x: 10, y: 10} )
// 09:56:37.222 INFO - Done: [mousemove: 5 true]
.mouseDown( fromEl, {x: 10, y: 10} )
// 09:56:37.230 INFO - Done: [mousedown: no args]
.perform();
})
.then(() => {
browser.sleep(400);
})
.then(() => {
// Business logic requires this
browser.driver.actions().mouseMove( fromEl, {x:15, y:15} )
// 09:56:37.719 INFO - Done: [mousemove: 5 true]
.mouseDown()
// 09:56:37.726 INFO - Done: [mousedown: no args]
.perform();
})
.then(() => {
browser.sleep(400);
})
.then(() => {
browser.driver.actions().mouseMove( $('body'), destLocation ).perform();
// 09:56:38.209 INFO - Done: [mousemove: 9 true]
})
.then(() => {
browser.sleep(200);
})
.then(() => {
browser.driver.actions().mouseUp().perform();
// 09:56:38.425 INFO - Done: [mouseup: nothing]
});
- Selenium v2.52.0,Core v2.52.0。根据修订版4c2593c建造
- 驱动程序信息:driver.version:RemoteWebDriver
- AS:反向10 10.0 amd64
- Java:Oracle Corporation 25.91-b14
- chromedriver_2.21和chromedriver_2.15.322448似乎以同样的方式行事
- CEF 3.2454.1344.g2782fb8
- 铬45.0.2454.101
- WebKit 537.36
- javascript 4.5.103.35
您可以在selenium javascript中使用此代码进行鼠标悬停: -
const actions = driver.actions({bridge: true});
var elem=await driver.findElement(By.id("myId"));
await actions.move({duration:5000,origin:elem,x:0,y:0}).perform();
此代码必须在使用await时处于异步函数内,或者与promise一起使用,此代码可能会有所帮助: -
const actions = driver.actions({bridge: true});
driver.findElement(By.id("myId")).then((elem)=>{
actions.move({duration:5000,origin:elem,x:0,y:0}).perform();
});
希望能帮助到你....
这是向Chromium团队报告的一个错误,他无法使用所有库的最新版本重现该问题。
以上是关于JavaScript webdriver-selenium`mouseMove`在Chromium上不准确?的主要内容,如果未能解决你的问题,请参考以下文章
javascript JavaScript isset()等效: - JavaScript
JavaScript 使用JavaScript更改CSS(JavaScript)