我有一个div
(使用React组件),如下所示:
<div className="drag-tab" onMouseDown={this.handleMouseDown}>
<span className="drag-icon"></span>
</div>
handleMouseDown如下所示:
handleMouseDown(e) {
console.log('The mouse down event');
}
我想使用selenium webdriver为此编写验收测试。我的代码中的重要部分如下所示:
async function dragWidget() {
const elem = driver.findElement(By.css('.drag-tab'));
//await driver.sleep(1000);
return driver
.actions()
.mouseDown(elem)
// some other stuff for dragging here
.perform()
}
当我取消注释await driver.sleep(1000);
时,它会进入处理程序并记录“鼠标按下事件”。但是没有睡觉它就不会去那里。似乎需要一些时间来设置onMouseDown
监听器。我已经尝试了一切,等到它准备好“鼠标被击落”,但没有任何成功。我试过的是等待elementIsEnabled
,elementLocated
,elementIsVisible
,但它们不起作用。我不想使用sleep
。请注意,如果我使用onClick
更改鼠标按下事件,则会发生类似情况。但是我需要解决鼠标的问题。
谢谢
更新
问题在于div具有使元素超出其父div的范围的样式,即它是这样的:
<div className="parent-div">
<div className="drag-tab" onMouseDown={this.handleMouseDown}>
<span className="drag-icon"></span>
</div>
</div>
风格:
.drag-tab {
position: absolute;
display: inline;
width: 40px;
height: 48px;
top: 150px;
left: -40px;
}
问题是-40px
部分使div'40px留给父div。奇怪的是,如果我将-40px更改为-20px测试工作,-21px则不然。 (断点似乎是宽度的一半)。